From 315ee1408784ce25310d7f1e83a95a26953a6d54 Mon Sep 17 00:00:00 2001 From: songtianlun Date: Fri, 1 Aug 2025 22:34:06 +0800 Subject: [PATCH] fix language switch --- src/components/ui/language-toggle.tsx | 18 ++++++++++++------ src/i18n/config.ts | 10 +++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/components/ui/language-toggle.tsx b/src/components/ui/language-toggle.tsx index 10ce898..a45fafb 100644 --- a/src/components/ui/language-toggle.tsx +++ b/src/components/ui/language-toggle.tsx @@ -33,11 +33,14 @@ export function LanguageToggle({ variant = 'dropdown', showLabel = true }: Langu }, []) const changeLanguage = (locale: string) => { - // Set cookie + // Clear existing locale cookie first + document.cookie = `locale=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; samesite=lax` + + // Set new locale cookie document.cookie = `locale=${locale}; path=/; max-age=${60 * 60 * 24 * 365}; samesite=lax` - // Reload page to apply new locale - window.location.reload() + // Force reload to apply new locale + window.location.href = window.location.href } if (variant === 'button') { @@ -122,11 +125,14 @@ export function MobileLanguageToggle() { }, []) const changeLanguage = (locale: string) => { - // Set cookie + // Clear existing locale cookie first + document.cookie = `locale=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT; samesite=lax` + + // Set new locale cookie document.cookie = `locale=${locale}; path=/; max-age=${60 * 60 * 24 * 365}; samesite=lax` - // Reload page to apply new locale - window.location.reload() + // Force reload to apply new locale + window.location.href = window.location.href } return ( diff --git a/src/i18n/config.ts b/src/i18n/config.ts index 26d70f1..a9ba498 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -42,20 +42,20 @@ export default getRequestConfig(async () => { let locale: Locale = defaultLocale; - // Parse locale from cookies + // Parse locale from cookies first (user preference takes priority) if (cookieHeader) { const cookies = cookieHeader.split(';'); const localeCookie = cookies.find(cookie => cookie.trim().startsWith('locale=')); if (localeCookie) { - const localeValue = localeCookie.split('=')[1]; - if (locales.includes(localeValue as Locale)) { + const localeValue = localeCookie.split('=')[1]?.trim(); + if (localeValue && locales.includes(localeValue as Locale)) { locale = localeValue as Locale; } } } - // If no locale found in cookies, detect from headers - if (locale === defaultLocale) { + // Only detect from headers if no valid cookie found + if (!cookieHeader || !cookieHeader.includes('locale=')) { locale = await getLocaleFromHeaders(); }