我正在使用Laravel 5,我有这条路线:
Route::group(['prefix' => '{lang}/', 'middleware' => 'SetLanguage'], function($lang){
//element Show
Route::get('/'.trans('routes.element-container').'/{slugName}', 'ElementController@showByName');
});
我的中间件是:
public function handle($request, Closure $next)
{
if (in_array($request->lang, config('app.all_langs'))){
//exit("SETTING ON ".$request->lang);
App::setLocale($request->lang);
}else{
//exit("SETTING ON en");
App::setLocale('en');
}
return $next($request);
}
如果我取消评论两个退出它是否有效,但是,路由端的“trans”功能不起作用,似乎仅在默认的lang中传输。
为什么在中间件之前调用“trans”函数? 我在“之前”和“之后”进行测试,但没有工作......
答案 0 :(得分:0)
如果我理解正确,你可以考虑这样的事情:
Route::group(['prefix' => '{lang}/', 'middleware' => 'SetLanguage'], function() {
foreach (config('app.all_langs') as $language) {
$translatedRoute = trans('routes.element-container', [], $language);
Route::get("/$translatedRoute/{slugName}", 'ElementController@showByName');
}
});
但是这也将注册例如路线/de/element-container/element-a
。
替代:
foreach (config('app.all_langs') as $language) {
Route::group(['prefix' => $language, 'middleware' => 'SetLanguage'], function() {
$translatedRoute = trans('routes.element-container', [], $language);
Route::get("/$translatedRoute/{slugName}", 'ElementController@showByName');
});
}
这将注册/en/element-container/element-a
和/de/Elemente-Behälter/element-a
,但不注册/de/element-container/element-a