@numizmatclub/i18n-tool
Version:
A simple internationalization library
78 lines (63 loc) • 2.14 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var I18n = function () {
function I18n(fallbackTranslation) {
(0, _classCallCheck2["default"])(this, I18n);
this.translations = {};
this.fallbackTranslation = fallbackTranslation;
}
(0, _createClass2["default"])(I18n, [{
key: "addLocale",
value: function addLocale(locale, translation) {
this.translations[locale] = translation;
return this;
}
}, {
key: "assignTranslation",
value: function assignTranslation(locale) {
this.activeTranslation = this.translations[locale];
if (!this.activeTranslation) {
this.activeTranslation = this.translations[this.fallbackTranslation];
}
return this;
}
}, {
key: "t",
value: function t(key) {
var paths = key.split('.');
var template = this._findDeep(paths);
for (var _len = arguments.length, parameters = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
parameters[_key - 1] = arguments[_key];
}
if (parameters) {
parameters.forEach(function (parameter, index) {
template = template.replace("{".concat(index, "}"), parameter);
});
}
return template;
}
}, {
key: "_findDeep",
value: function _findDeep(paths) {
var current = this.activeTranslation;
var currentFallback = this.translations[this.fallbackTranslation];
for (var i = 0; i < paths.length; ++i) {
if (current[paths[i]] === undefined) {
current = currentFallback[paths[i]];
currentFallback = current;
if (current === undefined) {
return 'undefined';
}
} else {
current = current[paths[i]];
currentFallback = currentFallback[paths[i]];
}
}
return current;
}
}]);
return I18n;
}();
module.exports = I18n;