@alilc/lowcode-editor-core
Version:
Core Api for Ali lowCode engine
153 lines (151 loc) • 4.79 kB
JavaScript
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 };