98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
const color = require("../functions/colorCodes")
|
|
class TranslationHandler {
|
|
constructor(languages) {
|
|
|
|
this.availableLanguages = languages ?? [
|
|
'en_EN',
|
|
// 'es_ES',
|
|
//'ar_AR',
|
|
// 'pt_BR',
|
|
//'sk_SK',
|
|
];
|
|
|
|
this.translations = {};
|
|
|
|
for (const l of this.availableLanguages) {
|
|
const data = require(`../languages/${l}.json`);
|
|
this.initLanguage(l, data);
|
|
}
|
|
|
|
console.log(color("%", `%b[Translation_Handler]%7 :: Loaded %e${this.availableLanguages.length} %7languages`));
|
|
}
|
|
|
|
initLanguage(key, language) {
|
|
this.translations[key] = language;
|
|
}
|
|
|
|
checkRegex(value) {
|
|
return /^[a-z]{2}_[A-Z]{2}$/.test(value);
|
|
}
|
|
|
|
getLanguage(language) {
|
|
if (!this.checkRegex(language)) return this.translations['en_EN'];
|
|
return this.translations[language];
|
|
}
|
|
|
|
addLanguage(language) {
|
|
if (!this.checkRegex(language)) {
|
|
throw new Error('Invalid language format. Example: en_EN');
|
|
}
|
|
|
|
this.availableLanguages.push(language);
|
|
}
|
|
|
|
reload() {
|
|
this.translations = {};
|
|
for (const l of this.availableLanguages) {
|
|
try {
|
|
const d = require(`../languages/${l}.json`);
|
|
|
|
if (!d) continue;
|
|
|
|
this.initLanguage(l, d);
|
|
return "Success"
|
|
} catch (e) {
|
|
return e.message;
|
|
}
|
|
}
|
|
}
|
|
|
|
get(language, path, data = {}) {
|
|
if (!language) language = 'en_EN';
|
|
const l = this.getLanguage(language);
|
|
const p = path.split('.');
|
|
let c = null;
|
|
|
|
if (p.length > 0) {
|
|
for (const i of p) {
|
|
try {
|
|
if (!c) {
|
|
if (!l.hasOwnProperty(i)) break;
|
|
c = l[i];
|
|
} else {
|
|
if (!c.hasOwnProperty(i)) break;
|
|
c = c[i];
|
|
}
|
|
} catch (err) {
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
return `Unknown translation: ${language} | ${path}`;;
|
|
}
|
|
|
|
if (!c) return `Unknown translation: ${language} | ${path}`;;
|
|
|
|
if (data) {
|
|
try {
|
|
return c.replace(/{(\w+)}/g, (match, key) => data[key] ?? match);
|
|
} catch (e) {
|
|
return `Unknown translation: ${language} | ${path}`;
|
|
}
|
|
}
|
|
|
|
return c;
|
|
}
|
|
};
|
|
|
|
module.exports = TranslationHandler; |