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; } }