【问题标题】:Laravel Language PickerLaravel 语言选择器
【发布时间】:2019-02-15 04:49:17
【问题描述】:

美好的一天! 我一直在做一个 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 与所存储的语言一起永久存在,但它没有制作 语言环境 要更改,我想我必须添加一些内容,因为这个 var_dump 没有返回我更改的语言,而且我不知道如何使 cookie 更改语言环境。

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

我对此感到很生气,如果能得到一些帮助会非常好,谢谢!

【问题讨论】:

    标签: php laravel language-switching


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答!如果我在函数上初始化 cookie,我真的不明白为什么需要中间件来查看是否有任何 cookie。无论如何,我看到我想在 var_dump 上更改的语言并不意味着 cookie 存在?也许你指的是另一件事?另一方面,我发现了这个glutendesign.com/posts/…,他们正在制作一个中间件,你认为它有用吗?谢谢!
    • 在帖子中,您只是提供了一切正常,除非会话到期,您的应用会忘记用户的偏好。 Cookie 用于提醒应用用户喜欢哪种语言。
    • 在您的代码中,您为用户设置了 cookie,这很好。中间件是在下一次请求时切换语言所必需的。
    • 好的,感谢您仍然帮助我!问题是,现在用户转到 URL,cookie 设置为所选语言。但是在中间件上,如果我尝试从 cookie 中获取“语言环境”,我只会收到一个长字符串而不是语言(我想是 cookie 本身的加密),如果我让中间件从用户 HTTP 请求,将永远不允许更改对语言有用但对用户无用的语言...
    • 它终于可以工作了,但是在更新作曲家时,我在解密“locale”的 cookie 值时遇到错误,我没有找到任何可以正确解密该值的东西...
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多