UNPKG

@alilc/lowcode-editor-core

Version:

Core Api for Ali lowCode engine

153 lines (151 loc) 4.79 kB
import _initializerDefineProperty from "@babel/runtime/helpers/initializerDefineProperty"; import _createClass from "@babel/runtime/helpers/createClass"; import _applyDecoratedDescriptor from "@babel/runtime/helpers/applyDecoratedDescriptor"; import _initializerWarningHelper from "@babel/runtime/helpers/initializerWarningHelper"; var _dec, _class, _descriptor; import { createModuleEventBus } from '../event-bus'; import { obx, computed } from '../utils/obx'; import { Logger } from '@alilc/lowcode-utils'; var logger = new Logger({ level: 'warn', bizName: 'globalLocale' }); var languageMap = { en: 'en-US', zh: 'zh-CN', zt: 'zh-TW', es: 'es-ES', pt: 'pt-PT', fr: 'fr-FR', de: 'de-DE', it: 'it-IT', ru: 'ru-RU', ja: 'ja-JP', ko: 'ko-KR', ar: 'ar-SA', tr: 'tr-TR', th: 'th-TH', vi: 'vi-VN', nl: 'nl-NL', he: 'iw-IL', id: 'in-ID', pl: 'pl-PL', hi: 'hi-IN', uk: 'uk-UA', ms: 'ms-MY', tl: 'tl-PH' }; var LowcodeConfigKey = 'ali-lowcode-config'; var GlobalLocale = (_dec = obx.ref, _class = /*#__PURE__*/function () { function GlobalLocale() { this.emitter = createModuleEventBus('GlobalLocale'); _initializerDefineProperty(this, "_locale", _descriptor, this); this.emitter.setMaxListeners(0); } var _proto = GlobalLocale.prototype; _proto.setLocale = function setLocale(locale) { logger.info("setting locale to " + locale); if (locale === this.locale) { return; } this._locale = locale; if (hasLocalStorage(window)) { var store = window.localStorage; var config; try { config = JSON.parse(store.getItem(LowcodeConfigKey) || ''); } catch (e) { // ignore; } if (config && typeof config === 'object') { config.locale = locale; } else { config = { locale: locale }; } store.setItem(LowcodeConfigKey, JSON.stringify(config)); } this.emitter.emit('localechange', locale); }; _proto.getLocale = function getLocale() { return this.locale; }; _proto.onChangeLocale = function onChangeLocale(fn) { var _this = this; this.emitter.on('localechange', fn); return function () { _this.emitter.removeListener('localechange', fn); }; }; return _createClass(GlobalLocale, [{ key: "locale", get: function get() { if (this._locale != null) { return this._locale; } // TODO: store 1 & store 2 abstract out as custom implements // store 1: config from storage var result = null; if (hasLocalStorage(window)) { var _config; var store = window.localStorage; var config; try { config = JSON.parse(store.getItem(LowcodeConfigKey) || ''); } catch (e) { // ignore; } if ((_config = config) !== null && _config !== void 0 && _config.locale) { result = (config.locale || '').replace('_', '-'); logger.debug("getting locale from localStorage: " + result); } } if (!result) { // store 2: config from window var localeFromConfig = getConfig('locale'); if (localeFromConfig) { result = languageMap[localeFromConfig] || localeFromConfig.replace('_', '-'); logger.debug("getting locale from config: " + result); } } if (!result) { // store 3: config from system var _ref = window, navigator = _ref.navigator; if (navigator.language) { var lang = navigator.language; return languageMap[lang] || lang.replace('_', '-'); } else if (navigator.browserLanguage) { var it = navigator.browserLanguage.split('-'); var localeFromSystem = it[0]; if (it[1]) { localeFromSystem += "-" + it[1].toUpperCase(); } result = localeFromSystem; logger.debug("getting locale from system: " + result); } } if (!result) { logger.warn('something when wrong when trying to get locale, use zh-CN as default, please check it out!'); result = 'zh-CN'; } this._locale = result; return result; } }]); }(), _descriptor = _applyDecoratedDescriptor(_class.prototype, "_locale", [_dec], { configurable: true, enumerable: true, writable: true, initializer: null }), _applyDecoratedDescriptor(_class.prototype, "locale", [computed], Object.getOwnPropertyDescriptor(_class.prototype, "locale"), _class.prototype), _class); function getConfig(name) { var win = window; return win[name] || (win.g_config || {})[name] || (win.pageConfig || {})[name]; } function hasLocalStorage(obj) { return obj.localStorage; } var globalLocale = new GlobalLocale(); export { globalLocale };