微信小程序國際化,看了看網上有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) } }
除了這兩個中文,其它都英文吧,反正是初始化的默認
