aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2016-10-04 13:29:54 +0200
committerJoas Schilling <coding@schilljs.com>2016-10-04 13:29:54 +0200
commit53ed3da05250672817e6bfaccfc3551e9a14288e (patch)
treef222078565952beedb0a0c37b34066b8d041b98a /lib
parentacd90669ff4ea542091697056a6b24af5be02dc9 (diff)
downloadnextcloud-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.php33
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;
}
/**