diff --git a/Modules/Localization/Http/Middleware/SetLocale.php b/Modules/Localization/Http/Middleware/SetLocale.php index 9312377..1d93a23 100644 --- a/Modules/Localization/Http/Middleware/SetLocale.php +++ b/Modules/Localization/Http/Middleware/SetLocale.php @@ -1,19 +1,53 @@ route('locale') ?: $request->session()->get(config('localization.session_key')); - if (! $code) { $code = Locale::query()->where('is_default', true)->value('code') ?: config('localization.default_locale'); } - if (Locale::query()->where('code', $code)->where('is_active', true)->exists()) { - app()->setLocale($code); - $request->session()->put(config('localization.session_key'), $code); + $sessionKey = (string) config('localization.session_key', 'locale'); + $fallback = (string) config('localization.default_locale', config('app.locale', 'en')); + + $code = $request->route('locale'); + + if (! $code && $request->hasSession()) { + $code = $request->session()->get($sessionKey); } + + if (! Schema::hasTable('locales')) { + app()->setLocale(is_string($code) && $code !== '' ? $code : $fallback); + + return $next($request); + } + + if (! $code) { + $code = Locale::query() + ->where('is_default', true) + ->value('code') ?: $fallback; + } + + $isActive = Locale::query() + ->where('code', $code) + ->where('is_active', true) + ->exists(); + + if ($isActive) { + app()->setLocale((string) $code); + + if ($request->hasSession()) { + $request->session()->put($sessionKey, $code); + } + } else { + app()->setLocale($fallback); + } + return $next($request); } } diff --git a/modules_statuses.json b/modules_statuses.json index a1d1713..f367ed8 100644 --- a/modules_statuses.json +++ b/modules_statuses.json @@ -38,6 +38,7 @@ "Api": true, "Enterprise": true, "Commerce": true, + "Products": true, "Security": true, "Automation": true, "AI": true,