import { createI18n } from 'vue-i18n';
import pinia from '/@/stores/index';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
// 定义è¯è¨€å›½é™…化内容
/**
* 说明:
* 须在 pages 下新建文件夹(建议 `è¦å›½é™…化界é¢ç›®å½•` 与 `i18n 目录` 相åŒï¼Œæ–¹ä¾¿æŸ¥æ‰¾ï¼‰ï¼Œ
* 注æ„å›½é™…åŒ–å®šä¹‰çš„å—æ®µï¼Œä¸è¦ä¸ŽåŽŸæœ‰çš„å®šä¹‰å—æ®µç›¸åŒã€‚
* 1ã€/src/i18n/lang 下的 ts 为框架的国际化内容
* 2ã€/src/i18n/pages 下的 ts 为å„界é¢çš„国际化内容
*/
// element plus 自带国际化
import enLocale from 'element-plus/lib/locale/lang/en';
import zhcnLocale from 'element-plus/lib/locale/lang/zh-cn';
import zhtwLocale from 'element-plus/lib/locale/lang/zh-tw';
// 定义å˜é‡å†…容
const messages = {};
const element = { en: enLocale, 'zh-cn': zhcnLocale, 'zh-tw': zhtwLocale };
const itemize = { en: [], 'zh-cn': [], 'zh-tw': [] };
const modules: Record<string, any> = import.meta.glob('./**/*.ts', { eager: true });
// 对自动引入的 modules 进行分类 enã€zh-cnã€zh-tw
// https://vitejs.cn/vite3-cn/guide/features.html#glob-import
for (const path in modules) {
const key = path.match(/(\S+)\/(\S+).ts/);
if (itemize[key![2]]) itemize[key![2]].push(modules[path].default);
else itemize[key![2]] = modules[path];
}
// åˆå¹¶æ•°ç»„å¯¹è±¡ï¼ˆéžæ ‡å‡†æ•°ç»„对象,数组ä¸å¯¹è±¡çš„æ¯é¡¹ keyã€value 都ä¸åŒï¼‰
function mergeArrObj<T>(list: T, key: string) {
let obj = {};
list[key].forEach((i: EmptyObjectType) => {
obj = Object.assign({}, obj, i);
});
return obj;
}
// å¤„ç†æœ€ç»ˆæ ¼å¼
for (const key in itemize) {
messages[key] = {
name: key,
el: element[key].el,
message: mergeArrObj(itemize, key),
};
}
// è¯»å– pinia 默认è¯è¨€
const stores = useThemeConfig(pinia);
const { themeConfig } = storeToRefs(stores);
// 导出è¯è¨€å›½é™…化
// https://vue-i18n.intlify.dev/guide/essentials/fallback.html#explicit-fallback-with-one-locale
export const i18n = createI18n({
legacy: false,
silentTranslationWarn: true,
missingWarn: false,
silentFallbackWarn: true,
fallbackWarn: false,
locale: themeConfig.value.globalI18n,
fallbackLocale: zhcnLocale.name,
messages,
});
|