Better detection of culture-specific locale in language list

(closes #3842)
This commit is contained in:
Bryan Housel
2017-02-15 15:09:14 -05:00
parent 2314acfec7
commit 1a1fc6db17
+22 -2
View File
@@ -59,14 +59,34 @@ export function utilDetect(force) {
// Added due to incomplete svg style support. See #715
detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
detected.locale = (navigator.languages && navigator.languages.length)
? navigator.languages[0] : (navigator.language || navigator.userLanguage || 'en-US');
detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
detected.language = detected.locale.split('-')[0];
// Search `navigator.languages` for a better locale.. Prefer the first language,
// unless the second language is a culture-specific version of the first one, see #3842
if (navigator.languages && navigator.languages.length > 0) {
var code0 = navigator.languages[0],
parts0 = code0.split('-');
detected.locale = code0;
detected.language = parts0[0];
if (navigator.languages.length > 1 && parts0.length === 1) {
var code1 = navigator.languages[1],
parts1 = code1.split('-');
if (parts1[0] === parts0[0]) {
detected.locale = code1;
}
}
}
// Loaded locale is stored in currentLocale
// return that instead (except in the situation where 'en' might override 'en-US')
var loadedLocale = currentLocale || 'en';
if (loadedLocale !== 'en') {
detected.locale = loadedLocale;
detected.language = detected.locale.split('-')[0];
}
// detect text direction