From 66d9300b61de95098200732b57de8902770f7073 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Fri, 8 Dec 2023 00:58:42 +0100 Subject: [PATCH] Cleaner language detection --- .../0.0.0/app/libraries/RainLoop/Actions.php | 14 +-------- .../RainLoop/Actions/Localization.php | 31 +++++++++---------- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php index 32b45fa84..edf8af10c 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -621,7 +621,6 @@ class Actions 'allowLanguagesOnLogin' => (bool) $oConfig->Get('login', 'allow_languages_on_login', true) ); - $sLanguage = $oConfig->Get('webmail', 'language', 'en'); $UserLanguageRaw = $this->detectUserLanguage($bAdmin); if ($bAdmin) { @@ -746,10 +745,6 @@ class Actions } } - if ($oConfig->Get('login', 'determine_user_language', true)) { - $sLanguage = $this->ValidateLanguage($UserLanguageRaw, $sLanguage, false); - } - // MainAccount or AdditionalAccount $aResult = \array_merge($aResult, $this->getAccountData($oAccount)); @@ -761,9 +756,6 @@ class Actions $aResult[\lcfirst($key)] = $value; } */ - if ($oConfig->Get('webmail', 'allow_languages_on_settings', true)) { - $sLanguage = (string) $oSettings->GetConf('language', $sLanguage); - } $aResult['hourCycle'] = $oSettings->GetConf('hourCycle', ''); if (!$oSettings->GetConf('MessagesPerPage')) { @@ -827,10 +819,6 @@ class Actions // } } else { - if ($oConfig->Get('login', 'allow_languages_on_login', true) && $oConfig->Get('login', 'determine_user_language', true)) { - $sLanguage = $this->ValidateLanguage($UserLanguageRaw, $sLanguage, false); - } - if (SNAPPYMAIL_DEV) { $aResult['DevEmail'] = $oConfig->Get('labs', 'dev_email', ''); $aResult['DevPassword'] = $oConfig->Get('labs', 'dev_password', ''); @@ -864,7 +852,7 @@ class Actions $aResult['Theme'] = $this->GetTheme($bAdmin); - $aResult['language'] = $this->ValidateLanguage($sLanguage, '', false); + $aResult['language'] = $this->GetLanguage(); $aResult['userLanguage'] = $this->ValidateLanguage($UserLanguageRaw, '', false, true); $aResult['PluginsLink'] = $this->oPlugins->HaveJs($bAdmin) diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Localization.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Localization.php index d31974601..a40b924a3 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Localization.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions/Localization.php @@ -12,6 +12,9 @@ trait Localization } else { $sLanguage = $oConfig->Get('webmail', 'language', 'en'); if ($oAccount = $this->getAccountFromToken(false)) { + if ($oConfig->Get('login', 'determine_user_language', true)) { + $sLanguage = $this->ValidateLanguage($this->detectUserLanguage($bAdmin), $sLanguage, false); + } if ($oConfig->Get('webmail', 'allow_languages_on_settings', true) && ($oSettings = $this->SettingsProvider()->Load($oAccount))) { $sLanguage = $oSettings->GetConf('language', $sLanguage); @@ -66,26 +69,20 @@ trait Localization return \in_array($sResult, $aLang) ? $sResult : 'en'; } - private function getUserLanguagesFromHeader(): array - { - $aResult = $aList = array(); - $sAcceptLang = \strtolower(\MailSo\Base\Http::GetServer('HTTP_ACCEPT_LANGUAGE', 'en')); - if (!empty($sAcceptLang) && \preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', $sAcceptLang, $aList)) { - $aResult = \array_combine($aList[1], $aList[2]); - foreach ($aResult as $n => $v) { - $aResult[$n] = $v ? $v : 1; - } - - \arsort($aResult, SORT_NUMERIC); - } - - return $aResult; - } - public function detectUserLanguage(bool $bAdmin): string { $sResult = ''; - $aLangs = $this->getUserLanguagesFromHeader(); + $aLangs = $aList = array(); + + $sAcceptLang = \strtolower(\MailSo\Base\Http::GetServer('HTTP_ACCEPT_LANGUAGE', 'en')); + if (!empty($sAcceptLang) && \preg_match_all('/([a-z]{1,8}(?:-[a-z]{1,8})?)(?:;q=([0-9.]+))?/', $sAcceptLang, $aList)) { + $aLangs = \array_combine($aList[1], $aList[2]); + foreach ($aLangs as $n => $v) { + $aLangs[$n] = $v ? $v : 1; + } + + \arsort($aLangs, SORT_NUMERIC); + } foreach (\array_keys($aLangs) as $sLang) { $sLang = $this->ValidateLanguage($sLang, '', $bAdmin, true);