Store guest user language preference in long-lived cookie
Changes: - LocaleController: Set 1-year cookie when language is changed - SetLocale middleware: Check cookie after session, before default Priority: User DB > Session > Cookie > Default This allows guest users to retain their language preference even after closing the browser (persists for 1 year). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -20,7 +20,7 @@ public function update(Request $request)
|
|||||||
|
|
||||||
$locale = $validated['locale'];
|
$locale = $validated['locale'];
|
||||||
|
|
||||||
// Save to session (works for both authenticated and guest users)
|
// Save to session for immediate effect
|
||||||
$request->session()->put('locale', $locale);
|
$request->session()->put('locale', $locale);
|
||||||
|
|
||||||
// If authenticated, also save to user record for persistence
|
// If authenticated, also save to user record for persistence
|
||||||
@@ -28,6 +28,9 @@ public function update(Request $request)
|
|||||||
Auth::user()->update(['locale' => $locale]);
|
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'));
|
return redirect()->back()->with('success', __('messages.settings.language_updated'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,20 +27,30 @@ class SetLocale
|
|||||||
/**
|
/**
|
||||||
* Handle an incoming request.
|
* 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
|
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||||
*/
|
*/
|
||||||
public function handle(Request $request, Closure $next): Response
|
public function handle(Request $request, Closure $next): Response
|
||||||
{
|
{
|
||||||
$locale = config('app.locale', 'en');
|
$locale = config('app.locale', 'en');
|
||||||
|
|
||||||
// Check authenticated user's preference
|
// Priority 1: Check authenticated user's preference
|
||||||
if (Auth::check() && Auth::user()->locale) {
|
if (Auth::check() && Auth::user()->locale) {
|
||||||
$locale = 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')) {
|
elseif ($request->session()->has('locale')) {
|
||||||
$locale = $request->session()->get('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
|
// Validate locale
|
||||||
if (!array_key_exists($locale, self::SUPPORTED_LOCALES)) {
|
if (!array_key_exists($locale, self::SUPPORTED_LOCALES)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user