UNPKG

@wbg-mde/repository

Version:

Managing all common method for file system CRUD operations.

179 lines (178 loc) 6.37 kB
"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;