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("/"); console.log(`当前路由: ${route}`) // ---- 处理页面目录映射 分包造成的,需要根据实际目录结构进行映射---- if (routeParts[0] === 'pages_goods') routeParts[0] = 'goods'; if (routeParts[0] === 'pages_member') routeParts[0] = 'member'; if (routeParts[0] === 'pages_order') routeParts[0] = 'order'; if (routeParts[0] === 'pages_promotion') { if (routeParts[1] === 'point') routeParts = ['point', ...routeParts.slice(2)]; if (routeParts[1] === 'fenxiao') routeParts = ['fenxiao', ...routeParts.slice(2)]; if (routeParts[1] === 'merch') routeParts = ['merch', ...routeParts.slice(2)]; } if (routeParts[0] === 'pages_tool') { if (routeParts[1] === 'member') routeParts = ['member', ...routeParts.slice(2)]; if (routeParts[1] === 'order') routeParts = ['order', ...routeParts.slice(2)]; if (routeParts[1] === 'goods') routeParts = ['goods', ...routeParts.slice(2)]; if (routeParts[1] === 'help') routeParts = ['help', ...routeParts.slice(2)]; if (routeParts[1] === 'notice') routeParts = ['notice', ...routeParts.slice(2)]; if (routeParts[1] === 'article') routeParts = ['article', ...routeParts.slice(2)]; } // ---- 处理页面目录映射 ---- // 去掉pages目录,只保留子目录 if (routeParts[0] === 'pages') { routeParts = routeParts.slice(1); } let langPath = routeParts.join("/"); console.log(`当前页面语言文件路径: ${'@/lang/' + locale + '/' + langPath + '.js'}`) 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; } }