Задать вопрос

Как поменять язык в 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();
	}

И язык не меняется, в чем проблема?
  • Вопрос задан
  • 3897 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 2
@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 ).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы