79 lines
1.8 KiB
TypeScript
79 lines
1.8 KiB
TypeScript
import source from "./../../src/lang/source.json";
|
|
import enUS from "./../../src/lang/en-US.json";
|
|
import zhCN from "./../../src/lang/zh-CN.json";
|
|
import {isDev} from "../lib/env";
|
|
import lang from "../mapi/lang/main";
|
|
import {ConfigMain} from "../mapi/config/main";
|
|
|
|
export const defaultLocale = "zh-CN";
|
|
|
|
let locale = defaultLocale;
|
|
|
|
export const langMessageList = [
|
|
{
|
|
name: "en-US",
|
|
label: "English",
|
|
messages: enUS,
|
|
},
|
|
{
|
|
name: "zh-CN",
|
|
label: "简体中文",
|
|
messages: zhCN,
|
|
},
|
|
];
|
|
|
|
const buildMessages = (): any => {
|
|
let messages = {};
|
|
for (let m of langMessageList) {
|
|
let msgList = {};
|
|
for (let k in source) {
|
|
const v = source[k];
|
|
if (m.messages[v]) {
|
|
msgList[k] = m.messages[v];
|
|
}
|
|
}
|
|
messages[m.name] = msgList;
|
|
}
|
|
return messages;
|
|
};
|
|
|
|
let messages = buildMessages();
|
|
|
|
export const t = (text: string, param: object | null = null) => {
|
|
if (isDev) {
|
|
lang.writeSourceKeyUse(text).then();
|
|
}
|
|
if (messages[locale]) {
|
|
if (messages[locale][text]) {
|
|
if (param) {
|
|
return messages[locale][text].replace(/\{(\w+)\}/g, function (match, key) {
|
|
return key in param ? param[key] : match;
|
|
});
|
|
}
|
|
return messages[locale][text];
|
|
}
|
|
}
|
|
if (isDev) {
|
|
lang.writeSourceKey(text).then();
|
|
}
|
|
if (param) {
|
|
return text.replace(/\{(\w+)\}/g, function (match, key) {
|
|
return key in param ? param[key] : match;
|
|
});
|
|
}
|
|
return text;
|
|
};
|
|
|
|
const readyAsync = async () => {
|
|
locale = await ConfigMain.get("lang", defaultLocale);
|
|
};
|
|
|
|
const getLocale = () => {
|
|
return locale;
|
|
};
|
|
|
|
export const ConfigLang = {
|
|
readyAsync,
|
|
getLocale,
|
|
};
|