国际化改造方案

  1. 国际化改造大致分两部分:
  2. 1antd UI组件国际化
  3. 2)业务文案的国际化需求

一、antd UI 组件国际化

文档参见【LocaleProvider 国际化

在项目App.vue页面增加国际化代码

  1. <template>
  2. <a-locale-provider :locale="zh_CN">
  3. <App />
  4. </a-locale-provider>
  5. </template>
  6. <script>
  7. import zh_CN from 'ant-design-vue/lib/locale-provider/zh_CN';
  8. import moment from 'moment';
  9. import 'moment/locale/zh-cn';
  10. moment.locale('zh-cn');
  11. export default {
  12. data() {
  13. return {
  14. zh_CN,
  15. }
  16. }
  17. }
  18. </script>

增加国际化设置功能切换locale国际化的类型值

二、业务文案的国际化需求

(1) 安装 vue-i18n:

  1. $ npm install vue-i18n

(2) 在 src/components/lang/ 中创建语言js,例如 en-US.js 和 zh-CN.js

在 en-US.js 和 zh-CN.js 中分别作了如下配置:

  1. // zh-CN.js
  2. export default {
  3. lang: '中文',
  4. }
  5. // en-US.js
  6. export default {
  7. lang: 'English',
  8. }

(3) 在main.js实例化组件

注意:Vue.use(VueI18n) 要放在实例化之前,不然会报错

  1. import VueI18n from 'vue-i18n'
  2. Vue.use(VueI18n)
  3. // 注册i18n实例并引入语言文件,文件格式等下解析
  4. const i18n = new VueI18n({
  5. locale: Vue.ls.get("language", "zh-CN")),
  6. messages: {
  7. 'zh-CN': require('@/components/lang/zh-CN.js'),
  8. 'en-US': require('@/components/lang/en-US.js')
  9. }
  10. })
  11. //将i18n注入到vue实例中
  12. new Vue({
  13. el: '#app',
  14. router,
  15. store,
  16. i18n,
  17. components: { App },
  18. template: '<App/>'
  19. })

在组件中这样使用

  1. <template>
  2. <div>
  3. {{ $t('lang') }}
  4. </div>
  5. </template>

如果想传参,例如zh-CN.js中这样配置:

  1. welcome: "你好,{name}"

页面组件中这样使用:

  1. <template>
  2. <div>
  3. {{ $tc('welcome', {'name':'jeecg' }) }}
  4. </div>
  5. </template>

页面输出 : 你好,jeecg

常用方法:

  1. $t(path, locale, option) // text 文本替换,locale可单独设置语言,option可传参数替换模板
  2. $tc(path, choice, locale, option) // text+choice 比$t多一个choice,可以选择模板内容(模板内容间用 | 分隔,如 香蕉|苹果|梨,最多只能使用三个选项,下标从0开始,当选项为2个时下标从1开始~~)
  3. $te(path) // text+exist 判断当前语言包中path是否存在
  4. $d(number|Date, path, locale) // date 时间格式化
  5. $n(number, path, locale) // number 数字格式化(货币等)
  6. // 更多细节参考官方文档:https://kazupon.github.io/vue-i18n/api/#vue-injected-methods

如果某些js中含有字符需要切换语言(包括rules),需要写在computed中。

  1. computed: {
  2. rules1 () {
  3. return {
  4. username: [
  5. {required: true, message: this.$t('username.required'), trigger: 'blur'}
  6. ]
  7. }
  8. }
  9. }

(3)国际化语言切换实现

  1. handleSetLanguage(lang) {
  2. this.$i18n.locale = lang; //改变当前语言
  3. Vue.ls.set("language", lang);//将lang 语言存在localStorage里,main里面就会根据属性值进行判断 locale: Vue.ls.get("language", "zh-CN")
  4. },