• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

微信小程序多语言实现方案

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这个话题纯属炒冷饭,已经有不少同行搞出来了,本文只是记录自己处理的过程。

不管哪个系统,多语言方案套路都是一样的

1、建立多语言映射库

2、记录并存储用户选择的语言版本,下次进入直接进入对应语言版本

3、根据用户设置动态加载语言版本

4、前台调用

 

上代码

项目根目录新建i18n目录,在该目录下存放不同版本的语言库

zh_CN.js

const languageMap = {
	\'简体中文\': \'简体中文\',
	\'繁体中文\': \'繁体中文\',
	\'英文\': \'英文\',
	\'多语言\': \'多语言\',
	\'设备状态可视图\': \'设备状态可视图\',
	\'当前班次\': \'当前班次\',
	\'近一周\': \'近一周\',
	\'近一月\': \'近一月\',
	\'近三月\': \'近三月\'
}

module.exports = {
	languageMap: languageMap
}

  

zh_TW.js

const languageMap = {
	\'简体中文\': \'簡體中文\',
	\'繁体中文\': \'繁體中文\',
	\'英文\': \'英文\',
	\'多语言\': \'多語言\',
	\'设备状态可视图\': \'設備狀態可視圖\',
	\'当前班次\': \'當前班次\',
	\'近一周\': \'近壹周\',
	\'近一月\': \'近壹月\',
	\'近三月\': \'近三月\'
}

module.exports = {
	languageMap: languageMap
}

  

en.js

const languageMap = {
	\'简体中文\': \'Simplified Chinese\',
	\'繁体中文\': \'Traditional Chinese\',
	\'英文\': \'English\',
	\'多语言\': \'multi language\',
	\'设备状态可视图\': \'equipment status chart\',
	\'当前班次\': \'current class\',
	\'近一周\': \'last week\',
	\'近一月\': \'last month\',
	\'近三月\': \'last three month\'
}

module.exports = {
	languageMap: languageMap
}

  

key以中文做标识,前台书写的时候可以直接写中文,对英语不好的比较方便

 

项目根目录新建utils目录,在该目录下新建language.js

function getLanguage() {
	// 获取本次存储的语言版本,默认中文
	return wx.getStorageSync(\'language\') ||\'zh_CN\'
}

function translate() {
	// 返回翻译对照映射表
	return require(\'../i18n/\' + getLanguage() + \'.js\').languageMap
}

function translateText(desc) {
	// 翻译
	return translate()[desc] || desc
}

module.exports = {
	getLanguage: getLanguage,
	_t: translate, // JSON映射表
	_: translateText // 翻译函数
}

  

为什么要有translate和translateText两个方法?

因为小程序wxml文件中只能使用对象,js文件中只能使用函数,无法通用

 

项目根目录新建components目录,在该目录新建switchLanguage目录,存放语言切换组件

wxml文件

<view class="switch-language-box">
	<picker bindchange="bindPickerChange" value="{{array[index].value}}" range="{{array}}" range-key="name">
		<view class="picker">
			{{array[index].name}}
		</view>
	</picker>
</view>

  

js文件

const base = require(\'../../utils/language.js\')
const _ = base._

Component({
	options: {},
	properties: {},
	data: {
		index: 0,
		language: \'zh_CN\',
		array: [{
			value: \'zh_CN\',
			name: _(\'简体中文\')
		}, {
			value: \'zh_TW\',
			name: _(\'繁体中文\')
		}, {
			value: \'en\',
			name: _(\'英文\')
		}]
	},
	created () {
		const language = base.getLanguage()
		let index = 0
		switch(language) {
			case \'zh_CN\':
				index = 0
				break
			case \'zh_TW\':
				index = 1
				break
			case \'en\':
				index = 2
				break
			default:
				break
		}
		this.setData({
			index: index,
			language: language
		})
	},
	methods: {
		bindPickerChange: function (e) {
			this.setData({
				index: e.detail.value,
				language: this.data.array[e.detail.value].value
			})
			this.switchLanguage()
		},
		switchLanguage () {
			wx.setStorageSync(\'language\', this.data.array[this.data.index].value)
			// 重新加载一次页面
			// wx.navigateTo({
			// 	url: \'index\'
			// })
			this.setData({
				array: [{
					value: \'zh_CN\',
					name: _(\'简体中文\')
				}, {
					value: \'zh_TW\',
					name: _(\'繁体中文\')
				}, {
					value: \'en\',
					name: _(\'英文\')
				}]
			})
			// 触发页面刷新,否则当前页语言版本无法更新
			this.triggerEvent(\'refleshevent\')
		}
	}
})

  

wxss文件可以自己定义

.switch-language-box{
	position: fixed;
	top: 10px;
	right: 10px;
	border: 1px solid gray;
}

  

应用

json文件(引用语言切换组件)

{
  "usingComponents": {"switchLanguage": "../../components/switchLanguage/index"}
}

  

wxml文件

<switchLanguage bindrefleshevent="reflesh"></switchLanguage>

  

js文件

const base = require(\'../../utils/language.js\')
const _ = base._

Page({
	data: {
		_t: \'\'
	},
	onLoad(option) {
		this.mixinFn()
		wx.setNavigationBarTitle({
			title: _(\'设备状态可视图\')
		})
	},
	reflesh () {
		this.onLoad()
	},
	mixinFn () {
		this.setData({
			_t: base._t()
		})
	}
})

  

前台使用

<text>{{_t[\'多语言\']}}</text>

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
微信小程序-国际化(miniprogram-i18n)发布时间:2022-07-18
下一篇:
微信小程序开发:中英文切换能力的简单实现方法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap