From 7d0d38348f674bbb93121e6115a4d9a5964a2242 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 4 Oct 2016 13:29:54 +0200 Subject: [PATCH] Fallback from "de" to "de_DE" and the other way around Signed-off-by: Joas Schilling --- lib/private/legacy/app.php | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index a029fdf7eb..f8219f17ac 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -1334,21 +1334,48 @@ class OC_App { } protected static function findBestL10NOption($options, $lang) { - $fallback = $englishFallback = false; + $fallback = $similarLangFallback = $englishFallback = false; + + $lang = strtolower($lang); + $similarLang = $lang; + if (strpos($similarLang, '_')) { + // For "de_DE" we want to find "de" and the other way around + $similarLang = substr($lang, 0, strpos($lang, '_')); + } + foreach ($options as $option) { if (is_array($option)) { if ($fallback === false) { $fallback = $option['@value']; } - if (isset($option['@attributes']['lang']) && $option['@attributes']['lang'] === $lang) { + if (!isset($option['@attributes']['lang'])) { + continue; + } + + $attributeLang = strtolower($option['@attributes']['lang']); + if ($attributeLang === $lang) { return $option['@value']; } + + if ($attributeLang === $similarLang) { + $similarLangFallback = $option['@value']; + } else if (strpos($attributeLang, $similarLang . '_') === 0) { + if ($similarLangFallback === false) { + $similarLangFallback = $option['@value']; + } + } } else { $englishFallback = $option; } } - return $englishFallback !== false ? $englishFallback : (string) $fallback; + + if ($similarLangFallback !== false) { + return $similarLangFallback; + } else if ($englishFallback !== false) { + return $englishFallback; + } + return (string) $fallback; } /**