Laravel Language Picker - PullRequest
       20

Laravel Language Picker

0 голосов
/ 10 сентября 2018

Добрый день! Я работаю над проектом Laravel и схожу с ума от выбора языка.

Я установил на app.php locale , который является текущим языком, и массив с именем locales , где у меня есть все языки (испанский и английский сейчас):

'locale' => 'es',

'locales' => [
    'en' => 'English',
    'es' => 'Castellano',
],

Я создал маршрут, к которому пользователь может обратиться, чтобы изменить язык с шаблоном /lang/es или /lang/en таким образом:

Route::get('/lang/{lang}', ['as'=>'lang.switch', 'uses'=>'HomeController@storeLang']);

А вот и функция storeLang :

    public function storeLang($lang){
        $cookie = null;

        if (array_key_exists($lang, Config::get('app.locales'))) {
            $cookie = Cookie::forever('locale', $lang);
            //App::setLocale($lang);
            var_dump(Config::get('app.locale'));
            exit();
        }

        if ($cookie) {
            return Redirect::back()->withCookie($cookie);
        }

        return back(); 
    }
}

Моя идея состояла в том, чтобы проверить, является ли $ lang , который мы передаем, правильным и, если да, создать cookie-файл, который длится вечно с сохраненным языком, но не делает языковой стандарт * Чтобы изменить 1024 *, я полагаю, что мне нужно что-то добавить, потому что этот var_dump не возвращает мне измененный язык, и я не знаю, как сделать cookie для изменения языкового стандарта.

С другой стороны, как вы можете видеть, я прокомментировал App :: setLocale ($ lang) . Я использовал его, и он, кажется, работал, потому что в этом случае var_dump возвращал мне правильный язык, на который я хотел перейти, но в то время, когда я возвращался на страницу, все было со старым язык снова.

Я злюсь на это, было бы здорово получить помощь, спасибо!

1 Ответ

0 голосов
/ 10 сентября 2018

App::setLocale() не является постоянным и устанавливает локаль только для текущего запроса.

Что вы можете сделать, так это установить cookie (как вы уже сделали) и проверить его в middleware . Если есть какой-либо cookie, переключите язык приложения.

...