i18n: Fix support for ES5 and above

This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2018-11-29 18:48:43 +01:00
parent a2f0659bce
commit 8ee2ea05f3
2 changed files with 38 additions and 30 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
}, },
"extends": "eslint:recommended", "extends": "eslint:recommended",
"parserOptions": { "parserOptions": {
"ecmaVersion": 2018, "ecmaVersion": 5,
"sourceType": "module" "sourceType": "module"
}, },
"rules": { "rules": {
+37 -29
View File
@@ -1,3 +1,5 @@
'use strict';
/* /*
Internationalization Class for JavaScript Internationalization Class for JavaScript
Copyright (C) 2018 Michael Fabian 'Xaymar' Dirks <info@xaymar.com> Copyright (C) 2018 Michael Fabian 'Xaymar' Dirks <info@xaymar.com>
@@ -273,44 +275,50 @@ class I18n {
language = this._sanitizeLanguage(language); language = this._sanitizeLanguage(language);
this._verifyData(data); this._verifyData(data);
return new Promise(async (resolve, reject) => { return new Promise((resolve, reject) => {
try { // Decode data from various forms.
let json_data; let decodePromise;
if ((data instanceof File) || (data instanceof Blob)) {
// Decode File, Blob and string to JSON object. decodePromise = new Promise((fileResolve, fileReject) => {
if ((data instanceof File) || (data instanceof Blob)) {
let freader = new FileReader(); let freader = new FileReader();
await new Promise((resolve2, reject2) => { freader.onload(() => {
freader.onload(() => { fileResolve(JSON.parse(freader.result));
resolve2();
});
freader.onabort((ev) => {
reject2(ev);
});
freader.onerror((ev) => {
reject2(ev);
});
freader.readAsText(data, encoding);
}); });
json_data = JSON.parse(freader.result); freader.onabort((ev) => {
} else if (typeof (data) == 'string') { fileReject(ev);
json_data = JSON.parse(data); });
} else if (typeof (data) == 'object') { freader.onerror((ev) => {
json_data = data; fileReject(ev);
} });
freader.readAsText(data, encoding);
});
} else if (typeof(data) == 'string') {
decodePromise = new Promise((parseResolve, parseReject) => {
parseReject;
parseResolve(JSON.parse(data));
});
} else if (typeof(data) == 'object') {
decodePromise = new Promise((passResolve, passReject) => {
passReject;
passResolve(data);
});
} else {
reject('invalid data');
}
// Load Data
decodePromise.then((result) => {
let language_map = new Map(); let language_map = new Map();
for (let key in json_data) { for (let key in result) {
language_map.set(key, json_data[key]); language_map.set(key, result[key]);
} }
this.languages.set(language, language_map); this.languages.set(language, language_map);
this.dirtyTs = performance.now(); this.dirtyTs = performance.now();
resolve(language); resolve(language);
} catch (e) { }, (reason) => {
reject(e); reject(reason);
return; });
}
}); });
} }