{{-- resources/views/partials/lang-switcher.blade.php --}} @php $allLocales = config('app.locales', []); $currentLocale = app()->getLocale(); // On récupère la route courante + ses paramètres $currentRouteName = \Illuminate\Support\Facades\Route::currentRouteName(); $currentParams = \Illuminate\Support\Facades\Route::current()?->parameters() ?? []; // La locale est-elle un paramètre attendu par la route courante ? $routeExpectsLocale = array_key_exists('locale', $currentParams); // Helper pour fabriquer l'URL localisée de la page courante. // Priorités : // - si la route a un paramètre {locale} -> on remplace juste // - sinon, si tu as un helper lr() dispo -> on l’essaie // - sinon, fallback basique: /{locale} $urlFor = function (string $code) use ($currentRouteName, $currentParams, $routeExpectsLocale) { try { if ($currentRouteName) { $params = $currentParams; if ($routeExpectsLocale) { $params['locale'] = $code; return route($currentRouteName, $params); } // Si ta base utilise un helper lr() pour les routes localisées, on essaie if (function_exists('lr')) { return lr($currentRouteName, $params + ['locale' => $code]); } // Route nommée sans {locale} → tente quand même return route($currentRouteName, $params); } } catch (\Throwable $e) { // on tombe sur le fallback } // Fallback minimal : racine locale return url('/'.$code); }; @endphp