@wbg-mde/repository
Version:
Managing all common method for file system CRUD operations.
179 lines (178 loc) • 6.37 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const app_repo_utility_1 = require("../shared/app.repo.utility");
const i18n_core_1 = require("./i18n.core");
const encrypt_service_1 = require("../shared/services/encrypt.service");
class I18nTranslator {
constructor() {
this.languageResouce = {};
this.resourceRecieved = false;
this.firstLanguage = "en";
this.avilableLanguages = {};
this.keyNotFoundErr = "404: Key not found";
this.keys = {
default: "defaultLanguage",
resourcefile: "resouce_",
version: "i18n_version"
};
this.i18nCore = new i18n_core_1.I18nCore();
this.encryptService = new encrypt_service_1.EncryptService();
}
store(key, value) {
if (typeof value !== "string") {
value = JSON.stringify(value);
}
if (typeof Storage !== "undefined") {
localStorage[key] = value;
}
}
take(key) {
if (typeof Storage !== "undefined") {
return localStorage[key];
}
return undefined;
}
remove(key) {
if (typeof Storage !== "undefined") {
localStorage.removeItem(key);
}
}
setDefaultLanguage(lang) {
let appConfig = app_repo_utility_1.App_Repository_Utility.getAppConfig();
let def = lang || (appConfig.i18n ? appConfig.i18n.default : this.firstLanguage);
this.store(this.keys.default, def);
}
checkI18nResourcesVersion() {
let appConfig = app_repo_utility_1.App_Repository_Utility.getAppConfig();
let languages = this.languages();
let keys = Object.keys(languages);
let storedVersion = this.take(this.keys.version);
let version = appConfig.i18n.version || (new Date().getHours() + "." + new Date().getMinutes());
this.avilableLanguages = languages;
if (!storedVersion || (storedVersion && atob(storedVersion) !== version)) {
let resKey;
for (let i = 0; i < keys.length; i++) {
this.removeResourceFromStorage(keys[i]);
}
}
this.store(this.keys.version, btoa(version));
}
removeResourceFromStorage(language) {
this.remove(this.keys.resourcefile + language);
}
reloadResource(language, callback, reload) {
this.removeResourceFromStorage(language);
if (reload !== false) {
this.changeLanguage(language, callback);
}
else if (callback) {
callback();
}
}
getDefaultLanguage(callback) {
let def = this.take(this.keys.default);
if (!def) {
this.setDefaultLanguage();
this.getDefaultLanguage(callback);
}
this.activeLanguage = def;
if (callback) {
callback(def);
}
}
getLanguageResource(language, callback) {
language = language || this.activeLanguage;
if (!language) {
this.getDefaultLanguage((lang) => {
this.getLanguageResource(lang, callback);
});
}
else {
let resource = this.take((this.keys.resourcefile + language));
if (resource) {
this.languageResouce = JSON.parse(this.encryptService.decode(resource));
if (callback) {
callback(this.languageResouce);
}
}
else {
this.loadResource(language, (response) => {
if (response !== false) {
this.languageResouce = response;
if (callback) {
callback(this.languageResouce);
}
}
});
}
}
}
loadResource(language, callback) {
try {
let stored = this.take((this.keys.resourcefile + language));
if (!stored) {
this.i18nCore.geti18nResource(language, (response) => {
if (response.result === "ok") {
this.store((this.keys.resourcefile + language), this.encryptService.encode(JSON.stringify(response.resource)));
if (callback) {
callback(response.resource);
}
}
else {
callback(false);
}
});
}
else {
callback(JSON.parse(this.encryptService.decode(stored)));
}
}
catch (e) {
callback(false);
}
}
changeLanguage(language, callback) {
this.getLanguageResource(language, (resource) => {
this.activeLanguage = language;
this.setDefaultLanguage(language);
if (callback)
callback(resource);
});
}
translate(key, params) {
let text = this.languageResouce[key] || this.keyNotFoundErr;
if (params) {
text = this.formatString(text, params);
}
return text;
}
translateByLanguage(language, key, params) {
let resource = this.languageResouce;
if (this.activeLanguage !== language) {
let stored = this.take((this.keys.resourcefile + language));
if (stored) {
resource = JSON.parse(this.encryptService.decode(stored));
}
}
let text = resource[key] || this.keyNotFoundErr;
if (params) {
text = this.formatString(text, params);
}
return text;
}
formatString(text, appenders) {
if (appenders.length == 0 || !text) {
return text;
}
var str = text;
for (var i = 0; i < appenders.length; i++) {
var placeHolder = '{' + (i) + '}';
str = str.replace(placeHolder, appenders[i] || "");
}
return str;
}
languages() {
return app_repo_utility_1.App_Repository_Utility.getAlli18nResources();
}
}
exports.I18nTranslator = I18nTranslator;