kitchen-simulator
Version:
It is a kitchen simulator (self-contained micro-frontend).
80 lines • 2.88 kB
JavaScript
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import EN from "./en";
import IT from "./it";
import RU from "./ru";
var DEFAULT_LOCALE = 'en';
var Translator = /*#__PURE__*/function () {
function Translator() {
_classCallCheck(this, Translator);
this.locale = null;
this.translations = {};
this.registerTranslation('en', EN);
this.registerTranslation('it', IT);
this.registerTranslation('ru', RU);
var locale = null;
var languages = Translator.getBrowserLanguages();
for (var i = 0; i < languages.length; i++) {
var lang = languages[i];
if (this.translations.hasOwnProperty(lang)) {
locale = lang;
break;
}
}
locale = locale ? locale : DEFAULT_LOCALE;
this.setLocale(locale);
}
return _createClass(Translator, [{
key: "t",
value: function t(phrase) {
for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
params[_key - 1] = arguments[_key];
}
return this.translate.apply(this, [phrase].concat(params));
}
}, {
key: "translate",
value: function translate(phrase) {
for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
params[_key2 - 1] = arguments[_key2];
}
var locale = this.locale;
var translation = this.translations[locale];
if (!translation.hasOwnProperty(phrase)) {
console.warn("translation '".concat(phrase, "' not found in language '").concat(locale, "'"));
return phrase;
}
var translatedPhrase = translation[phrase];
translatedPhrase = translatedPhrase.replace(/{(\d+)}/g, function (match, number) {
return typeof params[number] != 'undefined' ? params[number] : match;
});
return translatedPhrase;
}
}, {
key: "setLocale",
value: function setLocale(locale) {
locale = locale.toLowerCase();
if (this.translations.hasOwnProperty(locale)) {
this.locale = locale;
} else {
console.warn("locale '".concat(locale, "' not available, switch to ").concat(DEFAULT_LOCALE));
this.locale = DEFAULT_LOCALE.toLowerCase();
}
}
}, {
key: "registerTranslation",
value: function registerTranslation(locale, translations) {
if (!this.translations.hasOwnProperty(locale)) {
this.translations[locale] = translations;
} else {
Object.assign(this.translations[locale], translations);
}
}
}], [{
key: "getBrowserLanguages",
value: function getBrowserLanguages() {
return navigator.languages ? navigator.languages : [navigator.language || navigator.userLanguage];
}
}]);
}();
export { Translator as default };