微信小程序國際化


微信小程序國際化,看了看網上有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)
      }
    }

除了這兩個中文,其它都英文吧,反正是初始化的默認


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM