vue多语言中英文切换

第一步,下载包
(特别注意:vue-i18n版本需要控制在8)

npm install vue-i18n@8.0.0  --save
或者
yarn add vue-i18n@8.0.0  --save

第二步,需要单独一个多语言的实例化文件 src/lang/index.js

// 所有跟语言相关的代码
import Vue from 'vue'
// 引入i18n核心包
import VueI18n from 'vue-i18n'
import locale from 'element-ui/lib/locale'
import elementEN from 'element-ui/lib/locale/lang/en' // 引入饿了么的英文包
import elementZH from 'element-ui/lib/locale/lang/zh-CN' // 引入饿了么的中文包

// 引入自定义语言包
import selfEN from './en'
import selfZH from './zh'

// 插件注册
Vue.use(VueI18n)

// 导出实例

const i18n = new VueI18n({
  // zh -> 中文  en -> 因为
  // 指定当前的默认的语言环境
  locale: 'en',
  messages: {
    // 英文环境下的语言数据
    en: {
      ...elementEN,
      ...selfEN
    },
    // 中文环境下的语言数据
    zh: {
      ...elementZH,
      ...selfZH
    }
  }
})

// 配置elementUI 转化关系函数
locale.i18n((key, value) => i18n.t(key, value))

export default i18n

第三步,在main.js中挂载 i18n的插件

import i18n from '@/lang'
// 加入到根实例配置项中
new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})

新建中文文件,src/lang/zh.js

export default {
  navbar: {
    title: '好好学习', // 添加中文环境下title配置
    search: '站内搜索',
    logOut: '退出登录',
    dashboard: '首页',
    github: '项目地址',
    screenfull: '全屏',
    theme: '换肤',
    lang: '多语言',
    error: '错误日志'
  }
}

新建个对应的英文文件src/lang/en.js

export default {
  navbar: {
    title: 'good good study', // 添加英文环境下title配置
    search: 'search',
    logOut: 'Log Out',
    dashboard: 'Dashboard',
    github: 'Github',
    screenfull: 'screenfull',
    theme: 'theme',
    lang: 'i18n',
    error: 'error log'
  }
}

修改头部模板渲染

 <div class="app-breadcrumb">
      <!-- 好好学习 -->
      {{ $t('navbar.title') }}
    </div>

封装多语言组件
src/components/Lang/index.vue

<template>
  <el-dropdown style="margin-right:15px;" @command="handleCommand">
    <div>
      <!-- 切换语言图标 -->
      <svg-icon style="color:#fff;font-size:20px" icon-class="language" />
    </div>
    <el-dropdown-menu slot="dropdown">
      <el-dropdown-item command="zh">中文</el-dropdown-item>
      <el-dropdown-item command="en">en</el-dropdown-item>
    </el-dropdown-menu>
  </el-dropdown>
</template>

<script>
export default {
  methods: {
    handleCommand(type) {
      console.log(type) // zh / en
      // 点击的时候需要切换中英文的环境
      // 核心:修改 locale 配置
      this.$i18n.locale = type
    }
  }
}
</script>

src/components/index.js注册插件


import Lang from './Lang/index.vue'
export default {
  install(Vue) {
    Vue.component('Lang', Lang)
  }
}

引入 main.js

// 注册全局组件
import components from '@/components/index'
Vue.use(components)

在需要的组件中引入全局组件

<!-- 语言包 -->
<lang  />

总结
理解中英文切换原理
在这里插入图片描述
优化:发现使用的组件无法进行中英文的切换
两种解决方式
第一种,(推荐)
直接在组件上加上

:key="$i18n.locale"
  <!-- 放置日历组件 -->
          <!--
            bug:这个日历组件并不会随着我们点击修改语言环境让组件自动更新
            解决:当语言环境切换的时候 让该组件强行进行更新
                 1. watch + v-if
                 2. key
  -->
               <!-- 放置日历组件 -->
          <Calendar :key="$i18n.locale" />

第二种侦听事件

 watch: {
    '$i18n.locale': function() {
      this.locale = false
      setTimeout(() => {
        this.locale = true
      }, 0)
    }
  },
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值