Кажется, с этим я действительно попал в кроличью нору. Мне поручено внедрить локализацию в проект Laravel с помощью LaravelGettext (так как кажется, что это только один с поддержкой PO-файла). Требования к маршрутизации кажутся довольно простыми, каждый раз, когда URL-адрес страницы называется, например, как это:
https://page.com/user
Например, de
в качестве резервной / кэшированной локали сеанса предполагается перенаправить на:
https://page.com/de/user
, если только действительный префикс локали уже не определен внутри URL-адреса вручную. Предполагается, что каждый последующий URL будет иметь одинаковый префикс локали, если не будет изменен.
Концепция кажется простой, но реализация по мере необходимости превратилась в часы поисков того, как правильно настроить маршруты. Подходит как
routes\web.php
Route::prefix('{locale?}')->middleware('locale')->group(function() {
//all routes go here
});
App\Middleware\Locale
...
public function handle($request, Closure $next) {
$locale = $request->segment(1);
if (!in_array($locale, config('laravel-gettext.supported-locales'))) {
$segments = $request->segments();
$fallback = session('locale') ?: config('laravel-gettext.fallback-locale');
$segments = array_prepend($segments, $fallback);
return redirect()->to(implode('/', $segments));
}
session(['locale' => $locale]);
app()->setLocale($locale);
LaravelGettext::setLocale($locale);
return $next($request);
}
К сожалению,
не работает с URL-адресами, имеющими несколько сегментов, поскольку префикс неправильно их интерпретирует Не рекомендуется также указывать дополнительные префиксы.
Может кто-нибудь порекомендовать мне надежное решение? Я очень расстроен из-за этого.