81 lines
2.6 KiB
JavaScript
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;
|
|
})(); |