iview-admin多语言切换文字

iview-admin多语言切换文字
在这里插入图片描述
原因分析:
data里的数据this. t ( ′ h o m e u s e r i n c r e m e n t ′ ) 在 渲 染 时 已 经 “ 定 死 ” 了 , 在 切 换 语 言 时 , 并 没 有 对 界 面 里 的 该 数 据 t h i s . t('home_user_increment')在渲染时已经“定死”了,在切换语言时,并没有对界面里的该数据this. t(homeuserincrement)this.t(‘home_user_increment’)进行重新执行更新,显然无法实现语言切换。

解决思路:
针对分析,咱想办法把this.$t(‘home_user_increment’)这玩意儿在触发切换语言后再执行一下,细想了下vue的触发更新,于是思路如下走:

首先想到了watch,但是要考虑到之后界面所有文本都需要切语言的啊!!!你watch不累吗
不对呀,只需要watch lang就可以了,正好language.vue这个多语言组件切换的实现也是用的watch: {lang (lang) {this.$i18n.locale = lang}}我们只需要在这里执行相关更新的代码就应该能行了
好,触发方式ok了,执行怎么样的更新呢?为了满足我们的需求,我们得刷新整个界面的文本
那刷新整个界面的文本 = 刷新整个界面,那我直接刷app.vue这个根组件就行了嘛
我就采用了vue的provide和inject方法,app根组件这用v-if来进行界面重载,不了解provide和inject的走你。
App.vue

language.vue

export default {
name: ‘Language’,
inject: [‘reload’], //接受App那边提供的方法
props: {
lang: String
},
data () {
return {
langList: {
‘zh-TW’: ‘繁体’,
‘zh-CN’: ‘中文’,
‘en-US’: ‘英文’
},
localList: {
‘zh-TW’: ‘中文繁体’,
‘zh-CN’: ‘中文简体’,
‘en-US’: ‘English’
}
}
},
watch: {
lang (lang) {
this.$i18n.locale = lang
console.log(‘reload!!!’)
this.reload() //在触发切换语言后调用,相当于直接调用app里写的reload方法
}
},
最后是在locale/lang文件下的语言包文件
zh-CN.js文件
export default {

home_user_increment: ‘新增用户’
}

zh-TW.js文件
export default {

home_user_increment: ‘新增用戶’
}
en-US.js文件

export default {

home_user_increment: ‘User Increment’
}
最后就都会切换语言了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值