From 3bac68dffb99f47224beda064b7e4ed055eb65e2 Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Sun, 9 Jun 2024 17:06:35 +0200 Subject: [PATCH] Improved language detection code --- .../RainLoop/Actions/Localization.php | 33 +++---------------- .../libraries/RainLoop/Config/Application.php | 9 +---- .../v/0.0.0/app/libraries/snappymail/l10n.php | 12 +++++++ 3 files changed, 18 insertions(+), 36 deletions(-) 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 f79e7f2bc..d0b2069ac 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 @@ -30,38 +30,15 @@ trait Localization public function ValidateLanguage(string $sLanguage, string $sDefault = '', bool $bAdmin = false, bool $bAllowEmptyResult = false): string { - $aLang = \SnappyMail\L10n::getLanguages($bAdmin); + $sResult = \SnappyMail\L10n::validLanguage($sLanguage, $bAdmin) + ?: \SnappyMail\L10n::validLanguage($sDefault, $bAdmin); - $sLanguage = \strtr($sLanguage, '_', '-'); - $sDefault = \strtr($sDefault, '_', '-'); - - if (\in_array($sLanguage, $aLang)) { - return $sLanguage; - } - - if (\str_contains($sLanguage, '-')) { - $sLanguage = \strtok($sLanguage, '-'); - if (\in_array($sLanguage, $aLang)) { - return $sLanguage; - } - } - - if (\in_array($sDefault, $aLang)) { - return $sDefault; - } - if (\str_contains($sDefault, '-')) { - $sDefault = \strtok($sDefault, '-'); - if (\in_array($sDefault, $aLang)) { - return $sDefault; - } - } - - if ($bAllowEmptyResult) { - return ''; + if ($sResult || $bAllowEmptyResult) { + return $sResult ?: ''; } $sResult = $this->Config()->Get($bAdmin ? 'admin_panel' : 'webmail', 'language', 'en'); - return \in_array($sResult, $aLang) ? $sResult : 'en'; + return \SnappyMail\L10n::validLanguage($sResult, $bAdmin) ? $sResult : 'en'; } public function detectClientLanguage(bool $bAdmin): string diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php index 1d2c6489f..b37e9cc18 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php @@ -138,14 +138,7 @@ class Application extends \RainLoop\Config\AbstractConfig } } if ('language' === $sParamKey) { - $aLang = \SnappyMail\L10n::getLanguages('admin_panel' === $sSectionKey); - $sLanguage = \strtr($mParamValue, '_', '-'); - if (!\in_array($sLanguage, $aLang)) { - if (\str_contains($sLanguage, '-')) { - $sLanguage = \strtok($sLanguage, '-'); - } - } - $mParamValue = \in_array($sLanguage, $aLang) ? $sLanguage : 'en'; + $mParamValue = \SnappyMail\L10n::validLanguage($mParamValue, 'admin_panel' === $sSectionKey) ?: 'en'; } parent::Set($sSectionKey, $sParamKey, $mParamValue); } diff --git a/snappymail/v/0.0.0/app/libraries/snappymail/l10n.php b/snappymail/v/0.0.0/app/libraries/snappymail/l10n.php index ed056f0a9..78d8c642e 100644 --- a/snappymail/v/0.0.0/app/libraries/snappymail/l10n.php +++ b/snappymail/v/0.0.0/app/libraries/snappymail/l10n.php @@ -34,6 +34,18 @@ abstract class L10n return $aCache[$bAdmin]; } + public static function validLanguage(string $sLanguage, bool $bAdmin) : ?string + { + $aLang = static::getLanguages($bAdmin); + $sLanguage = \strtr($sLanguage, '_', '-'); + if (!\in_array($sLanguage, $aLang)) { + if (\str_contains($sLanguage, '-')) { + $sLanguage = \strtok($sLanguage, '-'); + } + } + return \in_array($sLanguage, $aLang) ? $sLanguage : null; + } + /** * When $sLanguage is like 'sv-SE', it tries to load and merge (in order): en, sv and sv-SE * $sFile is either 'admin', 'static' or 'user'