export const FALLBACK_LANG = "zh"; export const SUPPORTED_LANGUAGES = ["zh", "en"] as const; export type AppLanguage = (typeof SUPPORTED_LANGUAGES)[number]; /** Cookie name read by `@unly/universal-language-detector`. */ export const I18N_COOKIE_NAME = "i18next"; export function isAppLanguage(value: unknown): value is AppLanguage { return value === "zh" || value === "en"; } export function normalizeAppLanguage(value: unknown): AppLanguage | null { if (typeof value !== "string") return null; const lower = value.trim().toLowerCase(); if (lower === "zh" || lower.startsWith("zh-")) return "zh"; if (lower === "en" || lower.startsWith("en-")) return "en"; return null; } export function setLanguageCookie(lang: AppLanguage) { if (typeof document === "undefined") return; document.cookie = `${I18N_COOKIE_NAME}=${lang}; Path=/; SameSite=Lax; Max-Age=31536000`; }