vue通过i18n 实现国际化

装包

npm i vue-i18n

在main.js引入

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import i18n from './lang/index'

Vue.config.productionTip = false

Vue.use(ElementUI);
new Vue({
  router,
  i18n,
  render: h => h(App)
}).$mount('#app')

在src目录下创建language文件夹

并建立english.js,index.js,chinese.js文件,并分别写入

export default {
  title: 'Blockchain visual display',
  loginTitle: 'User login',
  account: 'Account',
  password: 'Password',
  one: {
    two: 'two class'
  }
}
import Vue from 'vue' // 引入vue
import VueI18n from 'vue-i18n' // 引入i18n模块
import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui英文包
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN' // element-ui中文包
import locale from 'element-ui/lib/locale' // 引入element-ui语言包模块
import enLocale from './en' // 本地英文包
import zhLocale from './zh' // 本地中文包

Vue.use(VueI18n) // vue使用i18n模块
// 引入本地
const messages = {
  en: {
    ...enLocale, // es6的拓展运算符,相当于解析出每个对象
    ...elementEnLocale
  },
  zh: {
    ...zhLocale,
    ...elementZhLocale
  }
}
// 创建国际化实例
const i18n = new VueI18n({
  locale: window.localStorage.getItem('language') || 'en', // set locale,默认使用英文
  messages // set locale messages
})
locale.i18n((key, value) => i18n.t(key, value))

export default i18n
export default {
  title: '区块链可视化展示',
  loginTitle: '用户登录',
  account: '账号',
  password: '密码',
  one: {
    two: '二级'
  }
}

最后在app.vue操作,实现国际化

<template>
  <div>
<el-dropdown class="languageSetting" trigger="click" @command="handleSetLanguage">
  <span class="international-icon">
    {{ language }}<i class="el-icon-caret-bottom" />
  </span>
  <el-dropdown-menu slot="dropdown">
    <el-dropdown-item command="zh" :disabled="language === '中文'">中文</el-dropdown-item>
    <el-dropdown-item command="en" :disabled="language === 'English'">English</el-dropdown-item>
  </el-dropdown-menu>
</el-dropdown>

<el-button>{{ $t('one.two') }}</el-button> 
<el-input type="password"  :placeholder="$t('password')"></el-input>
<span> {{ $t('account')}}</span>
<span> {{ $t('loginTitle')}}</span>

  </div>
</template>

<script>
export default {
computed: {
    language() {
      if (this.$i18n.locale === 'zh') {
        return '中文'
      }
      if (this.$i18n.locale === 'en') {
        return 'English'
      }
      return ''
    }
},
methods: {
    handleSetLanguage(language) {
      // 选择语言
      this.$i18n.locale = language
      window.localStorage.setItem('language', language)
    },
}


}
</script>

<style>

</style>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值