美文网首页
Vue I18n实际应用

Vue I18n实际应用

作者: W北落师门W | 来源:发表于2018-10-01 08:59 被阅读0次

    最近在实际项目中使用过vue i18n插件实现国际化功能,但是发现网上对于异步加载实现国际化功能的案例不多,总结一下vue i18n使用的方法。

    本地实现国际化

    这种方式是element-ui官方推荐的使用方式,通过加载项目内部的静态国际化js文件来实现页面的国际化功能,具体代码为:

    import Vue from 'vue'
    import Element from 'element-ui'
    import VueI18n from 'vue-i18n'
    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: {
        message: 'hello',
        ...enLocale // 或者用 Object.assign({ message: 'hello' }, enLocale)
      },
      zh: {
        message: '你好',
        ...zhLocale // 或者用 Object.assign({ message: '你好' }, zhLocale)
      }
    }
    // Create VueI18n instance with options
    const i18n = new VueI18n({
      locale: 'en', // set locale
      messages, // set locale messages
    })
    
    Vue.use(Element, {
      i18n: (key, value) => i18n.t(key, value)
    })
    
    new Vue({ i18n }).$mount('#app')
    

    但是这种方式有一种缺陷,就是无法动态加载国际化文件,无法实现后台维护;

    ajax请求国际化数据

    这种方式可以动态维护国际化内容,通过ajax请求国际化数据,替换vue i18n国际化内容

    /**
     *  实例数据
     *  {
     *      "data": {
     *          "zh": {
     *              "i18n": {
     *                  index: '首页'
     *              }
     *          },
     *          "en": {
     *              "i18n": {
     *                  index: 'index'
     *              }
     *          }
     *      }
     *  }
     **/
    i18nGet(`${i18nUrl}`).then(re => {
        let data = re.data.i18n;
        for(let key in data) {
            this.$i18n.mergeLocaleMessage(key, data[key]);
        }
        // 后面可以随时通过下面的命令设置国际化内容
        this.$i18n.locale = 'zh';
    })
    

    上面的方法是统一获取数据配置到国际化中,以后随时设置,也可以在需要的时候再动态加载i18n文件设置。

    以上是vue i18n的两种使用方法。
    vue-i18n官方文档

    相关文章

      网友评论

          本文标题:Vue I18n实际应用

          本文链接:https://www.haomeiwen.com/subject/upagoftx.html