48 lines
1.5 KiB
JavaScript
Executable File
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
|