Как поменять язык в laravel?
Мне стандартный способ 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>
App::setLocale( $lang ) это для 1 го (запроса) раза.
Мой вариант, в место App::setLocale() надо использовать Cookie или Session. И каждый раз проверять в Middleware значение lang в Cookie или Session и там использовать App::setLocale( $lang ).