vue 多语言 vue-i18n 按需加载,异步调用

摘要:
因为可以一直使用中文,所以不会使用英文数据,因此不需要加载。仅在请求时加载它1.创建i18n jsimportVuefrom'vu'importVueI18nfrom'vue-i18'importzhfrom'@/assets/language/zh'importaxiosfrom'axios'vue。使用exportconstu18n=新VueI18n;constloadedLanguages=['zh'];//当加载了完整的语言//en//jp//开关时,根据languagefunctionsetI18nLanguage{i18n.locale=lang;//设置i18n axios.defaults.headers.common['Accept language']=lang的默认语言;//设置ajax请求文档的语言。querySelector.setAttribute//设置html returnlang}exportfunctionloadLanguageAnc{if(i18n.language!=lang){/如果输入变量不等于i18插件的语言值,如果(!

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}`
      });
    }
  }
 

免责声明:文章转载自《vue 多语言 vue-i18n 按需加载,异步调用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xadmin安装2Nuxt.js使用详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue 日期转换

y: date.getFullYear(), 如果报错 time 要new Data(time) <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <!-...

完整UI组件库Kendo UI for Vue R3 2021

R3 2021版本是Kendo UI for Vue有史以来最重大的版本发布,这个版本非常庞大,其中有20个新的原生组件,或者说有34个新组件,包括各种图表和数据可视化。下来,跟我们一起了解一下这些功能吧! Kendo UI for Vue R3 2021最新版下载 支持Bootstrap 5 在 R3 2021 中,Kendo UI for Vue正式...

jekins接通gitee的webhook做自动部署 vue、react、java、springBoot

简介 其实点一下,也是浪费生命,不是吗? 推送代码到Gitee时,由配置的 WebHook 触发 Jenkins 任务构建。多好! jekins安装插件 搜索并安装这两个插件Gitee Plugin、Jersey 2 API 第二个插件本不是必要的,是因为我目前当前Gitee Plugin插件有一个Bug,因此安装的。 安装完成后,记得重启下jekins...

ant design vue 获取上传图片的像素

获取图片的像素大小,使用上传文件之前的钩子 beforeUpload,参数为上传的文件。 <a-upload name="file" list-type="picture-card" :show-upload-list="false" :multiple="false" :b...

vue项目部署到nginx服务

vue开发的项目,通过编译会得到 dist文件夹,如何发布到nginx服务器上? 配置nginx服务器 在nginx服务文件中,打开 conf文件夹 为了不改变nginx的默认配置(nginx.conf),复制一份,重名为 custom.conf 修改 custom.conf 文件中的 root 参数为 custom ...... server...

细说Vue作用域插槽,匹配应用场景。

最近在官方文档中看到,vue新增了一种插槽机制,叫做作用域插槽。要求的版本是2.1.0+。 首先来说一下:顾名思义,所谓作用域插槽,主要就在作用域,需要注意的是(以下几点看不懂不要紧,配合下面的例子,你会一看就懂): 1. 组件中的slot标签只能有有一个,而这一个slot用于替代组件调用时的多个标签。即一个slot代替一组范围的标签,即为作用域。 2....