vue.js 过滤器中怎么调用 i18n 对象获取相应语言?

发布于 2022-09-06 11:26:38 字数 568 浏览 21 评论 0

定义了一个 filter/index.js 文件,里面 export 出很多 function,如下:


export function parseTime(time, cFormat) {
  //省略逻辑部分
  return time_str;
}

然后在 main 里面注册该过滤器,如下:

import * as filters from './filters'

Object.keys(filters).forEach(key => {
  Vue.filter(key, filters[key])
});

项目多语言是通过vue-i18n实现的,我想要实现一个功能,通过状态编号,配合过滤器,把状态id转换成相应语言的文字描述。

但是现在有一个问题,因为过滤器是一个js文件,没办法this.$t()这些方式来获取vue-i18n对象,该怎么做呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

绻影浮沉 2022-09-13 11:26:39

思路:
1、分别把多语言都倒入到过滤器里面;
2、在过滤器中可以通过封装的模块获取当前语言,然后根据多语言决定使用哪个语言信息模块对象;

不过这么看来,vue.js 文件可以通过不刷新来切换多语言有点鸡肋了,以为模块化的话就必须有一部分单独提取到.js文件里面,但是.js文件里米娜的内容并不支持这种方式切换。

有人有更好的方法么?

離殇 2022-09-13 11:26:39

给过滤器传参数,

离去的眼神 2022-09-13 11:26:39
  1. 直接在过滤器的js中引入i18n的实例
// i18n.js
const i18n = new VueI18n({
  locale: 'zh',
  messages
})
export default i18n

// filters.js
import i18n from 'src/i18n/i18n'
然后调用i18n.t
  1. 在a.vue中定义t函数,然后给过滤器传参
methods:{
  t(...params){
    return this.$t.apply(this,params)
  }
},
filters:{
    filteA(t){
        return t('something.a')
    }
}
忘年祭陌 2022-09-13 11:26:39

你这样写不在vue中,需要包起来,直接在main.js的new Vue 赋给一个变量,然后再从变量中获取就可以了
如 main.js中
window.vm= new Vue({
// 单独js 中,
window.vm.$i18n.t('XXX')

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文