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
+23 -47
View File
@@ -132,6 +132,7 @@ class I18n {
}
_defaultResolver(language, key, element) {
element;
return this.translate(key, language);
}
@@ -186,7 +187,8 @@ class I18n {
}
// 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.
for (let pos = 0; pos < chain.length; pos++) {
@@ -194,66 +196,38 @@ class I18n {
if (!this.languages.has(chain[pos])) {
continue;
}
let languageMap = this.languages.get(chain[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);
// Convert to array for for...in.
if (typeof (baseLanguages) == 'string') {
baseLanguages = [baseLanguages];
} else if (typeof (baseLanguages) == 'array') {
} else {
} else if (!(baseLanguages instanceof Array)) {
continue;
}
for (let baseLanguage in baseLanguages) {
baseLanguage = this._sanitizeLanguage(baseLanguage);
if (!chain.includes(baseLanguage) && (this.languages.has(baseLanguage))) {
chain = chain.push(baseLanguage);
}
for (let base of baseLanguages) {
base = this._sanitizeLanguage(base);
if (!chain.includes(base) && (this.languages.has(base))) {
chain.push(base);
}
}
// We are now through with the actual language chain, so we now have to check for the base language chain.
// The logic for this is identical to the above.
let baseChain = this.baseLanguage;
if (typeof (this.baseLanguage) == 'string') {
baseChain = [baseChain];
// Append the global base languages if there are no other languages left.
if (pos == (chain.length - 1)) {
let baseLanguages = this.baseLanguage;
if (typeof(this.baseLanguage) == 'string') {
baseLanguages = [this.baseLanguage];
}
for (let pos = 0; pos < baseChain.length; pos++) {
// Check if the language is loaded, if not skip it.
if (!this.languages.has(baseChain[pos])) {
continue;
for (let base of baseLanguages) {
if (!chain.includes(base) && (this.languages.has(base))) {
chain.push(base);
}
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.
if ((data instanceof File) || (data instanceof Blob)) {
await new Promise((resolve2, reject2) => {
let freader = new FileReader();
freader.onload((ev) => {
await new Promise((resolve2, reject2) => {
freader.onload(() => {
resolve2();
});
freader.onabort((ev) => {
@@ -351,11 +325,13 @@ class I18n {
this._verifyLanguageKnown(language);
return new Promise((resolve, reject) => {
reject;
this._verifyLanguageKnown(language);
let language_data = {};
let language_map = this.languages.get(language);
language_map.forEach((value, key, map) => {
map;
language_data[key] = value;
});
let json_data = JSON.stringify(language_data);
@@ -527,5 +503,5 @@ class I18n {
if (typeof (module) != 'undefined') {
module.exports = exports = {
'I18n': I18n
}
};
}