DPTW.I18N = function(dptw, input){ const self = this, sentences = {}; let started = false, overwrite_add, default_text, selected = null; const construct = () => {}; this.start = callback => { const end = status => typeof callback == "function" && callback(status); if(started){ end(false); return false; }; started = true; overwrite_add = dptw.settings(["i18n_overwrite", "overwrite"]); selected = dptw.settings(["default_language", "language"]); default_text = dptw.settings("default_text"); self.add(dptw.settings("i18n_files"), true, () => { end(true); }); return true; }; this.add = (inputs, overwrite, callback) => dptw.load_blocks( dptw.set_array(inputs), json => { typeof overwrite != "boolean" && (overwrite = overwrite_add); for(const language in json){ !sentences[language] && (sentences[language] = {}); for(const key in json[language]) (overwrite || sentences[language][key] === undefined) && (sentences[language][key] = json[language][key]); }; }, callback, 0 ); const get = keys => { const l = (keys = ( keys instanceof Array ? keys : typeof keys == "string" ? [keys] : []).filter((key, i, array) => typeof key == "string" && array.indexOf(key) == i)).length; if(l){ const languages = [selected].concat(Object.keys(sentences)), m = languages.length; for(let j = 0; j < m; j ++) if(languages[j] && sentences[languages[j]]) for(let i = 0; i < l; i ++) if(keys[i] && sentences[languages[j]][keys[i]] !== undefined) return sentences[languages[j]][keys[i]]; return keys[0]; }; return default_text; }; this.get = (keys, variables) => dptw.string_variables(get(keys), variables); construct(); };