fix(i18n): normalize locale and prevent undefined translations (#914)

* fix(i18n): guard locale input and add safe translation fallback

* refactor(i18n): isolate locale utils and normalize server cookie decode

---------

Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
This commit is contained in:
Xinmin Zeng
2026-02-27 08:10:38 +08:00
committed by GitHub
parent 902ff3b9f3
commit e9adaab7a6
5 changed files with 81 additions and 32 deletions

View File

@@ -1,9 +1,17 @@
import { cookies } from "next/headers";
export type Locale = "en-US" | "zh-CN";
import { normalizeLocale, type Locale } from "./locale";
export async function detectLocaleServer(): Promise<Locale> {
const cookieStore = await cookies();
const locale = cookieStore.get("locale")?.value ?? "en-US";
return locale as Locale;
let locale = cookieStore.get("locale")?.value;
if (locale !== undefined) {
try {
locale = decodeURIComponent(locale);
} catch {
// Keep raw cookie value when decoding fails.
}
}
return normalizeLocale(locale);
}