chore(test): 测试代码

This commit is contained in:
2025-12-29 15:54:00 +08:00
parent 6b5a268955
commit 30403871e7
15 changed files with 394 additions and 99 deletions

View File

@@ -1,9 +1,61 @@
const langList = ['zh-cn', 'en-us'];
import { langConfig } from './config-external.js';
var locale = uni.getStorageSync('lang') || "zh-cn"; //设置语言
// 缓存已加载的语言包
var loadedLangPacks = {};
// 处理页面目录映射
function processRoutePath(route) {
let routeParts = route.split("/");
// ---- 处理页面目录映射 <begin> 分包造成的,需要根据实际目录结构进行映射----
// 先处理特殊的分包路径
if (routeParts[0] === 'pages_tool') {
// pages_tool 分包下的页面,直接使用子目录作为语言包路径
routeParts = [routeParts[1], ...routeParts.slice(2)];
} else if (routeParts[0] === 'pages_goods') {
// pages_goods 分包映射到 goods 目录
routeParts[0] = 'goods';
} else if (routeParts[0] === 'pages_member') {
// pages_member 分包映射到 member 目录
routeParts[0] = 'member';
} else if (routeParts[0] === 'pages_order') {
// pages_order 分包映射到 order 目录
routeParts[0] = 'order';
} else if (routeParts[0] === 'pages_promotion') {
// pages_promotion 分包特殊处理
const promotionModules = ['point', 'fenxiao', 'merch'];
if (routeParts[1] && promotionModules.includes(routeParts[1])) {
routeParts = [routeParts[1], ...routeParts.slice(2)];
}
}
// ---- 处理页面目录映射 <end>----
// 去掉pages目录只保留子目录
if (routeParts[0] === 'pages') {
routeParts = routeParts.slice(1);
}
return routeParts.join("/");
}
// 加载语言包(同步方式)
function loadLangPackSync(lang, path) {
try {
if (loadedLangPacks[`${lang}_${path}`]) {
return loadedLangPacks[`${lang}_${path}`];
}
const langData = require(`@/lang/${lang}/${path}.js`).lang;
loadedLangPacks[`${lang}_${path}`] = langData;
return langData;
} catch (error) {
console.error(`加载语言包 ${lang}/${path} 失败:`, error);
return {};
}
}
export default {
langList: ['zh-cn', 'en-us'],
langList: langConfig.langList,
/**
* * 解析多语言
* @param {Object} field
@@ -13,51 +65,25 @@ export default {
if (!_this) return;
var value = '';
let newRoute;
try {
//公共语言包
var lang = require('@/lang/' + locale + '/common.js').lang;
//当前页面语言包
//公共语言包(同步加载)
var lang = loadLangPackSync(locale, 'common');
//当前页面语言包(同步加载)
let route = _this.route;
let routeParts = route.split("/");
console.log(`当前路由: ${route}`)
let langPath = processRoutePath(route);
// ---- 处理页面目录映射 <begin> 分包造成的,需要根据实际目录结构进行映射----
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') {
const promotionModules = ['point', 'fenxiao', 'merch'];
if (promotionModules.includes(routeParts[1])) {
routeParts = [routeParts[1], ...routeParts.slice(2)];
}
}
// 加载当前页面语言包
let currentPageLang = loadLangPackSync(locale, langPath);
if (routeParts[0] === 'pages_tool') {
routeParts = [routeParts[1], ...routeParts.slice(2)];
}
// ---- 处理页面目录映射 <end>----
// 去掉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];
}
// 合并语言包
let mergedLang = { ...lang, ...currentPageLang };
// 解析字段
var arr = field.split(".");
if (arr.length > 1) {
// 处理嵌套属性,如 common.currencySymbol
let temp = lang;
let temp = mergedLang;
let found = true;
for (let key of arr) {
if (temp[key] !== undefined) {
@@ -69,16 +95,12 @@ export default {
}
value = found ? temp : field;
} else {
value = lang[field] !== undefined ? lang[field] : field;
value = mergedLang[field] !== undefined ? mergedLang[field] : field;
}
} catch (e) {
if (field.indexOf("common.") != -1 || field.indexOf("tabBar.") != -1) {
value = lang[field];
} else {
value = field;
}
console.error('解析语言包失败:', e);
value = field;
}
if (arguments.length > 1) {
@@ -98,13 +120,16 @@ export default {
* @param {String} value 语言值
* @param {String} url 切换后跳转的页面url
*/
change(value, url = '/pages/member/index') {
change(value, url = '/pages_tool/member/index') {
let _this = getCurrentPages()[getCurrentPages().length - 1];
if (!_this) return;
uni.setStorageSync("lang", value);
locale = uni.getStorageSync('lang') || "zh-cn"; //设置语言
// 清空已加载的语言包缓存
loadedLangPacks = {};
this.refresh();
if (url) {
@@ -153,15 +178,16 @@ export default {
var list = [];
try {
//公共语言包
for (var i = 0; i < langList.length; i++) {
let item = require('../../lang/' + langList[i] + '/common.js').lang;
for (var i = 0; i < langConfig.langList.length; i++) {
let langType = langConfig.langList[i];
let item = loadLangPackSync(langType, 'common');
list.push({
name: item.common.name,
value: langList[i]
name: item.common ? item.common.name : langType,
value: langType
});
}
} catch (e) {
// "没有找到语言包:", '../../lang/' + locale + '/common.js'
console.error('获取语言包列表失败:', e);
}
return list;
}