2017-06-28 13 views
0

イムを構築し、私はこのルートを持っている:LaravelはマルチLANGルートシステムにLaravel 5を使用して

Route::group(['prefix' => '{lang}/', 'middleware' => 'SetLanguage'], function($lang){ 
//element Show 
    Route::get('/'.trans('routes.element-container').'/{slugName}', '[email protected]'); 
}); 

私のミドルウェアがこれです:私はアンコメントしている場合、それが動作する2つの終了

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に見えます。

ミドルウェアの前に「trans」関数が呼び出されているのはなぜですか? 私は「前」と「後」でテストを持っていますが、私が正しくあなたを理解している場合何の仕事は...

+0

は、なぜあなたはちょうどElementController @ showByNameルートから言語を取得しないと、上の翻訳の代わりにそこにそれを翻訳しますルート宣言? – TheFallen

+0

マルチルートルートのため、例: http://www.example.com/en/element-container/element-a http://www.example.com/de/Elemente-Behälter/element -a – MeisterC

+0

私はあなたの問題を今見ます。関数 'trans()'はミドルウェアの前に常に呼び出されるので、私が考えることのできる1つのオプションは、あなたが持っている言語と同じくらい多くの時間を宣言したり、言語を受け取るコントローラメソッドを持ったり、ルートを翻訳したりその言語に応じて正しい名前のルートにリダイレクトします。 – TheFallen

答えて

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}", '[email protected]'); 
    } 
}); 

をしかし、これはまたのためにルートを登録します例えば/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}", '[email protected]'); 
    }); 
} 

この/en/element-container/element-a登録し/de/Elemente-Behälter/element-aではなく/de/element-container/element-a

+0

に変換できませんでした"Request :: segment(1)"を使用してコントローラから手動で取得する必要がありました:悪いメソッド.. :( ここで私のルート: foreach(config $ lang/*、 'middleware' => 'SetLanguage' * /])を使用して、 ( "/" slugName)"、['uses' => 'ElementController @ showByName(){0} {0}は、 ']); }); } – MeisterC

関連する問題