i18n: Fix incorrect chain generation
This commit is contained in:
committed by
Michael Fabian Dirks
parent
c296e7cc6b
commit
f92f52bafa
@@ -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
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user