vue + element-ui + vue-i18n 前端国际化

vue + element-ui 前端国际化

项目要求支持中英双语,所以就进行了一下前端的国际化,我这里是使用了vue-i18n,下面是我进行的步骤

  1. package.jsondependencies节点添加vue-i18n
"vue-i18n": "7.3.2",
  1. src目录下创建lang目录,存放国际化文件,分别创建index.js、en.js、zh.js三个文件
// index.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import Cookies from 'js-cookie' // 将语言类别存入cookie用
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui 国际化文件
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui 国际化文件
import enLocale from './en'
import zhLocale from './zh'

Vue.use(VueI18n)

const messages = {
  en: {
    ...enLocale,
    ...elementEnLocale
  },
  zh: {
    ...zhLocale,
    ...elementZhLocale
  }
}

const i18n = new VueI18n({
  // 设置语言 选项 en | zh
  locale: Cookies.get('language') || 'en',
  // 设置文本内容
  messages
})

export default i18n
// zh.js
export default {
  tabs: {
    title: '标题1 | 标题2 | 标题3',
    username: '账号',
    password: '密码'
  }
}
// en.js
export default {
  tabs: {
    title: 'title1 | title2 | title3',
    username: 'username',
    password: 'password'
  }
}
  1. src/main.js中增量添加i18n,注意增量添加,不要覆盖原有的
import i18n from './lang'

// use添加i18n
Vue.use(Element, {
  i18n: (key, value) => i18n.t(key, value)
})

new Vue({
  i18n,
})
  1. src/store/getters.js中添加language
language: state => state.app.language,
  1. src/store/modules/app.js中增量添加i18n
const state = {
  language: Cookies.get('language') || 'en'
}

const mutations = {
  SET_LANGUAGE: (state, language) => {
    state.language = language
    Cookies.set('language', language)
  }
}

const actions = {
  setLanguage({ commit }, language) {
    commit('SET_LANGUAGE', language)
  }
}
  1. 导航栏添加切换语言下拉列表
<template>
  <el-dropdown trigger="click" @command="handleSetLanguage">
    <div>
      {{ language==='zh' ? '中文' : 'English' }}
    </div>
    <el-dropdown-menu slot="dropdown">
      <el-dropdown-item :disabled="language==='zh'" command="zh">
        中文
      </el-dropdown-item>
      <el-dropdown-item :disabled="language==='en'" command="en">
        English
      </el-dropdown-item>
    </el-dropdown-menu>
  </el-dropdown>
</template>

<script>
export default {
  computed: {
    language() {
      return this.$store.getters.language
    }
  },
  methods: {
    handleSetLanguage(lang) {
      this.$i18n.locale = lang
      this.$store.dispatch('app/setLanguage', lang)
      this.$message({
        message: '设置语言成功',
        type: 'success'
      })
    }
  }
}
</script>
  1. 页面国际化
<template>
  <el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane :label="$tc('tabs.title', 0)" name="first">{{ $tc('tabs.title', 0) }}</el-tab-pane>
    <el-tab-pane :label="$tc('tabs.title', 1)" name="second">{{ $tc('tabs.title', 1) }}</el-tab-pane>
    <el-tab-pane :label="$tc('tabs.title', 2)" name="third">{{ $tc('tabs.title', 2) }}</el-tab-pane>
  </el-tabs>
</template>
<script>
  export default {
    data() {
      return {
        activeName: 'second'
      };
    },
    methods: {
      handleClick(tab, event) {
        console.log(tab, event);
      }
    }
  };
</script>
普通文本使用方式:{{ $t('tabs.ussername') }}
标签内使用方式::placeholder="$t('login.password')"
js内使用方式: this.$t('login.user.password.not.match')
多个值(这里可能有点问题,三个为0,1,2,两个为1,2,四个以上不是这么用的):$tc('tabs.title', 0)

相关连接

步骤参考:若依前端国际化流程
更多vue-i18n使用方式:vue-i18n官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值