Как поменять язык в laravel?

У меня на сайте есть выпадающее меню с выбором языка
<ul>
     <li><a href="/language/en">English</a></li>
     <li><a href="/language/ru">Русский</a></li>
</ul>

Routes перенаправляет на контроллер в котором изменение языка реализовал так:
public function language( $lang ){
	App::setLocale( $lang );
	return redirback();
	}

И язык не меняется, в чем проблема?
  • Вопрос задан
  • 3762 просмотра
Решения вопроса 2
halenharper
@halenharper
Любознательный
Мне стандартный способ 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>
Ответ написан
Комментировать
zvermafia
@zvermafia
WebDev
App::setLocale( $lang ) это для 1 го (запроса) раза.
Мой вариант, в место App::setLocale() надо использовать Cookie или Session. И каждый раз проверять в Middleware значение lang в Cookie или Session и там использовать App::setLocale( $lang ).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы