mirror of
https://github.com/octoleo/syncthing.git
synced 2024-12-22 19:08:58 +00:00
gui: Fix incorrect UI language auto detection (fixes #9668) Currently, the code only checks whether the detected language partially matches one of the available languages. This means that if the detected language is "fi" but among the available languages there is only "fil" and no "fi", then it will match "fi" with "fil", even though the two are completely different languages. With this change, the matching is only done when there is a hyphen in the language code, e.g. "en" will match with "en-US". Signed-off-by: Tomasz Wilczyński <twilczynski@naver.com>
This commit is contained in:
parent
d1c5100c98
commit
9aa2d2c92f
@ -59,30 +59,35 @@ angular.module('syncthing.core')
|
|||||||
// Find the first language in the list provided by the user's browser
|
// Find the first language in the list provided by the user's browser
|
||||||
// that is a prefix of a language we have available. That is, "en"
|
// that is a prefix of a language we have available. That is, "en"
|
||||||
// sent by the browser will match "en" or "en-US", while "zh-TW" will
|
// sent by the browser will match "en" or "en-US", while "zh-TW" will
|
||||||
// match only "zh-TW" and not "zh-CN".
|
// match only "zh-TW" and not "zh" or "zh-CN".
|
||||||
|
|
||||||
var i,
|
var i,
|
||||||
lang,
|
browserLang,
|
||||||
matching,
|
matching,
|
||||||
locale = _defaultLocale;
|
locale = _defaultLocale; // Fallback if nothing matched
|
||||||
|
|
||||||
for (i = 0; i < langs.length; i++) {
|
for (i = 0; i < langs.length; i++) {
|
||||||
lang = langs[i];
|
browserLang = langs[i];
|
||||||
|
|
||||||
if (lang.length < 2) {
|
if (browserLang.length < 2) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
matching = _availableLocales.filter(function (possibleLang) {
|
matching = _availableLocales.filter(function (possibleLang) {
|
||||||
// The langs returned by the /rest/langs call will be in lower
|
// The langs returned by the /svc/langs call will be in lower
|
||||||
// case. We compare to the lowercase version of the language
|
// case. We compare to the lowercase version of the language
|
||||||
// code we have as well.
|
// code we have as well.
|
||||||
possibleLang = possibleLang.toLowerCase();
|
possibleLang = possibleLang.toLowerCase();
|
||||||
if (possibleLang.length > lang.length) {
|
if (possibleLang.indexOf(browserLang) !== 0) {
|
||||||
return possibleLang.indexOf(lang) === 0;
|
// Prefix does not match
|
||||||
} else {
|
return false;
|
||||||
return lang.indexOf(possibleLang) === 0;
|
|
||||||
}
|
}
|
||||||
|
if (possibleLang.length > browserLang.length) {
|
||||||
|
// Must match up to the next hyphen separator
|
||||||
|
return possibleLang[browserLang.length] === '-';
|
||||||
|
}
|
||||||
|
// Same length, exact match
|
||||||
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (matching.length >= 1) {
|
if (matching.length >= 1) {
|
||||||
@ -90,7 +95,6 @@ angular.module('syncthing.core')
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Fallback if nothing matched
|
|
||||||
useLocale(locale);
|
useLocale(locale);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user