Files
lucky_shop/common/js/lang.js

166 lines
4.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const langList = ['zh-cn', 'en-us'];
var locale = uni.getStorageSync('lang') || "zh-cn"; //设置语言
export default {
langList: ['zh-cn', 'en-us'],
/**
* * 解析多语言
* @param {Object} field
*/
lang(field) {
let _this = getCurrentPages()[getCurrentPages().length - 1];
if (!_this) return;
var value = '';
let newRoute;
try {
//公共语言包
var lang = require('../../lang/' + locale + '/common.js').lang;
//当前页面语言包
let route = _this.route;
let routeParts = route.split("/");
// 映射新的页面目录到原来的语言文件目录
if (routeParts[0] === 'pages_goods') {
routeParts[0] = 'goods';
} else if (routeParts[0] === 'pages_order') {
routeParts[0] = 'order';
} else if (routeParts[0] === 'pages_promotion' && routeParts[1] === 'point') {
// 处理积分相关的推广页面映射到point语言文件目录
routeParts = ['point', routeParts[2]];
} else if (routeParts[0] === 'pages' && routeParts[1] === 'member') {
// 处理主包中的会员中心页面映射到member目录
routeParts = ['member', routeParts[2]];
} else if (routeParts[0] === 'pages_tool') {
// 处理工具页面目录,根据子目录映射到对应的语言文件目录
if (routeParts[1] === 'member') {
routeParts = ['member', routeParts[2]];
} else if (routeParts[1] === 'order') {
routeParts = ['order', routeParts[2]];
} else if (routeParts[1] === 'goods') {
routeParts = ['goods', routeParts[2]];
} else if (routeParts[1] === 'help' || routeParts[1] === 'notice' || routeParts[1] === 'article') {
// 处理CMS相关页面
routeParts = [routeParts[1], routeParts[2]];
}
}
let langPath = routeParts.join("/");
let currentPageLang = require('../../lang/' + locale + '/' + langPath + '.js').lang;
for (let f in currentPageLang) {
lang[f] = currentPageLang[f];
}
var arr = field.split(".");
if (arr.length > 1) {
// 处理嵌套属性,如 common.currencySymbol
let temp = lang;
let found = true;
for (let key of arr) {
if (temp[key] !== undefined) {
temp = temp[key];
} else {
found = false;
break;
}
}
value = found ? temp : field;
} else {
value = lang[field] !== undefined ? lang[field] : field;
}
} catch (e) {
if (field.indexOf("common.") != -1 || field.indexOf("tabBar.") != -1) {
value = lang[field];
} else {
value = field;
}
}
if (arguments.length > 1) {
//有参数,需要替换
for (var i = 1; i < arguments.length; i++) {
value = value.replace("{" + (i - 1) + "}", arguments[i]);
}
}
if (value == undefined || (value == 'title' && field == 'title')) value = ''; // field
return value;
},
/**
* * 切换语言
* @param {String} value 语言值
* @param {String} url 切换后跳转的页面url
*/
change(value, url = '/pages/member/index') {
let _this = getCurrentPages()[getCurrentPages().length - 1];
if (!_this) return;
uni.setStorageSync("lang", value);
locale = uni.getStorageSync('lang') || "zh-cn"; //设置语言
this.refresh();
if (url) {
uni.reLaunch({ url: url });
}
},
//刷新标题、tabbar
refresh() {
let _this = getCurrentPages()[getCurrentPages().length - 1];
if (!_this) return;
locale = uni.getStorageSync('lang') || "zh-cn"; //设置语言
this.title(this.lang("title"));
//设置tabbar的文字语言
// uni.setTabBarItem({
// index: 0,
// text: this.lang("tabBar.home")
// });
// uni.setTabBarItem({
// index: 1,
// text: this.lang("tabBar.category")
// });
// uni.setTabBarItem({
// index: 2,
// text: this.lang("tabBar.cart")
// });
// uni.setTabBarItem({
// index: 3,
// text: this.lang("tabBar.member")
// });
},
title(str) {
if (str) {
uni.setNavigationBarTitle({
title: str,
success: function (res) {
},
fail: function (err) {
}
});
}
},
// 获取语言包列表
list() {
var list = [];
try {
//公共语言包
for (var i = 0; i < langList.length; i++) {
let item = require('../../lang/' + langList[i] + '/common.js').lang;
list.push({
name: item.common.name,
value: langList[i]
});
}
} catch (e) {
// "没有找到语言包:", '../../lang/' + locale + '/common.js'
}
return list;
}
}