2024-03-18 创建于墨问
小程序官方的方案是
这个方案是使用 gulp 来构建 wxs 函数,不推荐使用,原因是:
- 所有 i18n 文本放在一起,会占用小程序主包体积
- 修改 i18n 文本后,必须执行 gulp 重新生成,无法热更新立即预览,开发效率低
- 无法适配小程序的 skyline 模式
- 官方多年不维护了
下面说说如何自己实现一个国际化方案呢?
-
配合小程序分包,每个页面定义 2 个 i18n 文本,分别是 js 文件和 wxs 文件
-
页面导航栏标题
首先移除页面 json 配置里的 navigationBarTitleText
方式1:引入 js 文件翻译,使用 wx.setNavgationTitle 设置
方式2:引入 wxs 文件翻译,使用 navigation-bar 组件设置
-
页面/组件 wxml 里的数据,引入 wxs 文件翻译
-
页面/组件 js 里的数据,引入 js 文件翻译
-
当前微信的语言,可以在系统信息获取到 systemInfo.language,值为 zh-CN、en-US 等
-
语言的切换方式:
方式1: 跟随微信的语言,目前无法监听,切换后需要用户自己重新进入小程序
方式2: 用户手动设置,设置后提示用户,用户同意后使用 wx.restartMiniProgram重启小程序(推荐)