Laravel 8 route()不本地化字符串



编辑:找到了我所有问题的答案: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。它们始终使用默认语言。即使其他所有内容都已正确本地化。如果我转储应用程序((->getLocale((在blade的控制器中显示正确的语言。只有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' => [
AppHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
LaravelJetstreamHttpMiddlewareAuthenticateSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::class,
AppHttpMiddlewareVerifyCsrfToken::class,
AppHttpMiddlewareSetLanguage::class,
IlluminateRoutingMiddlewareSubstituteBindings::class,
AppHttpMiddlewareUserLastSeenAt::class,
],
...

得到了(在朋友的帮助下(

在AppServiceProvider的引导功能中,我添加了

public function boot(Request $request)
{
//set app language
app()->setLocale($request->segment(1) ?? app()->getLocale());
}

&SetLanguage中间件现在只包含

public function handle(Request $request, Closure $next)
{
//set default url parameter
URL::defaults(['lang' => app()->getLocale()]);
return $next($request);
}

成功了!

最新更新