Мне стандартный способ Laravel не понравился.
Надо писать фильтр, функцию, роут, меню.
Решил использовать
Laravel Localization
Все подробно описано, все функции написаны. Просто вставить.
Но если интересно, то вот как работало стандартными средствами:
Middleware:
public function handle($request, Closure $next)
{
$language = Request::cookie('lang', Config::get('app.locale'));
App::setLocale($language);
return $next($request);
}
Route:
Route::group([ 'middleware' => ['maintenance_mode', 'locale']], function()
{
//Change language
Route::get('set_lang/{id}', ['as' => 'set_lang', 'uses' => 'HomeController@set_lang']);
}
Controller:
public function set_lang($id){
$response = new \Illuminate\Http\Response('Set Lang');
return $response->withCookie(cookie()->forever('lang', $id));
}
Само меню переключения во View:
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
{{ trans('main.'.config('app.locales')[Config::get('app.locale')]) }} <i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu dropdown-langs">
@foreach(config('app.locales') as $k=>$val)
@if(config('app.locale') != $k)
<li><a href="{{ route('set_lang', ['id' = $k]) }}"> {{ trans('main.'.$val) }}</a></li>
@endif
@endforeach
</ul>
<!-- /.dropdown-user -->
</li>