feat: 优化语言切换下拉交互并支持玩法规则多语言内容

This commit is contained in:
2026-05-22 16:55:45 +08:00
parent 52702c9fbb
commit 2bf44e4c29
5 changed files with 126 additions and 89 deletions

View File

@@ -0,0 +1,38 @@
import { normalizeLanguage, type AppLanguage } from "@/i18n/language";
const KEY_LEGACY = "frontend.play_rules_html";
const KEY_ZH = "frontend.play_rules_html_zh";
const KEY_EN = "frontend.play_rules_html_en";
const KEY_NE = "frontend.play_rules_html_ne";
type SettingItem = { key: string; value: unknown };
function asNonEmptyString(value: unknown): string | null {
if (typeof value !== "string") {
return null;
}
const trimmed = value.trim();
return trimmed === "" ? null : trimmed;
}
/** 从 public settings 列表中按玩家语言选取玩法规则 HTML */
export function resolvePlayRulesHtml(
items: SettingItem[],
language: string | undefined,
): string | null {
const kv = new Map(items.map((item) => [item.key, item.value]));
const legacy = asNonEmptyString(kv.get(KEY_LEGACY));
const zh = asNonEmptyString(kv.get(KEY_ZH));
const en = asNonEmptyString(kv.get(KEY_EN));
const ne = asNonEmptyString(kv.get(KEY_NE));
const lang: AppLanguage = normalizeLanguage(language);
if (lang === "zh") {
return zh ?? legacy;
}
if (lang === "ne") {
return ne ?? en ?? zh ?? legacy;
}
return en ?? zh ?? legacy;
}