mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-17 04:28:11 +00:00
225 lines
6.0 KiB
JavaScript
Vendored
225 lines
6.0 KiB
JavaScript
Vendored
import {languageDefaultData} from "./data";
|
|
|
|
let languageUtils = {
|
|
/**
|
|
* 是否数组
|
|
* @param obj
|
|
* @returns {boolean}
|
|
*/
|
|
isArray(obj) {
|
|
return typeof (obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == '[object array]' && typeof obj.length == "number";
|
|
},
|
|
|
|
/**
|
|
* 转换Ascii编码
|
|
* @param value
|
|
* @returns {string}
|
|
*/
|
|
convertAscii(value) {
|
|
if (typeof value !== "string") {
|
|
value = String(value)
|
|
}
|
|
let nativecode = value.split("");
|
|
let ascii = "";
|
|
for (let i = 0; i < nativecode.length; i++) {
|
|
let code = Number(nativecode[i].charCodeAt(0));
|
|
if (code > 127) {
|
|
let charAscii = code.toString(16);
|
|
charAscii = String("0000").substring(charAscii.length, 4) + charAscii;
|
|
ascii += "\\u" + charAscii;
|
|
} else {
|
|
ascii += nativecode[i];
|
|
}
|
|
}
|
|
return ascii
|
|
},
|
|
|
|
/**
|
|
* 替换(*)遍历
|
|
* @param text
|
|
* @param objects
|
|
* @returns {*}
|
|
*/
|
|
replaceArgumentsLanguage(text, objects) {
|
|
let j = 1;
|
|
while (text.indexOf("(*)") !== -1) {
|
|
if (typeof objects[j] === "object") {
|
|
text = text.replace("(*)", "");
|
|
} else {
|
|
text = text.replace("(*)", objects[j]);
|
|
}
|
|
j++;
|
|
}
|
|
return text;
|
|
},
|
|
|
|
/**
|
|
* 译文转义
|
|
* @param val
|
|
* @returns {string|*}
|
|
*/
|
|
replaceEscape(val) {
|
|
if (!val || val == '') {
|
|
return '';
|
|
}
|
|
return val.replace(/\(\*\)/g, "~%~").replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&').replace(/~%~/g, '(.*?)');
|
|
},
|
|
|
|
/**
|
|
* 获取语言
|
|
* @returns {string}
|
|
*/
|
|
getLanguage() {
|
|
if (typeof window.localStorage['__language:type__'] === "string") {
|
|
return window.localStorage['__language:type__'];
|
|
}
|
|
let lang = 'EN';
|
|
let navLang = ((window.navigator.language || navigator.userLanguage) + "").toUpperCase();
|
|
switch (navLang) {
|
|
case "EN":
|
|
case "KM":
|
|
case "TH":
|
|
case "KO":
|
|
case "JA":
|
|
lang = navLang
|
|
break;
|
|
case "ZH-CN":
|
|
case "ZH":
|
|
lang = 'CN'
|
|
break;
|
|
case "ZH-TW":
|
|
case "ZH-HK":
|
|
lang = 'TC'
|
|
break;
|
|
}
|
|
return window.localStorage['__language:type__'] = lang;
|
|
}
|
|
};
|
|
let languageInit = false;
|
|
let languageData = [];
|
|
let languageType = languageUtils.getLanguage();
|
|
let languageList = {
|
|
"EN": "English",
|
|
"KM": "ភាសាខ្មែរ",
|
|
"TH": "ภาษาไทย",
|
|
"KO": "한국어",
|
|
"JA": "日本語",
|
|
"CN": "简体中文",
|
|
"TC": "繁體中文",
|
|
};
|
|
let languageAsciis = {};
|
|
|
|
/**
|
|
* 添加语言数据
|
|
* @param data
|
|
*/
|
|
function addLanguage(data) {
|
|
if (!languageUtils.isArray(data)) {
|
|
return;
|
|
}
|
|
languageData.unshift(...data);
|
|
}
|
|
|
|
/**
|
|
* 设置语言
|
|
* @param language
|
|
*/
|
|
function setLanguage(language) {
|
|
if (language === undefined) {
|
|
return
|
|
}
|
|
$A.modalConfirm({
|
|
content: '切换语言需要刷新后生效,是否确定刷新?',
|
|
cancelText: '取消',
|
|
okText: '确定',
|
|
onOk: () => {
|
|
window.localStorage['__language:type__'] = language;
|
|
$A.reloadUrl()
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 获取当前语言
|
|
* @returns {string}
|
|
*/
|
|
function getLanguage() {
|
|
return languageType;
|
|
}
|
|
|
|
/**
|
|
* 转换语言
|
|
* @param text
|
|
* @returns {string|*}
|
|
*/
|
|
function switchLanguage(text) {
|
|
if (typeof arguments[1] !== "undefined") {
|
|
return switchLanguage(languageUtils.replaceArgumentsLanguage(text, arguments));
|
|
}
|
|
if (typeof text !== "string" || !text) {
|
|
return text;
|
|
}
|
|
//
|
|
if (languageInit === false) {
|
|
languageInit = true;
|
|
addLanguage(languageDefaultData);
|
|
addLanguage(window.languageData);
|
|
}
|
|
//
|
|
const ascii = languageUtils.convertAscii(text)
|
|
if (typeof languageAsciis[ascii] === "undefined") {
|
|
let tmpKey = null;
|
|
let tmpRege = null;
|
|
let tmpData = languageData.find((obj) => {
|
|
tmpKey = `${obj._ || obj.CN}`
|
|
if (tmpKey.indexOf("(*)") === -1) {
|
|
tmpRege = null;
|
|
return text == tmpKey
|
|
} else {
|
|
tmpRege = new RegExp("^" + languageUtils.replaceEscape(tmpKey) + "$", "g");
|
|
return !!text.match(tmpRege);
|
|
}
|
|
});
|
|
languageAsciis[ascii] = {rege: tmpRege, data: tmpData};
|
|
}
|
|
const {rege, data} = languageAsciis[ascii];
|
|
if (data) {
|
|
let value = data[languageType];
|
|
if (value) {
|
|
if (rege === null) {
|
|
return value
|
|
}
|
|
let index = 0;
|
|
value = value.replace(/\(\*\)/g, function () {
|
|
return "$" + (++index);
|
|
});
|
|
return text.replace(rege, value);
|
|
}
|
|
}
|
|
//
|
|
if (window.systemInfo.debug === "yes") {
|
|
setTimeout(_ => {
|
|
try {
|
|
let key = '__language:Undefined__';
|
|
let languageTmp = JSON.parse(window.localStorage[key] || '[]');
|
|
if (!languageUtils.isArray(languageTmp)) {
|
|
languageTmp = [];
|
|
}
|
|
let tmpRege = null;
|
|
let tmpData = languageTmp.find((val) => {
|
|
tmpRege = new RegExp("^" + val.replace(/\(\*\)/g, "(.*?)") + "$", "g");
|
|
return !!text.match(tmpRege);
|
|
});
|
|
if (!tmpData) {
|
|
languageTmp.push(text);
|
|
window.localStorage[key] = JSON.stringify(languageTmp);
|
|
}
|
|
} catch (e) { }
|
|
}, 10)
|
|
}
|
|
//
|
|
return text;
|
|
}
|
|
|
|
export { languageType, languageList, addLanguage, setLanguage, getLanguage, switchLanguage };
|