tenant preference > session > browser > config default. */ public function handle(Request $request, Closure $next): Response { $locale = null; $calendar = null; // 1. Session preference (highest priority - user just changed it) $locale = session('locale'); $calendar = session('calendar'); // 2. Authenticated user preference (database stored preference) if (!$locale && $request->user()) { $locale = $request->user()->getLocale(); $calendar = $request->user()->getCalendar(); } // 3. Tenant preference if (!$locale && session('tenant_id')) { $tenant = \App\Models\Tenant::find(session('tenant_id')); if ($tenant) { $locale = $locale ?? $tenant->default_locale; $calendar = $calendar ?? $tenant->default_calendar; } } // 4. Browser preference if (!$locale) { $browserLang = substr($request->getPreferredLanguage(), 0, 2); $supportedLocales = config('projectra.supported_locales', ['fa', 'en']); if (in_array($browserLang, $supportedLocales)) { $locale = $browserLang; } } // 5. Config default (lowest priority) if (!$locale) { $locale = config('projectra.default_locale', 'fa'); } if (!$calendar) { $calendar = config('projectra.default_calendar', 'jalali'); } // Set the application locale App::setLocale($locale); // Store in session for subsequent requests session(['locale' => $locale, 'calendar' => $calendar]); // Share locale, direction, and calendar with all views $rtlLocales = config('projectra.rtl_locales', ['fa', 'ar', 'he']); $direction = in_array($locale, $rtlLocales) ? 'rtl' : 'ltr'; view()->share([ 'currentLocale' => $locale, 'currentDirection' => $direction, 'currentCalendar' => $calendar, ]); return $next($request); } }