方案一:前端静态资源
Vue2使用方法
1.下载依赖包
npm install vue-i18n --save
2.在项目中src目录下新建文件夹i18n,在其下新建文件夹langs,其中存放各类语言js文件,如en.js、zh_CN.js
内部文件结构为:
/**zh.js文件**/ module.exports = { menu : { home:"首页" }, content:{ main:"这里是内容" } } /**en.js文件**/ module.exports = { menu : { home:"home" }, content:{ main:"this is content" } }
src/i18n/i18n.js
import Vue from 'vue'; import VueI18n from 'vue-i18n'; import zh_CN from './langs/zh_CN/zh_CN'; import en_US from './langs/en/en_US'; import enLocale from 'element-ui/lib/locale/lang/en'; import zhLocale from 'element-ui/lib/locale/lang/zh-CN'; Vue.use(VueI18n); const messages = { en_US: { ...en_US, ...enLocale, }, zh_CN: { ...zh_CN, ...zhLocale, }, }; const i18n = new VueI18n({ locale: localStorage.lang || 'zh_CN', messages, }); export default i18n;
3.main.js中配置
import i18n from './i18n/i18n'; //i18n国际化 Vue.use(Element, { i18n: (key, value) => i18n.t(key, value), //i18n国际化 }); window.vm = new Vue({ el: '#app', i18n, //i18n国际化 router, store, render: (h) => h(App), });
4.页面使用
//页面内 {{$t('system.cancel'}} window.vm.$i18n.t('system.cancel') //js this.$t('system.cancel')
5.注意点:
国际化文案内匹配自定义内容
this.$t('validate.range_length', ['5', '20']) //请输入长度为{0}到{1}之间的字符 将0-1改为5-20
6.加入设置使VSCode代码编辑器中实时显示中文:
在项目根目录的.vscode文件夹中setting.json中添加
{ "i18n-ally.localesPaths": ["src/i18n/langs"], "i18n-ally.enabledParsers": ["json", "js"], //这个最好加上,如果是其他格式,如ts,不加上就无效了 "i18n-ally.keystyle": "nested", // 翻译路径格式, "i18n-ally.sourceLanguage": "en", // 翻译源语言 "i18n-ally.displayLanguage": "zh_CN" //显示语言, 这里也可以设置显示英文为en, // "i18n-ally.extract.keygenStrategy": "random", // 翻译字段命名采用随机字符 枚举['slug','random','empty'] // "i18n-ally.extract.keygenStyle": "camelCase", // 翻译字段命名样式采用驼峰 }
7.国际化文案中间某些字段自动匹配
'cancelTips': '确认取消订单"{orderID}"?',
Vue中:
this.$t('order.cancelTips', { orderID: row.id })
Vue3使用方法
1.src/i18n/i18n.js
import {createI18n} from 'vue-i18n'; import zh_CN from './langs/zh_CN/zh_CN'; import en_US from './langs/en/en_US'; // import enLocale from 'element-ui/lib/locale/lang/en'; // import zhLocale from 'element-ui/lib/locale/lang/zh-CN'; const messages = { en_US: { ...en_US, // ...enLocale, }, zh_CN: { ...zh_CN, // ...zhLocale, }, }; const i18n = createI18n({ locale: localStorage.lang || 'zh_CN', messages, silentTranslationWarn: true, // 去除国际化警告 }); export default i18n;
2.main.js
import i18n from './i18n/i18n.js' app.use(i18n)
方案二:后端接口取值
从接口取到数据后,前端使用VueX以及sessionStorage存储国际化字段,并在各页面分别调用。
流程图如下:
1.在App.vue或登录页中,将接口成功取到的json数据存储到VueX中
let i18nCache = window.sessionStorage.getItem('i18n'); // 缓存里是否有i18n数据 if (i18nCache == undefined) { //携带语言参数this.lang zh_CN、en_US getWebI18n(this.lang).then((response) => { if (response.code === 200) { // 是否成功接收到数据 if (response.data !== null) { if (this.lang === 'zh_CN') { window.sessionStorage.setItem( 'i18n', JSON.stringify(response.data.zh_CN) ); } else if (this.lang === 'en_US') { window.sessionStorage.setItem( 'i18n', JSON.stringify(response.data.en_US) ); } this.$store.dispatch( 'tagsView/updatei18n', JSON.parse(i18nCache) ); } history.go(0); } }); } else { // 缓存有数据,放到VueX里 this.$store.dispatch('tagsView/updatei18n', JSON.parse(i18nCache)); }
2.VueX中
const state = { i18n: {}, }; const mutations = { UPDATE_i18n: (state, view) => { console.log(state, view, 'vuex'); state.i18n = view; }, }; const actions = { updatei18n({ commit }, view) { commit('UPDATE_i18n', view); }, }; export default { namespaced: true, state, mutations, actions, };
3.页面中使用
{ i18n.export }}* --> *{{ $store.state.i18n.export}}*
4.或通过直接修改zh_CN.js文件来全局最小修改取值
let data = window.sessionStorage.getItem('i18n') let zh_CN if (data === null) { zh_CN = { login: { 'title': '登录', 'slider': '请按住滑块,拖动到最右边', }} } else { zh_CN = JSON.parse(data) } export default zh_CN
常用使用方式
1.动态匹配
5秒后刷新...
其中数字为动态变化的5.4.3.2.1
//倒计时5秒刷新页面 let timer = setInterval(() => { this.sec--; if (this.sec === 0) { clearInterval(timer); this.logOutRemove(); } else { this.msg = this.$t('common.refresh', [this.sec]); } }, 1000); data() { return { msg: '', sec: 6, }; },
还没有评论,来说两句吧...