import { saveStoreToLocal } from './common-service';
import { setStoreData } from './composition';
let i18nInstance: any = null;
const langOptions = [
{ id: 'en', label: 'English', elId: 'en-US' },
{ id: 'zh', label: '简体中文', elId: 'zh-CN' },
{ id: 'ja', label: '日本語', elId: 'ja-JA' },
{ id: 'fr', label: 'Français', elId: 'fr-FR' },
{ id: 'ru', label: 'Русский', elId: 'ru-RU' }
];
* 语言优先级定义
* 1. KVM直连或SSO跳转KVM(首页)时指定了语言项,优先级:0
* 2。上次使用过得语言,优先级:1
* 3. 当前浏览器的语言,优先级:3
* 将语种优先级逐步代入到后端支持的语种列表中,若都不支持,则默认显示英文
*/
function computeWebLanguage(langSet: string[] = []): string {
const kvmLang = localStorage.getItem('kvmLocale');
const loct = localStorage.getItem('loct');
const browseLang = computedNavigatorLang();
if (kvmLang && langSet.includes(kvmLang)) {
localStorage.removeItem('kvmLocale');
return kvmLang;
}
if (loct) {
const locale = JSON.parse(loct).locale;
if (langSet.includes(locale)) {
return locale;
}
}
if (langSet.includes(browseLang)) {
return browseLang;
}
return 'en';
}
function computedNavigatorLang() {
let lang = 'en';
const browserLang = navigator.language.toLowerCase();
const supportsLang = langOptions.map(item => item.id);
supportsLang.forEach(sLang => {
if (browserLang.indexOf(sLang) > -1) {
lang = sLang;
}
});
return lang;
}
function saveI18nInstance(instance: any) {
i18nInstance = instance.global;
}
function traduction(str: string, arg?: any): string {
if (arg || arg === 0) {
return i18nInstance?.t(str, arg);
} else {
return i18nInstance?.t(str);
}
}
function getErrorTranslate(errorId: string) {
if (!errorId) {
return errorId;
}
const errorMessage = traduction(`${errorId}.errorMessage`);
const attrMessage = traduction(`${errorId}.attrMessage`);
const message = traduction(`${errorId}.message`);
if (attrMessage.indexOf(errorId) < 0) {
return attrMessage;
}
if (errorMessage.indexOf(errorId) < 0) {
return errorMessage;
}
if (message.indexOf(errorId) < 0) {
return message;
}
return traduction('COMMON_FAILED');
}
function setExtrasCss(lang: string) {
(document.querySelector('#app') as HTMLAnchorElement).className = lang;
}
export function setLangData(langSet: any) {
const locale = computeWebLanguage(langSet);
setStoreData('loct', 'locale', locale);
saveStoreToLocal();
setExtrasCss(locale);
const langs = langOptions.filter(lang => {
return langSet.indexOf(lang.id) > -1;
});
setStoreData('glob', 'langOptions', langs);
}
export { computeWebLanguage, langOptions, traduction, saveI18nInstance, getErrorTranslate };