【发布时间】:2021-03-20 23:42:21
【问题描述】:
编辑:找到我所有问题的答案:https://github.com/codezero-be/laravel-localized-routes(当然还有 42 个)。
我正在开发一个多语言网站,其中 URL 包含本地化字符串。例如:
https://site/en/会员/john-doe
https://site/nl/leden/john-doe
(对于每种语言也是如此)
在 web.php 中,我为我的路线添加了前缀。通过中间件,我设置了当前语言(从第一个 URL 段中检索)。这适用于所有东西(在控制器和刀片中)...除了 route() 生成的 URL。它们始终使用默认语言。即使其他所有内容都已正确本地化。如果我将 app()->getLocale() 转储到刀片控制器中,它会显示正确的语言。只有 route() 函数生成的 URL 始终使用默认的后备语言。
我尝试将我的中间件类在中间件组列表中上移。这并没有什么不同。
web.php
Route::prefix('{lang}')->group(function() {
Route::get(trans('routes.members') . '/{username}/', 'MembersController@profile')
->name('members.show');
}
SetLanguage 中间件
...
public function handle(Request $request, Closure $next)
{
$lang = $request->segment(1) ?? app()->getLocale();
//set app language
app()->setLocale($lang);
//set default url parameter
URL::defaults(['lang' => $lang]);
return $next($request);
}
...
App\Http\Kernel.php
...
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Laravel\Jetstream\Http\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\SetLanguage::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\UserLastSeenAt::class,
],
...
【问题讨论】:
-
我发现这是一个可能的解决方案,但它似乎有点......矫枉过正。如果 route() 函数使用我在调用它之前设置的语言,我很好:) mydnic.be/post/…
标签: laravel localization translation laravel-routing laravel-8