微信小程序国际化,看了看网上有i18n或者自己写个json等方法。于是用自己写json方法试了一下。感觉非常适合小白型的人理解和使用
1.新建一个js文件,写入json
let localList = { 'zh': { 'language': '简体中文', 'login': '登录', 'logout': '登出', 'pay': '支付', 'changeLanguage': '切换语言', 'search': '搜索', 'address': '地址', 'contacts': '联 系 人', 'phone': '联系电话', }, 'en': { 'language': 'English', 'login': 'Login', 'logout': 'Logout', 'pay': 'Pay', 'changeLanguage': 'ChangeLanguage', 'search': 'Search', 'address': 'Address', 'contacts': 'Contacts', 'phone': 'Phone', } } module.exports = { localList: localList }
2.在app.js中设置初始化的默认语言(试了其它文件如page中的index.js之类不好使,只能在app.js中)
// 国际化 let lang = wx.getSystemInfoSync().language // 无语种时预设一个默认语言 if (wx.getStorageSync("local") == ""){ let localList = require("./utils/locales.js") wx.setStorageSync("local", localList.localList[lang]) }
当缓存中为空串时(wx.getStorageSync("local")为空时返回的不是null,而是""),设置默认的语言。有则不进行设置,否则会覆盖掉后面用户自己手动更改的语言。(另外,这有问题,后面改了)
因为:原本设定,返回的lang是"zh",就在json中有对应的"zh",返回的lang是"en",就在json中有对应的"en",只要json中的键与lang对应的就可以localList.localList[lang]这样获取并设置。
相当于这样:
然而,开发工具中返回的是"zh",手机返回的是"zh_CN",英文倒是返回的"en",但有一个不一样也不敢这样写了,难保有其它手机不一样,所以后来改了(见第5条)……
3.页面中进行引用
Page({ data: { local: wx.getStorageSync("local") } })
<view>22{{local.login}}</view> <view>22{{local.pay}}</view>
4.切换语言,用showActionSheet直接写死了语种,反正我这就俩语种
changeLang() { let that = this wx.showActionSheet({ itemList: ['中文', 'English'], success(res) { if(res.tapIndex == 0){ let localList = require("../../utils/locales.js") wx.setStorageSync("local", localList.localList.zh) that.setData({ local: wx.getStorageSync("local") }) } if(res.tapIndex == 1){ let localList = require("../../utils/locales.js") wx.setStorageSync("local", localList.localList.en) that.setData({ local: wx.getStorageSync("local") }) } }, fail(res) { console.log(res.errMsg) } }) }
5.继续第二条。初始化赋值一个默认语言后来改了,改成什么样呢。
可以改成为空时也弹出再次弹一个showActionSheet,但是一样不好使,因为我还有一个lanucher页面,还没等选择菜单呢就被延迟启动的lanucher顶没了。
所有呢,我改成了这样
if (wx.getStorageSync("local") == ""){ let localList = require("./utils/locales.js") wx.setStorageSync("local", localList.localList.zh) }
指定默认中文得了,想改自己点切换按钮改去!!!
6.补充,我又改了,想了想还是这样吧
if (wx.getStorageSync("local") == ""){ let localList = require("./utils/locales.js") if (lang == "zh" || lang == "zh_CN") { wx.setStorageSync("local", localList.localList.zh) }else{ wx.setStorageSync("local", localList.localList.en) } }
除了这两个中文,其它都英文吧,反正是初始化的默认