vue 多语言 vue-i18n 按需加载,异步调用
http://kazupon.github.io/vue-i18n/zh/guide/lazy-loading.html
一次加载所有翻译文件是过度和不必要的。
因为可能一直用中文,那么就不会用到英文的数据,就没必要去加载。只在请求的时候去加载它
1.新建i18n.js
import Vue from 'vue' import VueI18n from 'vue-i18n' import zh from '@/assets/language/zh' import axios from 'axios' Vue.use(VueI18n); export const i18n = new VueI18n({ locale: 'zh', // messages messages: { zh:zh.zh } }); const loadedLanguages = ['zh']; //当前已经加载完全的语言 //en //jp //切换的时候,根据语言加载各个国家的语言 function setI18nLanguage(lang){ i18n.locale = lang; //设置i18n的默认语言 axios.defaults.headers.common['Accept-Language'] = lang; //设置ajax请求的语言 document.querySelector('html').setAttribute('lang', lang) //设置html的语言 return lang } export function loadLanguageAsync (lang) { if (i18n.locale !== lang) { //如果传入的变量 不等于 i18插件的语言值 (切换过一次,再切换第二次就不会再去加载一遍了) if(!loadedLanguages.includes(lang)){ //如果加载的这个语言不包含在默认加载的语言里面 //就去异步加载它 return import(`@/assets/language/${lang}`).then(msgs => { //去引入这个值 i18n.setLocaleMessage(lang, msgs.default[lang]); //设置i18n的语言message切换成这个 loadedLanguages.push(lang); //本地已经加载的语言 加入 loadedLanguages return setI18nLanguage(lang); //返回并且设置 }); } //如果传入的语言变量值等于现在i18n控件的默认语言值 //不等于也会去设置 return Promise.resolve(setI18nLanguage(lang)); //处理一些默认信息 } return Promise.resolve(lang); } export default i18n;
2.zh.js. en.js写对应英文的
module.exports = { zh: { message: { title: '运动品牌', }, placeholder: { enter: 'aaaa' }, brands: { .....自己写 } } }
3.main.js 引入
import i18n from 'i18m.js' Vue.use(VueI18n); new Vue({ i18n });
router.beforeEach((to, from, next) => { const lang = to.query.lang||'zh'; loadLanguageAsync(lang).then(() => {next()}) });
拦截to的参数,不能写from
4.多选下拉框
<select v-model="lang"> <option v-for="(lang, i) in langs" :key="`Lang${i}`" :value="lang">{{ lang }}</option> </select>
data(){ return { langs: [ 'zh','en' ], lang: 'en' } }, created(){ const self = this; this.$nextTick(()=>{ setTimeout(function(){ self.lang = self.$route.query.lang; },100); }); }, watch:{ lang(value){ this.$router.push({ path: `/?lang=${value}` }); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)