emis-frontend/src/i18n/index.js
2024-04-22 13:33:25 +08:00

48 lines
1.5 KiB
JavaScript
Executable File

import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
import ElementLocale from 'element-ui/lib/locale'
import { getI18nMessages } from "@/api/common"
// 引入各个语言配置文件
import zh from './config/zh-CN'
import en from './config/en'
// 创建vue-i18n实例i18n
const i18n = new VueI18n({
// 设置默认语言
locale: localStorage.getItem('locale') || 'zh-CN', // 设置默认语言
fallbackLocale: 'zh-CN', // 默认语言环境。如果locale中无匹配项则采用该项值
messages: {
zh,
en,
},
silentTranslationWarn: true,
})
async function loadMessagesFromServer(){
// 加载远程i8n数据
let language = i18n.locale;
// 从缓存中读取扩展翻译数据
let extTransDataStr = localStorage.getItem("transLang_"+language);
if(extTransDataStr==null || extTransDataStr == undefined){
const res = await getI18nMessages(language);
if(res.code == 200){
localStorage.setItem("transLang_"+language, JSON.stringify(res.data));
let oMessages=i18n.getLocaleMessage(language);
const newMessages = Object.assign(oMessages, res.data)
i18n.setLocaleMessage(language, newMessages)
}
}else{
let extTransData = JSON.parse(extTransDataStr);
let oMessages=i18n.getLocaleMessage(language);
const newMessages = Object.assign(oMessages, extTransData)
i18n.setLocaleMessage(language, newMessages)
}
}
loadMessagesFromServer()
ElementLocale.i18n((key, value) => i18n.t(key, value))
// 暴露i18n
export default i18n