zoukankan      html  css  js  c++  java
  • i18n在vue项目中使用

    i18n:i18n是 Internationalization 这个英文的简写,即国际化的意思,vue-i18n是一款针对于vue开发的国际化插件,让项目支持多语言切换,以适应不同地区用户的需求。

    安装vue-i18n:

    npm install vue-i18n --save

    main.js中全局引入i18n

    import VueI18n from "vue-i18n";

    注册:

    Vue.use(VueI18n);

     实例化i18n并引入语言文件:

    const i18n = new VueI18n({
      locale: "en",//语言标识
      messages: {//配置多语言 根据自己的项目需求  这里配置了中文和英文
        'zh': require('@/lang/zh.js'),//中文
        'en': require('@/lang/en.js'),//英文
      },
      fallbackLocale: "zh",//没有英文的时候默认 中文语言
      silentTranslationWarn: true,//报错时加上这个参数可以取消警告
      //this.$i18n.locale // 通过切换locale的值来实现语言切换
    });

    在vue实例中注册:

    let VM = new Vue({
      router,
      store,
      i18n,
      render: h => h(App)
    }).$mount("#app");

    src/lang/zh.js:

    module.exports = {
        name:"小明",
        m:{
            a:"哈哈哈",
            b:"嗯嗯呢"
        }
    }

    src/lang/en.js:

    module.exports = {
        name:"xiaoming",
        m:{
            a:"hahaha"
        }
    }

    页面中使用:

            <h1>{{$t('name')}}</h1>
            <h1>{{$t('m.a')}}</h1>
            <h1>{{$t('m.b')}}</h1>
            <button @click="toggleLang">语言切换</button>

    动态切换多语言:

            toggleLang(){
                if(this.$i18n.locale == 'en'){
                    this.$i18n.locale = 'zh'
                }else{
                    this.$i18n.locale = 'en'
                }
            }

     如何根据浏览器语言 动态加载 成对应的多语言?

    import VueI18n from "vue-i18n";
    Vue.use(VueI18n);
    const i18n = new VueI18n({
      locale: "en",//语言标识
      messages: {},//
      fallbackLocale: "zh",//没有英文的时候默认 中文语言
      silentTranslationWarn: true,//报错时加上这个参数可以取消警告
      //this.$i18n.locale // 通过切换locale的值来实现语言切换
    });
    let navigatorLanguage = (navigator.language || navigator.browserLanguage).toLowerCase(); //常规浏览器语言和IE浏览器
    navigatorLanguage = navigatorLanguage.substr(0, 2); //截取lang前2位字符
    function loadI18nMessages(lang) {
      return import(`@/lang/${lang}`).then(msg => {
        i18n.setLocaleMessage(lang, msg.default);
        i18n.locale = lang;
        return Promise.resolve();
      });
    }
    loadI18nMessages(navigatorLanguage);
    
    
    Vue.config.productionTip = false;
    
    let VM = new Vue({
      router,
      store,
      i18n,
      render: h => h(App)
    }).$mount("#app");
    
    export default VM;

    由于现在变成了import引入语言包的形式,所以每个语言包的导出方式也应该变成es6的导出形式

    从原来的module.exports = {}   变成  export default {}

    比如src/lang/zh.js

    export default  {
        name:"小明",
        m:{
            a:"哈哈哈",
            b:"嗯嗯呢"
        }
    }

    根据浏览器语言动态加载语言包  可以避免加载所有的语言包,因为只加载了一种语言包,所以就不能手动切换到其它语言了

  • 相关阅读:
    去掉影响美观的横滚动条
    Visio绘制事件分解图
    Visio绘制系统图
    asp.net与js中字符串的HTML编码与解码
    《ERP从内部集成起步》读书笔记——第一章 Garthner公司是如何提出ERP的 1.1尊重历史
    Asp.net页面传参数给Silverlight
    Gridview中格式化数据的方法
    让silverlight不在最顶层,可以在悬浮层之下
    DateTime类型中 DayOfWeek时的英文如何转换成中文(转)
    Asp.net页面中通过Js控制Silverlight显示值
  • 原文地址:https://www.cnblogs.com/fqh123/p/13419973.html
Copyright © 2011-2022 走看看