需求:項目需要加語言國際化功能;
網(wǎng)上一般可以搜到的兩種方案,一種是微信的 miniprogram-i18n,一種是大佬寫的 miniprogram-i18n-plus;微信的 miniprogram-i18n 使用有點麻煩,可自行了解;這里只記錄 miniprogram-i18n-plus 的使用方法(在大佬 git 文檔的基礎(chǔ)上稍作補充莉测,可結(jié)合本文與大佬的git文檔一起看),避免以后繼續(xù)踩坑唧喉;
第一步:
檢查項目中是否有 package.json 文件捣卤,如果沒有的話,需要在微信開發(fā)工具終端中使用命令行: npm init 來生成 package.json 文件八孝,如果有該文件董朝,可以跳過這步執(zhí)行第二步;
npm init
執(zhí)行命令期間需要按幾次回車鍵
第二步
繼續(xù)在微信開發(fā)者工具終端中執(zhí)行命名行 npm install miniprogram-i18n-plus -S 干跛; 執(zhí)行完成后子姜,會生成一個 node_modules 文件;
npm install miniprogram-i18n-plus -S
第三步:
生成 node_modules 文件后楼入,需要點開開發(fā)工具的工具欄哥捕;工具 -> 構(gòu)建 npm
npm構(gòu)建成功后,又會生成一個 miniprogram_npm 文件
構(gòu)建不成功的同學(xué)可以參考下這個方案(https://blog.csdn.net/Mitin_/article/details/125929168)修改 prject.config.json 文件的配置項嘉熊;
以上步驟均完成遥赚,就可以根據(jù)文檔中的說明,引用文件阐肤,調(diào)用方法了凫佛;
在 app.js 文件中寫入以下方法讲坎,初始化語言展示設(shè)置:
// app.js
// 以下是git文檔中的引入路徑,我的需要再多引入一層 index(import i18nInstance from "./miniprogram_npm/miniprogram-i18n-plus/index";) 否則會報錯愧薛,大家可以根據(jù)自己的情況看看晨炕;
import i18nInstance from "./miniprogram_npm/miniprogram-i18n-plus";
App({
onLaunch() {
// 需要展示的文字內(nèi)容
const locales = {
zh_CN: {
test: "測試",
},
en_US: {
test: "Test",
},
};
// 可根據(jù)系統(tǒng)語言來動態(tài)設(shè)置
// ******重點*****: 這里設(shè)置的字符串內(nèi)容(zh_CN en_US),要與上面 locales 對象中寫的對應(yīng)(大小寫厚满,下劃線均要一模一樣)府瞄,如果有錯誤碧磅,會報錯
// let lang = wx.getAppBaseInfo().language
// let resultL = lang.toLowerCase().includes('zh_cn') ? 'zh_CN' : 'en_US'
// i18nInstance.setLocale(resultL);
i18nInstance.setLocale("zh_CN");
i18nInstance.loadTranslations(locales);
},
});
在需要使用的頁面中:
index.js
// index.js
import i18nInstance from "./miniprogram_npm/miniprogram-i18n-plus";
Page({
onLoad() {
i18nInstance.effect(this);
},
});
index.wxml
<view>{{ $language.test }}</view>
補充:大佬的git文檔中并沒有說碘箍,怎么處理 js 文件中的文字,即在 js 中修改 navigationBarTitleText
index.js
import i18nInstance from "../../miniprogram_npm/miniprogram-i18n-plus/index";
Page ({
data: {
},
onLoad: function (options) {
i18nInstance.effect(this);
wx.setNavigationBarTitle({
title: $language.test,
})
}
})
(以上寫法會報錯: VM5282 WAService.js:1 ReferenceError: $language is not defined)
wxml 文件中可以使用 $language 來調(diào)用文字鲸郊,但是 js 中會報錯丰榴;
解決辦法:
直接使用 i18nInstance.getLanguage() 方法來獲取當前的語言對象,不使用原先的 i18nInstance.effect(this) 方式
index.js
import i18nInstance from "../../miniprogram_npm/miniprogram-i18n-plus/index";
Page ({
data: {
i18nL: i18nInstance.getLanguage()
},
onLoad: function (options) {
wx.setNavigationBarTitle({
title: this.data.i18nL.test,
})
}
})
wxml 文件也需要做出相應(yīng)的改變
index.wxml
<view>{{ i18nL.test }}</view>