Hello everyone,
I am writing because I currently have a bug, namely when the language is changed, the 'de' language is taken no matter what was set. I even know the reason, because my URL /about/team looks like this. The language is always forcibly set as 1. so /en/about/team. And that's fine.
Now the problem is that even if I save the locale in the app() or session(), it should try to access it, it does not work.
I know the code below is messy, it's just because every route of mine uses {locale?} except for a few and POST requests.
SetLocale Middleware
public function handle(Request $request, Closure $next): Response
{
if ($request->is('sanctum/csrf-cookie')) {
return $next($request);
}
if ($request->segment(1) === 'auth') {
if ($request->segment(2) === 'redirect') {
return $next($request);
} else if ($request->segment(2) === 'callback') {
return $next($request);
};
}
if ($request->segment(1) === 'process') {
return $next($request);
}
if ($request->segment(1) === 'assets') {
return $next($request);
}
if ($request->segment(1) === 'api') {
return $next($request);
}
if ($request->isMethod('post')) {
return $next($request);
}
$locale = $request->segment(1);
if (in_array($locale, ['de', 'en'])) {
app()->setLocale($locale);
session()->put('locale', $locale);
} else {
if (session()->has('locale')) {
return redirect(session('locale') . $request->getPathInfo());
}
return redirect('de' . $request->getPathInfo());
}
return $next($request);
}
LanguageChanger:
public function setLocale($locale)
{
$previousUrl = url()->previous();
preg_match('/\/(de|en)(\/|$)/', $previousUrl, $matches);
$currentLocale = $matches[1] ?? config('app.locale');
$newPreviousUrl = preg_replace("/\/$currentLocale(\/|$)/", "/$locale", $previousUrl, 1);
session()->put('previous_url', $newPreviousUrl);
session()->put('locale', $locale);
app()->setLocale($locale);
return redirect()->to(session('previous_url'));
}```