feat(locale): 实现前端多语言覆盖与生效语言逻辑

- 新增 effectiveLanguage 字段,统一界面语言解析依据
- 支持前端语言覆盖(德语/西班牙语/法语)优先显示,回退设备语言
- setUiLanguage 方法实现前端或设备语言切换逻辑与持久化
- 当设备语言发生变化时自动清除前端语言覆盖,保证同步一致
- BottomNav 组件和 ConnectionPlaceholder 组件调整使用 effectiveLanguage 获取语言包
- 多语言数据更新,新增德语、西班牙语、法语、韩语支持及语言选项扩展
This commit is contained in:
eafonyang
2026-10-21 13:38:50 +08:00
parent 2c82d8511c
commit acfcffa60d
24 changed files with 3136 additions and 79 deletions
+5 -4
View File
@@ -110,16 +110,17 @@ export default function EQPage() {
upgradePeqChange,
upgradePeqApply,
syncPeqCatalog,
effectiveLanguage,
} = useDevice();
const bypassOn = (deviceState?.dsp_enable ?? 0) === 0;
const peqOn = (deviceState?.peqEnable ?? 0) === 1;
const eqOn = peqOn && !bypassOn;
const eqUi = useMemo((): PeqEqUi => {
const pack = resolveLocalePack(deviceState?.language);
const pack = resolveLocalePack(effectiveLanguage);
const peq = pack.peq as typeof localeZh.peq;
return (peq.eqUi ?? (localeEn.peq as typeof localeEn.peq).eqUi) as PeqEqUi;
}, [deviceState?.language]);
}, [effectiveLanguage]);
const firmwareVersion = useMemo(
() => parseFirmwareVersion(deviceState?.version),
@@ -128,9 +129,9 @@ export default function EQPage() {
const peqReorderEnabled = supportsPeqPresetRenameAndSort(firmwareVersion);
const peqCardLabels = useMemo(() => {
const pack = resolveLocalePack(deviceState?.language);
const pack = resolveLocalePack(effectiveLanguage);
return pack.peq ?? localeEn.peq;
}, [deviceState?.language]);
}, [effectiveLanguage]);
const eqPageTitle = usePageTitleWithConnection("HP-EQ");