Laravel构建多郎路线系统

时间:2017-06-28 08:13:58

标签: laravel laravel-5 multilingual

我正在使用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”函数? 我在“之前”和“之后”进行测试,但没有工作......

1 个答案:

答案 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