Laravel 语言选择器

Laravel Language Picker

美好的一天! 我一直在做一个 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,该 cookie 会永久保存所存储的语言,但它不会制作要更改的 locale,我想我必须添加一些内容,因为 var_dump 并没有 return 告诉我语言已更改,我不知道如何更改使 cookie 更改语言环境。

另一方面,如您所见,我对 App::setLocale($lang) 进行了评论。我已经使用过它并且它似乎有效,因为在这种情况下 var_dump 是 return 向我提供了我想要更改为的正确语言,但是在return 到页面的时间又是旧语言。

我对此很生气,能得到一些帮助真是太好了,谢谢!

App::setLocale() 不是永久性的,仅为当前请求设置语言环境。

您可以设置 cookie(正如您已经完成的那样)并在 middleware 中检查它。如果有任何cookie,则切换应用程序语言。