1

再会!我一直在做一个 Laravel 项目,我对语言选择器很生气。

我已经设置app.php了当前语言的语言环境和一个名为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,但它不会改变语言环境,我想我必须添加一些东西,因为这个var_dump 没有返回我更改的语言,我不知道如何使 cookie 更改语言环境。

另一方面,如您所见,我对App::setLocale($lang)进行了评论。我已经使用过它并且它似乎可以工作,因为在这种情况下,var_dump正在返回我想要更改为的正确语言,但当时返回页面时它又是旧语言。

我对此感到很生气,希望能得到一些帮助,谢谢!

4

1 回答 1

3

App::setLocale()不是持久的,并且仅为当前请求设置区域设置。

你可以做的是你可以设置 cookie (就像你已经做过的那样)并在中间件中检查它。如果有任何 cookie,则切换应用程序语言。

于 2018-09-10T18:18:58.517 回答