适配新语言

This commit is contained in:
eafonyang
2026-10-22 13:50:16 +08:00
parent 4c69844d1c
commit dccf2c70ac
18 changed files with 4180 additions and 73 deletions
+3 -3
View File
@@ -99,7 +99,7 @@ export default function BottomNav() {
const [location, setLocation] = useLocation();
const isLgUp = useIsLgUp();
const { open: aiDrawerOpen, setOpen: setAiDrawerOpen } = useAIDrawer();
const { deviceState } = useDevice();
const { effectiveLanguage } = useDevice();
const { isNavHidden } = useNavConfig();
const festival = useFestival();
@@ -110,9 +110,9 @@ export default function BottomNav() {
);
const navText = useMemo((): BottomNavLocale => {
const pack = resolveLocalePack(deviceState?.language);
const pack = resolveLocalePack(effectiveLanguage);
return (pack.bottomNav ?? localeEn.bottomNav) as BottomNavLocale;
}, [deviceState?.language]);
}, [effectiveLanguage]);
return (
<nav
+10 -10
View File
@@ -4,18 +4,18 @@ import { isLikelyNetworkFetchError } from "@/lib/networkError";
import { Loader2, Wifi } from "lucide-react";
import BottomNav from "@/components/BottomNav";
import localeZh from "@/locales/data-zh.json";
import localeZhHK from "@/locales/data-zh-HK.json";
import localeEn from "@/locales/data-en.json";
import { getUiLanguageOverride, isKnownLanguage, resolveLocalePack } from "@/locales/resolveLocale";
type ConnectLocale = (typeof localeZh)["connect"];
function pickConnectLocale(): ConnectLocale {
function pickConnectLocale(effectiveLanguage: number): ConnectLocale {
// 前端语言覆盖(de/es/fr)优先;否则沿用 URL ?lang=(设备语言);最后回退到生效语言。
const override = getUiLanguageOverride();
if (override != null) return resolveLocalePack(override).connect as ConnectLocale;
const params = new URLSearchParams(window.location.search);
const lang = params.get("lang");
if (lang === "0") return localeEn.connect;
if (lang === "1") return localeZhHK.connect;
if (lang === "2") return localeZh.connect;
return localeEn.connect;
const langParam = Number(params.get("lang"));
const lang = isKnownLanguage(langParam) ? langParam : effectiveLanguage;
return resolveLocalePack(lang).connect as ConnectLocale;
}
function fmt(template: string, vars: Record<string, string>): string {
@@ -28,8 +28,8 @@ function fmt(template: string, vars: Record<string, string>): string {
/** 自动连接设备时的占位(替代原 ConnectScreen) */
export default function ConnectionPlaceholder() {
const { ip, isConnecting, error, ipMissing } = useDevice();
const text = useMemo(pickConnectLocale, []);
const { ip, isConnecting, error, ipMissing, effectiveLanguage } = useDevice();
const text = useMemo(() => pickConnectLocale(effectiveLanguage), [effectiveLanguage]);
return (
<div className="min-h-screen bg-black flex flex-col items-center justify-center px-6 pb-24">