i18n: Fix incorrect chain generation

This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2018-11-29 02:36:26 +01:00
committed by Michael Fabian Dirks
parent c296e7cc6b
commit f92f52bafa
+22 -46
View File
@@ -132,6 +132,7 @@ class I18n {
} }
_defaultResolver(language, key, element) { _defaultResolver(language, key, element) {
element;
return this.translate(key, language); return this.translate(key, language);
} }
@@ -186,7 +187,8 @@ class I18n {
} }
// Create a new chain without relying on our own function. // Create a new chain without relying on our own function.
let chain = [language]; // Chains always contain the language itself. let chain = new Array();
chain.push(language); // Chains always contain the language itself.
// Now we walk through the chain manually, modifying it as we go. // Now we walk through the chain manually, modifying it as we go.
for (let pos = 0; pos < chain.length; pos++) { for (let pos = 0; pos < chain.length; pos++) {
@@ -194,66 +196,38 @@ class I18n {
if (!this.languages.has(chain[pos])) { if (!this.languages.has(chain[pos])) {
continue; continue;
} }
let languageMap = this.languages.get(chain[pos]); let languageMap = this.languages.get(chain[pos]);
// Check if there is a base language override. // Check if there is a base language override.
if (!languageMap.has(this.baseLanguageKey)) { if (!languageMap.has(this.baseLanguageKey)) {
continue; continue;
} }
// If yes, walk it.
let baseLanguages = languageMap.get(this.baseLanguageKey); let baseLanguages = languageMap.get(this.baseLanguageKey);
// Convert to array for for...in.
if (typeof (baseLanguages) == 'string') { if (typeof (baseLanguages) == 'string') {
baseLanguages = [baseLanguages]; baseLanguages = [baseLanguages];
} else if (typeof (baseLanguages) == 'array') { } else if (!(baseLanguages instanceof Array)) {
} else {
continue; continue;
} }
for (let baseLanguage in baseLanguages) { for (let base of baseLanguages) {
baseLanguage = this._sanitizeLanguage(baseLanguage); base = this._sanitizeLanguage(base);
if (!chain.includes(baseLanguage) && (this.languages.has(baseLanguage))) { if (!chain.includes(base) && (this.languages.has(base))) {
chain = chain.push(baseLanguage); chain.push(base);
}
} }
} }
// We are now through with the actual language chain, so we now have to check for the base language chain. // Append the global base languages if there are no other languages left.
// The logic for this is identical to the above. if (pos == (chain.length - 1)) {
let baseChain = this.baseLanguage; let baseLanguages = this.baseLanguage;
if (typeof(this.baseLanguage) == 'string') { if (typeof(this.baseLanguage) == 'string') {
baseChain = [baseChain]; baseLanguages = [this.baseLanguage];
} }
for (let pos = 0; pos < baseChain.length; pos++) { for (let base of baseLanguages) {
// Check if the language is loaded, if not skip it. if (!chain.includes(base) && (this.languages.has(base))) {
if (!this.languages.has(baseChain[pos])) { chain.push(base);
continue;
} }
let languageMap = this.languages.get(baseChain[pos]);
// Check if there is a base language override.
if (!languageMap.has(this.baseLanguageKey)) {
continue;
}
// If yes, walk it.
let baseLanguages = languageMap.get(this.baseLanguageKey);
if (typeof (baseLanguages) == 'string') {
baseLanguages = [baseLanguages];
} else if (typeof (baseLanguages) == 'array') {
} else {
continue;
}
for (let baseLanguage in baseLanguages) {
baseLanguage = this._sanitizeLanguage(baseLanguage);
if ((!chain.includes(baseLanguage)) && (!baseChain.includes(baseLanguage)) && (this.languages.has(baseLanguage))) {
baseChain = baseChain.push(baseLanguage);
chain.push(baseLanguage);
} }
} }
} }
@@ -305,9 +279,9 @@ class I18n {
// Decode File, Blob and string to JSON object. // Decode File, Blob and string to JSON object.
if ((data instanceof File) || (data instanceof Blob)) { if ((data instanceof File) || (data instanceof Blob)) {
await new Promise((resolve2, reject2) => {
let freader = new FileReader(); let freader = new FileReader();
freader.onload((ev) => { await new Promise((resolve2, reject2) => {
freader.onload(() => {
resolve2(); resolve2();
}); });
freader.onabort((ev) => { freader.onabort((ev) => {
@@ -351,11 +325,13 @@ class I18n {
this._verifyLanguageKnown(language); this._verifyLanguageKnown(language);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
reject;
this._verifyLanguageKnown(language); this._verifyLanguageKnown(language);
let language_data = {}; let language_data = {};
let language_map = this.languages.get(language); let language_map = this.languages.get(language);
language_map.forEach((value, key, map) => { language_map.forEach((value, key, map) => {
map;
language_data[key] = value; language_data[key] = value;
}); });
let json_data = JSON.stringify(language_data); let json_data = JSON.stringify(language_data);
@@ -527,5 +503,5 @@ class I18n {
if (typeof (module) != 'undefined') { if (typeof (module) != 'undefined') {
module.exports = exports = { module.exports = exports = {
'I18n': I18n 'I18n': I18n
} };
} }