Files
2025-07-16 16:30:56 +00:00

96 lines
3.0 KiB
JavaScript

"use strict";
const sprintf_js_1 = require("sprintf-js");
class i18n {
constructor(options = {}) {
this.data = {};
this.languages = options.languages || ['default'];
if (!Array.isArray(this.languages)) {
this.languages = [this.languages];
}
}
get(languages) {
const { data } = this;
const result = {};
if (languages) {
if (!Array.isArray(languages)) {
languages = [languages];
}
}
else {
languages = this.languages;
}
languages.forEach(lang => {
const langData = data[lang];
if (langData) {
Object.keys(langData).forEach(key => {
if (!Object.prototype.hasOwnProperty.call(result, key)) {
result[key] = langData[key];
}
});
}
});
return result;
}
set(lang, data) {
if (typeof lang !== 'string')
throw new TypeError('lang must be a string!');
if (typeof data !== 'object')
throw new TypeError('data is required!');
this.data[lang] = flattenObject(data);
return this;
}
remove(lang) {
if (typeof lang !== 'string')
throw new TypeError('lang must be a string!');
delete this.data[lang];
return this;
}
list() {
return Object.keys(this.data);
}
__(lang) {
const data = this.get(lang);
return (key, ...args) => {
if (!key)
return '';
const str = data[key] || key;
return (0, sprintf_js_1.vsprintf)(str, args);
};
}
_p(lang) {
const data = this.get(lang);
return (key, ...args) => {
if (!key)
return '';
const number = args.length ? +args[0] : 0;
let str = key;
if (!number && Object.prototype.hasOwnProperty.call(data, `${key}.zero`)) {
str = data[`${key}.zero`];
}
else if (number === 1 && Object.prototype.hasOwnProperty.call(data, `${key}.one`)) {
str = data[`${key}.one`];
}
else if (Object.prototype.hasOwnProperty.call(data, `${key}.other`)) {
str = data[`${key}.other`];
}
else if (Object.prototype.hasOwnProperty.call(data, key)) {
str = data[key];
}
return (0, sprintf_js_1.vsprintf)(str, args);
};
}
}
function flattenObject(data, obj = {}, parent = '') {
Object.keys(data).forEach(key => {
const item = data[key];
if (typeof item === 'object') {
flattenObject(item, obj, `${parent + key}.`);
}
else {
obj[parent + key] = item;
}
});
return obj;
}
module.exports = i18n;
//# sourceMappingURL=i18n.js.map