JudgePole/Public/ecma/Managers/I18NManager.ecma.js
2026-09-20 17:12:09 +02:00

81 lines
2.6 KiB
JavaScript

"use strict";
const I18NManager = (function(){
const I18NManager = function(judge_pole){
const self = this,
sentences = {};
let language = "espanol";
const constructor = () => {
[i18n, typeof custom_i18n != "undefined" ? custom_i18n : {}].forEach(block => {
self.add(block, true);
});
self.set_language(judge_pole.settings.get("language"), null, Object.keys(sentences)[0] || language);
};
this.add = (new_sentences, overwrite = true) => {
for(const language in new_sentences){
if(!sentences[language])
sentences[language] = {};
for(const key in new_sentences[language])
if(overwrite || sentences[language][key] === undefined)
sentences[language][key] = new_sentences[language][key];
};
};
const get_sentence = (strings, _default) => {
const done = [];
if(typeof strings == "string")
strings = [strings];
for(const current of [language].concat(Object.keys(sentences)))
if(!done.includes(current)){
done.push(current);
for(const key of strings)
if(sentences[current][key] !== undefined)
return sentences[current][key];
};
if(_default !== null)
return _default;
for(const text of strings)
return text;
return "";
};
this.get = (strings, inputs = null, _default = null) => Common.string_variables(get_sentence(strings, _default), inputs);
this.update = () => {
document.querySelectorAll("[data-i18n]").forEach(element => {
const text = self.get(element.getAttribute("data-i18n"));
if(element.getAttribute("data-i18n-without") != "true")
element.textContent = text;
["title", "alt", "placeholder"].forEach(key => {
element.hasAttribute(key) && element.setAttribute(key, text);
});
})
};
this.set_language = new_language => {
if(language != new_language && sentences[new_language]){
language = new_language;
self.update();
};
};
this.get_languages = () => Object.keys(sentences);
this.get_current_language = () => language;
constructor();
};
return I18NManager;
})();