diff options
author | Joas Schilling <coding@schilljs.com> | 2016-10-04 13:29:54 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2016-10-04 13:29:54 +0200 |
commit | 53ed3da05250672817e6bfaccfc3551e9a14288e (patch) | |
tree | f222078565952beedb0a0c37b34066b8d041b98a /lib | |
parent | acd90669ff4ea542091697056a6b24af5be02dc9 (diff) | |
download | nextcloud-server-53ed3da05250672817e6bfaccfc3551e9a14288e.tar.gz nextcloud-server-53ed3da05250672817e6bfaccfc3551e9a14288e.zip |
Fallback from "de" to "de_DE" and the other way around
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/legacy/app.php | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php index 9ae8234d24f..c3d2d1d6ad4 100644 --- a/lib/private/legacy/app.php +++ b/lib/private/legacy/app.php @@ -1332,21 +1332,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; } /** |