国际化 i18n
优质
小牛编辑
150浏览
2023-12-01
Mpx 支持国际化 i18n,使用方式及支持能力与 vue-i18n 非常接近。
使用方法
Mpx 自带 i18n 能力,无需额外安装插件。由于小程序模板中的 i18n 函数是通过 wxs 编译注入进行实现,我们需要将 i18n 配置传入到 MpxWebpackPlugin 中来使 i18n 生效,这是与 vue-i18n 最大的区别。
配置方法
I18n 配置传入到 MpxWebpackPlugin 选项中即可生效,额外支持 messagesPath/dateTimeFormatsPath/numberFormatsPath 配置,其余配置参考 vue-i18n。
new MpxWebpackPlugin({
i18n: {
locale: 'en-US',
// messages既可以通过对象字面量传入,也可以通过messagesPath指定一个js模块路径,在该模块中定义配置并导出,dateTimeFormats/dateTimeFormatsPath和numberFormats/numberFormatsPath同理
messages: {
'en-US': {
message: {
hello: '{msg} world'
}
},
'zh-CN': {
message: {
hello: '{msg} 世界'
}
}
},
// messagesPath: path.resolve(__dirname, '../src/i18n.js')
}
})
在js中使用
同 vue-i18n,在组件中直接调用翻译函数使用,目前 js 中支持了 vue-i18n 中全部的翻译函数,包括 $t/$tc/$te/$d/$n ,详细使用方法参考 vue-i18n。
createComponent({
ready () {
console.log(this.$t('message.hello', { msg: 'hello' }))
},
computed: {
formatedDatetime () {
return this.$d(new Date(), 'long')
}
}
})
在模板中使用
类似于 vue-i18n,在模板的 Mustache 插值中直接调用翻译函数,目前由于 wxs 执行环境的限制,模板上可直接使用的翻译函数包括 $t/$tc/$te ,如果需要格式化数字或日期可以使用对应的 js 翻译函数和 Mpx 提供的计算属性结合实现。
<view>
<view>{{ $t('message.hello', { msg: 'hello' }) }}</view>
<!-- formatedDatetime计算属性定义见上例,可基于locale变更响应刷新 -->
<view>{{formatedDatetime}}</view>
</view>
动态变更locale
类似于 vue-i18n,可实现全局 local 变更及局部 local 变更,并自动更新视图,使用方式如下。
import mpx, { createComponent } from '@mpxjs/core'
createComponent({
ready () {
// 局部locale变更,生效范围为当前组件内
this.$i18n.locale = 'en-US'
setTimeout(() => {
// 全局locale变更,生效范围为项目全局
mpx.i18n.locale = 'ja-JP'
}, 1000)
}
})
平台支持
由于 Mpx 中 i18n 实现依赖类 wxs 能力,目前支持除头条之外的所有小程序平台(微信/支付宝/qq/百度),在输出 web 时,构建会自动引入 vue-i18n 并进行安装配置,无需修改任何代码即可按照预期正常工作。