diff --git a/src/app/Http/Controllers/LocaleController.php b/src/app/Http/Controllers/LocaleController.php index d3068cd..a4a5f98 100644 --- a/src/app/Http/Controllers/LocaleController.php +++ b/src/app/Http/Controllers/LocaleController.php @@ -20,7 +20,7 @@ public function update(Request $request) $locale = $validated['locale']; - // Save to session (works for both authenticated and guest users) + // Save to session for immediate effect $request->session()->put('locale', $locale); // If authenticated, also save to user record for persistence @@ -28,6 +28,9 @@ public function update(Request $request) Auth::user()->update(['locale' => $locale]); } + // Set long-lived cookie (1 year) for guest users + cookie()->queue('locale', $locale, 525600); // 525600 minutes = 1 year + return redirect()->back()->with('success', __('messages.settings.language_updated')); } } diff --git a/src/app/Http/Middleware/SetLocale.php b/src/app/Http/Middleware/SetLocale.php index 36f80f2..2e01e58 100644 --- a/src/app/Http/Middleware/SetLocale.php +++ b/src/app/Http/Middleware/SetLocale.php @@ -27,20 +27,30 @@ class SetLocale /** * Handle an incoming request. * + * Priority order: + * 1. Authenticated user's database preference + * 2. Session (for immediate effect after changing) + * 3. Cookie (long-term storage for guest users) + * 4. Default locale from config + * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { $locale = config('app.locale', 'en'); - // Check authenticated user's preference + // Priority 1: Check authenticated user's preference if (Auth::check() && Auth::user()->locale) { $locale = Auth::user()->locale; } - // Check session (for immediate effect after changing) + // Priority 2: Check session (for immediate effect after changing) elseif ($request->session()->has('locale')) { $locale = $request->session()->get('locale'); } + // Priority 3: Check cookie (long-term storage for guest users) + elseif ($request->cookie('locale')) { + $locale = $request->cookie('locale'); + } // Validate locale if (!array_key_exists($locale, self::SUPPORTED_LOCALES)) {