最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 从零开始,用elementui躺坑vue - 国际化I18n

    正文概述 掘金(高志小鹏鹏)   2021-01-28   551

    i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称。通过vue-i18n来实现此功能。对于国内的绝大多数开发人员而言,是用不到此功能的,可以直接进行掠过。

    原理

    前端国际化,简单的说:就是语言的不同切换。

    实现原理非常就是简单:

    1. 配置语言包json文件
    2. 在语言包json文件中,声明相同的key值,则value值是显示的语言文本
    3. 切换语言文件

    配置国际化

    1. 安装i18n插件, 安装vuex插件(管理language变量)
    1. 创建src/lang文件夹,用于构建不同语言的json文件

    如: zh.js, en.js, be.js, fr.js...

    目录结构如下:

    从零开始,用elementui躺坑vue - 国际化I18n

    1. 新增src/lang/index.js文件,用于选择语言文件,核心代码如下
    import Vue from 'vue'
    import VueI18n from 'vue-i18n'
    import Cookies from 'js-cookie'
    import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang
    import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN' // element-ui lang
    import enLocale from './en'
    import zhLocale from './zh'
    import Config from '@/settings.js'
    
    Vue.use(VueI18n)
    
    const messages = {
      en: {
        ...enLocale,
        ...elementEnLocale
      },
      zh: {
        ...zhLocale,
        ...elementZhLocale
      }
    }
    export function getLanguage () {
      // Read the language of the last page closed
      const chooseLanguage = Cookies.get('language')
      if (chooseLanguage) return chooseLanguage
    
      // if has not choose language
      const language = (
        navigator.language || navigator.browserLanguage
      ).toLowerCase()
      const locales = Object.keys(messages)
      for (const locale of locales) {
        if (language.indexOf(locale) > -1) {
          return locale
        }
      }
      return Config.language
    }
    const i18n = new VueI18n({
      // set locale
      // options: en | zh
      locale: getLanguage(),
      // set locale messages
      messages
    })
    
    export default i18n
    
    1. 引入国际化

    在main.js文件中添加代码如下

    import i18n from './lang'
    
    1. 使用插件
    // main.js中通过全局方法 Vue.use() 使用插件,它需要在你调用 new Vue() 启动应用之前完成:
    // 调用的是i18n install
    Vue.use(i18n)
    
    1. vue实例
    new Vue({
      ....
      i18n  
    })
    
    1. 将language变量保存在store中

    新增store/index.js文件,配置vuex。该文件直接复制即可

    目录结构如下:

    从零开始,用elementui躺坑vue - 国际化I18n

    1. 新增store/getters.js文件,存储store的计算属性。
    const getters = {
      language: state => state.app.language
    }
    
    1. 新增store/modules/app.js文件,用于获取和设置vuex中language变量。详情请看vuex官方文档
    const getters = {
      language: state => state.app.language
    }
    
    1. vuex - mutation

    更改Vuex中的store状态的唯一方法是提交mutation

      SET_LANGUAGE: (state, language) => {
        state.language = language
        Cookies.set('language', language)
      }
    }
    
    1. vuex - action

    用于提交mutation,触发language变量

    const actions = {
      setLanguage ({ commit }, language) {
        commit('SET_LANGUAGE', language)
      }
    }
    
    1. 修订src/lang/index.js文件,优先选择cookie中的json文件
    export function getLanguage () {
      const chooseLanguage = Cookies.get('language')
      if (chooseLanguage) return chooseLanguage
      ...
    }
    

    至此,国际化配置完成。效果展示如下: 从零开始,用elementui躺坑vue - 国际化I18n

    书写规范

    1. html
    <h3 class="title">
      {{ $t('title') }}
    </h3>
    
    <el-input
      :placeholder="$t('login.userNamePlaceholder')"
    />
    
    1. js
    this.$message({
      message: this.$t('login.userNameEmpty'),
      type: 'warning'
    })
    

    参考资料

    1. vuex官方文档
    2. js-cookie简书
    3. vue-element-admin文档教程

    下载网 » 从零开始,用elementui躺坑vue - 国际化I18n

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元