feat(i18n): auto-detect browser language for default locale selection

Use navigator.languages to detect the user's preferred language and
automatically select the matching locale (zh/ja/en) on first visit,
falling back to English when no match is found.
This commit is contained in:
kite 2026-06-29 16:43:04 +08:00
parent dc30b81ad6
commit 86d474c5d7

View file

@ -16,12 +16,24 @@ const LanguageContext = createContext<LanguageContextValue | null>(null);
const STORAGE_KEY = 'ocr-lang';
const SUPPORTED_LANGUAGES: Language[] = ['en', 'zh', 'ja'];
function detectBrowserLanguage(): Language | null {
try {
for (const lang of navigator.languages ?? [navigator.language]) {
const code = lang.toLowerCase().split('-')[0];
if (SUPPORTED_LANGUAGES.includes(code as Language)) return code as Language;
}
} catch {}
return null;
}
function getInitialLanguage(): Language {
try {
const stored = localStorage.getItem(STORAGE_KEY);
if (stored === 'en' || stored === 'zh' || stored === 'ja') return stored;
if (stored && SUPPORTED_LANGUAGES.includes(stored as Language)) return stored as Language;
} catch {}
return 'en';
return detectBrowserLanguage() ?? 'en';
}
export const LanguageProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {