From e7bd6e7663515a318c153e839d6a01f59113e767 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 15 Apr 2025 02:03:35 +0000 Subject: [PATCH] Issue 14881: Fixed language detection for danish --- src/Core/L10n.php | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Core/L10n.php b/src/Core/L10n.php index 79d83950a9..42949fa1fe 100644 --- a/src/Core/L10n.php +++ b/src/Core/L10n.php @@ -51,6 +51,11 @@ class L10n 'zh-cn' => '简体中文', ]; + CONST LANG_PARENTS = [ + 'en-gb' => 'en', 'da-dk' => 'da', 'fi-fi' => 'fi', + 'nb-no' => 'nb', 'pt-br' => 'pt', 'zh-cn' => 'zh' + ]; + /** @var string Undetermined language */ const UNDETERMINED_LANGUAGE = 'un'; @@ -150,6 +155,11 @@ class L10n $a = new \stdClass(); $a->strings = []; + $child = array_search($lang, $this::LANG_PARENTS); + if ($child) { + $lang = $child; + } + // load enabled addons strings $addons = array_keys($this->config->get('addons') ?? []); foreach ($addons as $addon) { @@ -203,6 +213,8 @@ class L10n // start with quality zero (every guessed language is more acceptable ..) $current_q = 0; + $supported = self::getSupportedLanguages(); + foreach ($acceptedLanguages as $acceptedLanguage) { $res = preg_match( '/^([a-z]{1,8}(?:-[a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', @@ -230,8 +242,7 @@ class L10n while (count($lang_code)) { // try to mix them so we can get double-code parts too $match_lang = strtolower(join('-', $lang_code)); - if (file_exists(__DIR__ . "/../../view/lang/$match_lang") && - is_dir(__DIR__ . "/../../view/lang/$match_lang")) { + if (in_array($match_lang, $supported)) { if ($lang_quality > $current_q) { $current_lang = $match_lang; $current_q = $lang_quality; @@ -247,6 +258,20 @@ class L10n return $current_lang; } + private static function getSupportedLanguages(): array + { + $languages = []; + foreach (glob('view/lang/*/strings.php') as $language) { + $code = str_replace(['view/lang/', '/strings.php'], [], $language); + if (!empty(self::LANG_PARENTS[$code])) { + $languages[] = self::LANG_PARENTS[$code]; + } + $languages[] = $code; + } + + return $languages; + } + /** * Return the localized version of the provided string with optional string interpolation *