stackpress
Version:
Incept is a content management framework.
66 lines (65 loc) • 1.87 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Language {
constructor() {
this._locale = 'en_US';
}
static get locales() {
return Object.keys(this._languages);
}
static get key() {
return this._key;
}
static configure(key, languages) {
this._key = key;
this._languages = languages;
return this;
}
static language(name) {
if (!this._languages[name]) {
return null;
}
return {
label: this._languages[name].label,
translations: Object.assign({}, this._languages[name].translations)
};
}
static load(req, defaults = 'en_US') {
const locale = req.session(this.key);
const language = new Language();
language.locale = locale || defaults;
return language;
}
get label() {
var _a;
return ((_a = Language._languages[this._locale]) === null || _a === void 0 ? void 0 : _a.label) || this._locale;
}
get locale() {
return this._locale;
}
get translations() {
var _a;
return ((_a = Language._languages[this._locale]) === null || _a === void 0 ? void 0 : _a.translations) || {};
}
set locale(locale) {
this._locale = locale;
}
save(res) {
res.session.set(Language.key, this._locale);
return this;
}
update(locale, res) {
this._locale = locale;
return this.save(res);
}
translate(phrase, ...variables) {
let translation = this.translations[phrase] || phrase;
for (let i = 0; i < variables.length; i++) {
translation = translation.replace('%s', String(variables[i]));
}
return translation;
}
}
Language._key = 'locale';
Language._languages = {};
exports.default = Language;