refactor(LangUtil): 重构多语言工具类,新增枚举类型安全前缀

1. 将原有的字符串LangPrefix类型改为枚举类型,避免硬编码字符串错误
2. 更新所有使用处的调用方式,统一使用LangPrefix枚举来传入多语言前缀
3. 移除VictoryComp中硬编码的成就描述拼接逻辑,改用lang/langf方法获取多语言文本
4. 注释暂时不需要渲染的分数进度条代码
This commit is contained in:
panw
2026-05-15 15:44:43 +08:00
parent 4f8a955506
commit a6915fdf00
5 changed files with 1712 additions and 1521 deletions

View File

@@ -23,67 +23,68 @@
* | hl_desc | 亮点成就描述 | hl_desc_9001 | 暴击{0}次 |
*
* === 使用示例 ===
* import { lang, langf } from "../common/LangUtil";
* import { LangPrefix, lang, langf } from "../common/LangUtil";
*
* // 英雄
* lang("hero_name", 5001) // → "盾战士"
* langf("skill_info", 6001, 1, 100) // → "对单个目标攻击1次每次造成100%攻击的伤害"
* lang(LangPrefix.hero_name, 5001) // → "盾战士"
* langf(LangPrefix.skill_info, 6001, 1, 100) // → "对单个目标攻击1次每次造成100%攻击的伤害"
*
* // 驻场技能
* lang("fskill_name", 7001) // → "召唤精通"
* langf("fskill_info", 7001, 1) // → "场上所有友方召唤触发技能触发次数+1"
* lang(LangPrefix.fskill_name, 7001) // → "召唤精通"
* langf(LangPrefix.fskill_info, 7001, 1) // → "场上所有友方召唤触发技能触发次数+1"
*
* // 亮点成就(与英雄/技能完全一致的调用方式)
* lang("hl_name", 9001) // → "暴击大师"
* langf("hl_desc", 9001, 20) // → "暴击20次"
* lang(LangPrefix.hl_title, 9011) // → "初级暴击者"
* langf(LangPrefix.hl_desc, 9011, 20) // → "暴击20次"
*/
import { oops } from "db://oops-framework/core/Oops";
export type LangPrefix =
| "hero_name"
| "hero_info"
| "mon_name"
| "skill_name"
| "skill_info"
| "fskill_name"
| "fskill_info"
| "scard_name"
| "scard_info"
| "hl_name"
| "hl_desc";
export enum LangPrefix {
hero_name = "hero_name",
hero_info = "hero_info",
mon_name = "mon_name",
skill_name = "skill_name",
skill_info = "skill_info",
fskill_name = "fskill_name",
fskill_info = "fskill_info",
scard_name = "scard_name",
scard_info = "scard_info",
hl_title = "hl_title",
hl_desc = "hl_desc",
}
function buildKey(prefix: LangPrefix, uuid: number | string): string {
function buildKey(prefix: string, uuid: number | string): string {
return `${prefix}_${uuid}`;
}
/**
* 按前缀+uuid获取多语言文本
* @param prefix 类型前缀,如 "hero_name"、"skill_info"、"hl_name"
* @param prefix 类型前缀,推荐使用 LangPrefix 枚举
* @param uuid 唯一标识
* @returns 翻译后的文本,找不到则返回 key 本身
*
* @example
* lang("hero_name", 5001) // → "盾战士"
* lang("skill_name", 6002) // → "火球术"
* lang("hl_title", 9011) // → "初级暴击者"
* lang(LangPrefix.hero_name, 5001) // → "盾战士"
* lang(LangPrefix.skill_name, 6002) // → "火球术"
* lang(LangPrefix.hl_title, 9011) // → "初级暴击者"
*/
export function lang(prefix: LangPrefix, uuid: number | string): string {
export function lang(prefix: string, uuid: number | string): string {
const key = buildKey(prefix, uuid);
return oops.language.getLangByID(key) || key;
}
/**
* 按前缀+uuid获取多语言文本并替换 {0} {1} ... 占位符
* @param prefix 类型前缀
* @param prefix 类型前缀,推荐使用 LangPrefix 枚举
* @param uuid 唯一标识
* @param params 模板参数,按顺序替换 {0} {1} ...
* @returns 翻译并替换参数后的文本
*
* @example
* langf("skill_info", 6001, 1, 100) // → "对单个目标攻击1次每次造成100%攻击的伤害"
* langf("hl_desc", 9001, 20) // → "暴击20次"
* langf(LangPrefix.skill_info, 6001, 1, 100) // → "对单个目标攻击1次每次造成100%攻击的伤害"
* langf(LangPrefix.hl_desc, 9011, 20) // → "暴击20次"
*/
export function langf(prefix: LangPrefix, uuid: number | string, ...params: any[]): string {
export function langf(prefix: string, uuid: number | string, ...params: any[]): string {
const key = buildKey(prefix, uuid);
let str = oops.language.getLangByID(key) || key;
if (params && params.length > 0) {

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "0790610b-af83-4922-ae8c-3b1ced9ff472",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -17,9 +17,9 @@
* 9091~9095 = ThriftyPlayer 节俭玩家
*
* 多语言调用方式(与英雄/技能统一):
* import { lang, langf } from "../common/LangUtil";
* lang("hl_title", 9011) // → "初级暴击者"
* langf("hl_desc", 9011, 20) // → "暴击20次"
* import { LangPrefix, lang, langf } from "../common/LangUtil";
* lang(LangPrefix.hl_title, 9011) // → "初级暴击者"
* langf(LangPrefix.hl_desc, 9011, 20) // → "暴击20次"
*/
export enum HighlightType {