diff --git a/frontend/src/components/language-switcher.tsx b/frontend/src/components/language-switcher.tsx index 9fe58e7..d0d9e41 100644 --- a/frontend/src/components/language-switcher.tsx +++ b/frontend/src/components/language-switcher.tsx @@ -34,7 +34,7 @@ export function LanguageSwitcher() { setLocale(l.code)} - className="flex items-center gap-2" + className="flex items-center gap-2 cursor-pointer" > {l.flag} {l.name} diff --git a/frontend/src/lib/i18n.tsx b/frontend/src/lib/i18n.tsx index f80a6da..5d4bed1 100644 --- a/frontend/src/lib/i18n.tsx +++ b/frontend/src/lib/i18n.tsx @@ -66,6 +66,17 @@ export function I18nProvider({ children }: { children: ReactNode }) { return value; }, [locale]); + // Sync from localStorage on mount to handle hydration mismatch or initial load + useEffect(() => { + if (typeof window !== 'undefined') { + const stored = localStorage.getItem(localeStorageKey); + if (stored && stored in dictionaries && stored !== locale) { + console.log('[I18n] Restoring locale from storage:', stored); + setLocale(stored as Locale); + } + } + }, []); + useEffect(() => { if (typeof window === 'undefined') return; localStorage.setItem(localeStorageKey, locale);