微信小程序国际化

微信小程序国际化,看了看网上有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]这样获取并设置。

相当于这样:

if (lang == "zh") {
  wx.setStorageSync("local", localList.localList.zh) //用缓存
}
if(lang == "en"){ // dddd
  wx.setStorageSync("local", localList.localList.en) //用缓存
}

然而,开发工具中返回的是"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)
      }
    }

除了这两个中文,其它都英文吧,反正是初始化的默认

posted @ 2019-04-01 14:34  SrGK  阅读(1761)  评论(0编辑  收藏  举报