feat: instance i18n object
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
parent
4677fba701
commit
b04f4899ca
@ -3,49 +3,67 @@ import * as yaml from 'js-yaml'
|
|||||||
|
|
||||||
const File = Java.type("java.io.File");
|
const File = Java.type("java.io.File");
|
||||||
const separatorChar = File.separatorChar;
|
const separatorChar = File.separatorChar;
|
||||||
|
|
||||||
let langMap = {};
|
|
||||||
let fallbackMap = {};
|
|
||||||
|
|
||||||
type TranslateParam = { [key: string]: any }
|
type TranslateParam = { [key: string]: any }
|
||||||
|
|
||||||
function translate(name: string, param?: TranslateParam) {
|
|
||||||
let langText: string = langMap[name] || fallbackMap[name];
|
|
||||||
if (!langText) { return '[WARN] @ms/i18n miss lang translate: ' + name }
|
|
||||||
for (const key in param) {
|
|
||||||
langText = langText.replace("{" + key + "}", param[key])
|
|
||||||
}
|
|
||||||
return langText;
|
|
||||||
}
|
|
||||||
|
|
||||||
function initialize(lang: string = 'zh_cn', fallback: string = 'zh_cn') {
|
|
||||||
langMap = readYamlFile(root, lang) || readYamlFile(concat(__dirname, '..'), lang)
|
|
||||||
fallbackMap = readYamlFile(root, fallback) || readYamlFile(concat(__dirname, '..'), fallback)
|
|
||||||
console.i18n = function i18n(name: string, param?: TranslateParam) {
|
|
||||||
console.log(translate(name, param))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function readYamlFile(dir: string, name: string) {
|
|
||||||
let langFile = concat(dir, 'languages', name + '.yml');
|
|
||||||
return exists(langFile) && yaml.safeLoad(base.read(langFile))
|
|
||||||
}
|
|
||||||
|
|
||||||
function concat(...args: string[]) {
|
|
||||||
return args.join(separatorChar)
|
|
||||||
}
|
|
||||||
|
|
||||||
function exists(path: string) {
|
|
||||||
return new File(path).exists()
|
|
||||||
}
|
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface Console {
|
interface Console {
|
||||||
i18n(name: string, param?: TranslateParam);
|
i18n(name: string, param?: TranslateParam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TranslateContent = {
|
||||||
|
langMap: TranslateParam,
|
||||||
|
fallbackMap?: TranslateParam
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Translate {
|
||||||
|
private root = '';
|
||||||
|
private langMap = {};
|
||||||
|
private fallbackMap = {};
|
||||||
|
|
||||||
|
constructor(root: string | TranslateContent) {
|
||||||
|
if (typeof root == 'string') {
|
||||||
|
this.root = root;
|
||||||
|
} else {
|
||||||
|
this.langMap = root.langMap;
|
||||||
|
this.fallbackMap = root.fallbackMap || {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
translate(name: string, param?: TranslateParam) {
|
||||||
|
let langText: string = this.langMap[name] || this.fallbackMap[name];
|
||||||
|
if (!langText) { return '[WARN] @ms/i18n miss lang translate: ' + name }
|
||||||
|
for (const key in param) {
|
||||||
|
langText = langText.replace("{" + key + "}", param[key])
|
||||||
|
}
|
||||||
|
return langText;
|
||||||
|
}
|
||||||
|
|
||||||
|
initialize(lang: string = 'zh_cn', fallback: string = 'zh_cn') {
|
||||||
|
this.langMap = this.readYamlFile(this.root, lang) || this.readYamlFile(this.concat(__dirname, '..'), lang)
|
||||||
|
this.fallbackMap = this.readYamlFile(this.root, fallback) || this.readYamlFile(this.concat(__dirname, '..'), fallback)
|
||||||
|
console.i18n = (name: string, param?: TranslateParam) => {
|
||||||
|
console.log(this.translate(name, param))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
readYamlFile(dir: string, name: string) {
|
||||||
|
let langFile = this.concat(dir, 'languages', name + '.yml');
|
||||||
|
return this.exists(langFile) && yaml.safeLoad(base.read(langFile))
|
||||||
|
}
|
||||||
|
|
||||||
|
concat(...args: string[]) {
|
||||||
|
return args.join(separatorChar)
|
||||||
|
}
|
||||||
|
|
||||||
|
exists(path: string) {
|
||||||
|
return new File(path).exists()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let systemTranslate = new Translate(root)
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
initialize,
|
initialize: systemTranslate.initialize.bind(systemTranslate),
|
||||||
translate
|
translate: systemTranslate.translate.bind(systemTranslate)
|
||||||
};
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user