103 lines
2.5 KiB
JavaScript
Vendored

export default {
contextKeyPattern: /^\[([a-z][a-z0-9_]*)]\.([\s\S]+)$/,
/**
* 语言类型
*/
languageList: {
"zh": "简体中文",
"zh-CHT": "繁體中文",
"en": "English",
"ko": "한국어",
"ja": "日本語",
"de": "Deutsch",
"fr": "Français",
"id": "Indonesia",
"ru": "Русский язык",
},
/**
* 替换(*)遍历
* @param text
* @param objects
* @returns {*}
*/
replaceArgumentsLanguage(text, objects) {
let j = 1;
return text.replace(/\(\*\)/g, () => this.getArgumentLanguage(objects[j++]));
},
/**
* 获取语言参数
* @param value
* @returns {string|*}
*/
getArgumentLanguage(value) {
if (value === null || typeof value === "undefined" || typeof value === "object") {
return '';
}
return value;
},
/**
* 规范化参数化语言键
* @param text
* @returns {string}
*/
normalizeArgumentsLanguage(text) {
return text.replace(/\(%[TM]\d+\)/g, "(*)");
},
/**
* 移除翻译上下文前缀,例如 [weekday].一 -> 一
*/
stripContextLanguageKey(text) {
if (typeof text !== "string") {
return text;
}
return text.match(this.contextKeyPattern)?.[2] || text;
},
/**
* 获取语言
* @returns {string}
*/
getLanguage() {
let lang = window.localStorage.getItem("__system:languageName__")
if (typeof lang === "string" && typeof this.languageList[lang] !== "undefined") {
return lang;
}
lang = 'en';
let navLang = ((window.navigator.language || navigator.userLanguage) + "").toLowerCase();
switch (navLang) {
case "zh":
case "cn":
case "zh-cn":
lang = 'zh'
break;
case "zh-tw":
case "zh-tr":
case "zh-hk":
case "zh-cnt":
case "zh-cht":
lang = 'zh-CHT'
break;
default:
if (typeof this.languageList[navLang] !== "undefined") {
lang = navLang
}
break;
}
this.saveLanguage(lang)
return lang
},
/**
* 保存语言
* @param lang
*/
saveLanguage(lang) {
window.localStorage.setItem("__system:languageName__", lang)
},
}