Spaces:
Running
Running
File size: 1,762 Bytes
6bcb42f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/**
* @fileoverview
* Utility function to detect locale from the browser setting or paramenter on the URL.
*/
import queryString from 'query-string';
// tw: read language from localStorage
export const LANGUAGE_KEY = 'tw:language';
/**
* look for language setting in the browser. Check against supported locales.
* If there's a parameter in the URL, override the browser setting
* @param {Array.string} supportedLocales An array of supported locale codes.
* @return {string} the preferred locale
*/
const detectLocale = supportedLocales => {
// tw: read language from localStorage
try {
const storedLanguage = localStorage.getItem(LANGUAGE_KEY);
if (storedLanguage && supportedLocales.includes(storedLanguage)) {
return storedLanguage;
}
} catch (e) { /* ignore */ }
let locale = 'en'; // default
let browserLocale = window.navigator.userLanguage || window.navigator.language;
browserLocale = browserLocale.toLowerCase();
// try to set locale from browserLocale
if (supportedLocales.includes(browserLocale)) {
locale = browserLocale;
} else {
browserLocale = browserLocale.split('-')[0];
if (supportedLocales.includes(browserLocale)) {
locale = browserLocale;
}
}
const queryParams = queryString.parse(location.search);
// Flatten potential arrays and remove falsy values
const potentialLocales = [].concat(queryParams.locale, queryParams.lang).filter(l => l);
if (!potentialLocales.length) {
return locale;
}
const urlLocale = potentialLocales[0].toLowerCase();
if (supportedLocales.includes(urlLocale)) {
return urlLocale;
}
return locale;
};
export {
detectLocale
};
|