Vue项目i18n多语言国际化过程中,过滤器filter中使用国际化遇到的坑及解决办法。
1、项目实际情况:表格内的单元格数据,通过后台返回的字段对应的替换为filters中的文字。<template><span>{{ scope.row.isMain | isMainFilter}}</span></template>.......filters:{isMainFilter(isMain) {if (isM...
·
1、项目实际情况:
表格内的单元格数据,通过后台返回的字段对应的替换为filters中的文字。
<template>
<span>{{ scope.row.isMain | isMainFilter}}</span>
</template>
.......
filters:{
isMainFilter(isMain) {
if (isMain) {
return '是'
} else {
return '否'
}
}
}
现在项目需要国际化,就需要将filter中的替换文字也要进行国际化。
网上找了一圈,传递this什么的,都没有解决,最后采用的下面的办法。
2、解决方案:
<span>{{ scope.row.isMain | isMainFilter(te) }}</span>
filter过滤器可以传递多参数,我将一个te函数传递进过滤器内。
isMainFilter(isMain, te) {
if (isMain) {
return te('model.yes')
} else {
return te('model.no')
}
}
然后在methods中定义这个te函数
te(arg) {
const hasKey = this.$te(arg)
if (hasKey) {
const result = this.$t(arg)
return result
}
return arg
},
methods内的方法,是可以拿到this的,随便就可以拿到i8n语言包的$t函数了。
model.yes
和model.no
是对应的语言包。
更多推荐
已为社区贡献28条内容
所有评论(0)