在vue和 js 、ts 数据中使用 vue-i18n,切换语言环境时,标签文本实时变化

我的项目需要显示两种语言(中文和英文),并且我想要切换语言时,页面语言环境会随之改变,目前发现,只能在vue中使用$t(‘’)的方式使用,但是这种方式只能在vue中使用,而我的菜单文件是定义在js中,在vue中遍历显示的,所以我开始尝试用标签代替我原本的字符串

我目前使用的vue-i18n版本是9

这是我原本的菜单列表,是直接显示中文文本
在这里插入图片描述

这是我的菜单栏页面,我想要点击切换之后,页面就能实时改变,
vue-i18n在vue文件中使用$t('')的方式时正常实时改变的,一切换语言,页面不能刷新就能随着改变,但是定义在js中的菜单文件就不同,它无法在js中使$t('')

在这里插入图片描述
这是我定义语言的两个文件en.js 和 zhHans.js
在这里插入图片描述
在这里插入图片描述

刚开始我尝试的方法是i18n.global.t('menuName.home') 的方式,但是我发现每次切换语言环境,都需要刷新页面才能显示,并不能实现我想要的效果,用i18n.global.t(‘menuName.home’)这种方式,切换语言环境时,vue中会实时变化,js文件中的不会
在这里插入图片描述
于是我就想到$t(' ')其实就相当于一个翻译函数,既然在js中使用i18n.global.t 首次是能正常翻译的,那我为何不将它封装成一个方法在vue页面中调用呢,毕竟它在vue中是响应变化的

普通vue页面使用官方方式$t('')即可
在这里插入图片描述


!!!在js中定义的字段就需要额外翻译一下,在vue中使用,这样就可以在修改语言环境时实时改变

1、 封装翻译函数

我封装在common-utils.js中的方法

// i18n 语言翻译处理
import i18n from '@/plugins/i18n'   //这是我的i18n.js路径,根据自己情况引入
export function translate(key) {
  return i18n.global.t(key)
}

2、vue页面中调用

<script setup>
//引入翻译方法
import {translate}from '@/utils/common-utils'
</script>

在遍历菜单的模板中需要动态语言的地方直接调用方法即可
在这里插入图片描述
当然,不要忘记把我们在js中定义的菜单将文本修改为关键标签

将原本固定的“我的主页”修改为我们自定义的menuName.home

在这里插入图片描述
这样就可以实现我切换语言环境后,页面就会实时的改变,无需刷新或其它操作
在这里插入图片描述

我这里只是针对js文件中定义的文本如何实现国际化 ,做一个记录,也帮助一下遇到同样问题的朋友

至于安装使用vue-i18n的步骤及其配置,其它教程或官网很清晰了,这里就不过多说明,

vue-i18n官网:https://vue-i18n.intlify.dev/guide/installation.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值