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) {
|
_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
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user