|
import { createI18n} from 'vue-i18n'
|
import zh from "./zh"
|
import py from "./py"
|
import en from "./en"
|
import { useLocale } from 'element-plus';
|
import enLocale from 'element-plus/es/locale/lang/en';
|
import zhLocale from 'element-plus/es/locale/lang/zh-cn';
|
|
let messages = {
|
zh: {...zh, ...zhLocale},
|
py:py,
|
en: {...en, ...enLocale}
|
}
|
|
const i18n = createI18n({
|
locale: localStorage.getItem('lang') || 'zh', // 设置当前语言类型
|
legacy: false, // 如果要支持compositionAPI,此项必须设置为false;
|
globalInjection: true, // 全局注册$t方法
|
messages
|
})
|
|
const syncElementLocale = () => {
|
// 在方法内调用 useLocale(确保在 Vue 上下文内)
|
const { locale } = useLocale();
|
const currentLang = i18n.global.locale.value;
|
// 根据当前语言切换 Element 组件的语言包
|
if (currentLang === 'zh') {
|
locale.value = { ...zhLocale }; // 中文内置文本
|
} else {
|
locale.value = { ...enLocale }; // 英文内置文本
|
}
|
|
// 额外触发一次 i18n 刷新(解决缓存问题)
|
i18n.global.locale.value = currentLang;
|
};
|
|
// 初始化同步
|
syncElementLocale();
|
|
// 语言切换方法
|
export const switchLang = (lang) => {
|
localStorage.setItem('lang', lang);
|
i18n.global.locale.value = lang;
|
syncElementLocale(); // 切换后同步
|
};
|
export { syncElementLocale };
|
export default i18n
|