refactor: 完成全站国际化改造,统一多语言支持

此提交完成了全项目的国际化适配:
1. 新增多语言翻译文件与基础配置
2. 替换所有硬编码文本为i18n调用
3. 优化语言切换与文档语言同步逻辑
4. 重构部分业务逻辑以支持动态翻译
5. 移除过时代码与硬编码配置
This commit is contained in:
2026-05-15 10:41:14 +08:00
parent ac612cb32c
commit f2c7f5e4f1
53 changed files with 2179 additions and 767 deletions

View File

@@ -1,30 +1,44 @@
/**
* 下注业务码与玩家可见说明(对齐 Laravel `ErrorCode` 与产品文档 §6.3 / §6.4)。
*/
export function mapTicketBetError(code: number, fallbackMsg: string): string {
export function mapTicketBetError(
code: number,
fallbackMsg: string,
t?: (key: string) => string,
): string {
const msg = (key: string, fallback: string) => t?.(key) ?? fallback;
switch (code) {
case 4001:
return "该号码本期赔付池不足,已售罄。请更换号码、金额或玩法后重试。";
return msg(
"hall.ticketError.4001",
"该号码本期赔付池不足,已售罄。请更换号码、金额或玩法后重试。",
);
case 2003:
case 1001:
return "余额不足,请先转入后再下注。";
return msg("hall.ticketError.1001", "余额不足,请先转入后再下注。");
case 2001:
return "本期已封盘,无法继续下注。";
return msg("hall.ticketError.2001", "本期已封盘,无法继续下注。");
case 2002:
return "该玩法已关闭,请选择其他玩法。";
return msg("hall.ticketError.2002", "该玩法已关闭,请选择其他玩法。");
case 2004:
return "号码格式或长度不符合该玩法要求。";
return msg("hall.ticketError.2004", "号码格式或长度不符合该玩法要求。");
case 2005:
return "玩法参数不完整(如单双大小需选择位数与维度)。";
return msg(
"hall.ticketError.2005",
"玩法参数不完整(如单双大小需选择位数与维度)。",
);
case 2006:
return "当前期号不可下注。";
return msg("hall.ticketError.2006", "当前期号不可下注。");
case 2007:
return "该玩法暂不支持或缺少赔率配置。";
return msg("hall.ticketError.2007", "该玩法暂不支持或缺少赔率配置。");
case 2008:
return "赔率或玩法配置已更新,请关闭预览后重新操作。";
return msg(
"hall.ticketError.2008",
"赔率或玩法配置已更新,请关闭预览后重新操作。",
);
case 1003:
return "下注金额超出该玩法允许范围。";
return msg("hall.ticketError.1003", "下注金额超出该玩法允许范围。");
default:
return fallbackMsg || "下注失败,请稍后重试。";
return fallbackMsg || msg("hall.ticketError.fallback", "下注失败,请稍后重试。");
}
}