qwc2
Version:
QGIS Web Client
109 lines (108 loc) • 3.88 kB
JavaScript
/**
* 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;