feat(All):Initial

This commit is contained in:
2025-10-04 23:36:07 +08:00
commit 2b4e5d2668
1321 changed files with 415958 additions and 0 deletions
+117
View File
@@ -0,0 +1,117 @@
import type { App } from 'vue';
import { computed,ComputedRef } from 'vue';
import { createI18n } from 'vue-i18n';
import {useGlobalConfigStoreWithOut} from "@/store/modules/globalConfig";
const globalConfigStore = useGlobalConfigStoreWithOut();
//引入同级目录下所有语言文件
const modules = (import.meta as any).glob('./*.ts', {eager: true});
type Message = {
[s: string]: {} | undefined
}
type ReturnMessage = {
'zh-CN': {},
'en-US': {},
[s: string]: {}
}
const getLangAll = (): ReturnMessage => {
let message: Message = {};
getLangFiles(modules, message);
return message as ReturnMessage;
}
type LangFilesList = {
[s: string]: { default: { [s: string]: string } }
}
/**
* 获取所有语言文件
* @param {Object} langFilesList
* @param {Object} msg
*/
const getLangFiles = (langFilesList: LangFilesList, msg: Message) => {
for (let path in langFilesList) {
if (langFilesList[path].default) {
//判断中英文混合文件是否存在
if (/zh-CN-en-US/.test(path)) {
type LocaleObj = {
[s: string]: any
}
let localeObj: LocaleObj = {
'zh-CN': langFilesList[path].default,
'en-US': {}
}
let enUSLangList = JSON.parse(JSON.stringify(langFilesList[path].default));
recursionSetLeaf(enUSLangList);
localeObj['en-US'] = enUSLangList;
// 合并
for (let i in localeObj) {
msg[i] = msg[i] ? {
...msg[i],
...localeObj[i]
} : localeObj[i];
}
} else {
//获取文件名
const fileName = path.substr(path.lastIndexOf('/') + 1, 5);
msg[fileName] = msg[fileName] ? {
...langFilesList[fileName],
...langFilesList[path].default
} : langFilesList[path].default;
}
}
}
}
type LangObj = {
[propName:string]:any
}
/**
* 递归设置叶子节点的值为键名,即英文
* @param {LangObj} obj
*
*/
const recursionSetLeaf = (obj:LangObj) =>{
for (let i in obj) {
if(typeof obj[i] === 'string'){
obj[i] = i;
}else{
recursionSetLeaf(obj[i]);
}
}
}
//注册i8n实例并引入语言文件
const i18n = createI18n({
legacy: false,
locale: globalConfigStore.locale,
messages: getLangAll(),
sync: true
})
//ts/js文件中使用
window.$t = i18n.global.t;
window.$cpt = (key: string):ComputedRef<string> => computed(() => i18n.global.t(key));
export function setupI18n(app: App) {
app.use(i18n);
}
export function t(key: string):string {
return i18n.global.t(key);
}
export function cpt(key: string): ComputedRef<string> {
return computed(() => i18n.global.t(key));
}
export function setLocale(locale: IConfig.Locale) {
i18n.global.locale.value = locale;
globalConfigStore.setLocale(locale);
}
File diff suppressed because it is too large Load Diff