UNPKG

qwc2

Version:
109 lines (108 loc) 3.88 kB
/** * Copyright 2015 GeoSolutions Sas * Copyright 2016-2024 Sourcepole AG * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */ import axios from 'axios'; import deepmerge from 'deepmerge'; import StandardApp from '../components/StandardApp'; import ConfigUtils from './ConfigUtils'; var LocaleUtils = { loadLocale: function loadLocale(lang, fallbackLangData) { return new Promise(function (resolve) { var loadLang = null; var availableLanguages = process.env.AvailableLanguages; if (availableLanguages.indexOf(lang) !== -1) { // Exact match: lang-REGION loadLang = lang; } else if (availableLanguages.indexOf(lang.slice(0, 2)) !== -1) { // Exact match: lang loadLang = lang.slice(0, 2); } else { // Try match lang-<OTHER_REGION> loadLang = availableLanguages.find(function (lc) { return lc.slice(0, 2) === lang.slice(0, 2); }); } var config = { headers: { 'Content-Type': 'application/json' }, data: {} }; var translationsPath = ConfigUtils.getTranslationsPath(); var resolveLang = function resolveLang(locale, messages) { if (ConfigUtils.getConfigProp("loadTranslationOverrides")) { axios.get(translationsPath + '/' + locale + '_overrides.json', config).then(function (response) { var overrideMessages = response.data.messages; resolve({ locale: locale, messages: deepmerge(messages, overrideMessages) }); })["catch"](function () { resolve({ locale: locale, messages: messages }); }); } else { resolve({ locale: locale, messages: messages }); } }; if (!loadLang) { // eslint-disable-next-line console.warn("No suitable translations available for " + lang + ", defaulting to " + fallbackLangData.locale); resolveLang(fallbackLangData.locale, fallbackLangData.messages); } else { axios.get(translationsPath + '/' + loadLang + '.json', config).then(function (response) { resolveLang(loadLang, response.data.messages); })["catch"](function () { // eslint-disable-next-line console.warn("Failed to load translations for " + loadLang + ", defaulting to " + fallbackLangData.locale); resolveLang(fallbackLangData.locale, fallbackLangData.messages); }); } }); }, tr: function tr(key) { var state = StandardApp.store.getState(); var text = key in state.locale.messages ? state.locale.messages[key] || state.locale.fallbackMessages[key] || key : key; var args = Array.prototype.slice.call(arguments, 1); if (args.length > 0) { return text.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] !== 'undefined' ? args[number] : match; }); } else { return text; } }, // Just a stub to make updateTranslations pick up the msgId trmsg: function trmsg(key) { return key; }, trWithFallback: function trWithFallback(key, fallback) { var state = StandardApp.store.getState(); return state.locale.messages[key] || fallback; }, lang: function lang() { var state = StandardApp.store.getState(); return state.locale.current; }, toLocaleFixed: function toLocaleFixed(number, decimals) { if (ConfigUtils.getConfigProp("localeAwareNumbers")) { return number.toLocaleString(LocaleUtils.lang(), { minimumFractionDigits: decimals, maximumFractionDigits: decimals }); } else { return number.toFixed(decimals); } } }; export default LocaleUtils;