Files
ArchiSteamFarm/WebConfigGenerator/src/i18n.js
2018-04-27 04:50:21 +02:00

47 lines
1.9 KiB
JavaScript

const defaultLocale = 'strings';
const nameRegex = /\.\/(\S+)\.json/i;
function getLocale(validLocales) {
const language = navigator.language; // If the browser doesn't support this, it will not support other page elements as well
if (!language) return defaultLocale; // If the browser doesn't provide the language - return default locale
if (language.length !== 2) return validLocales.includes(language) ? language : defaultLocale; // If the language is in `xx-XX` format, check if it's valid
if (validLocales.includes(`${language}-${language.toUpperCase()}`)) return `${language}-${language.toUpperCase()}`; // If the language is two letter code, check if corresponding 5 letter code is a valid locale
const languageRegex = new RegExp(`${language}\-\\\S\\\S`); // Create a regex to match `xx-**` where `*` is a wildcard
for (const validLocale of validLocales) {
if (languageRegex.test(validLocale)) return validLocale; // Check if the locale matches the regex, if so, return it
}
return defaultLocale; // If no match found, return default locale
}
function loadLocales() {
const locales = {};
const defaultLanguageFile = `./${defaultLocale}.json`;
const languages = require.context('./locale/', false, /\.json/);
locales[defaultLocale] = languages(defaultLanguageFile);
for (const lang of languages.keys()) {
if (lang === defaultLanguageFile) continue; // Already loaded.
const languageName = lang.match(nameRegex)[1];
const language = languages(lang);
for (const key in language) {
if (!language.hasOwnProperty(key)) continue;
if (language[key] === '') language[key] = locales[defaultLocale][key];
}
locales[languageName] = language;
}
return locales;
}
const messages = loadLocales();
const locale = getLocale(Object.keys(messages));
export default { messages, locale };