php - 拉维尔;如何使 setLocale 永久化?

标签 php laravel laravel-5

我有我的家路线

Route::get('/', 'HomeController@index')->name('home');

以及更改语言的特定途径

Route::get('/setLocale/{locale}', 'HomeController@setLocale')->name('setLocale');

HomeController->setLocale($locale) 中,我检查 $locale 是否是一个有效的语言环境,然后简单地做

\App::setLocale($locale);

然后重定向到主页。

在这里,在 HomeController->index() 中,我使用

验证语言环境
$locale = \App::getLocale();

问题是在用户更改语言环境后,应用程序设置了新的语言环境,重定向,但检测到的语言环境仍然是默认语言环境,而不是用户设置的新语言环境。

我如何/在何处/何时可以对应用区域设置进行持久化更改?

我认为 Laravel 在使用 setLocale 时设置了区域设置 cookie 或其他东西,并在使用 getLocale 时重新读取它,但现在我认为这不是 Laravel 的工作方式。

我再问一次:如何设置应用区域设置以便在页面更改后保留?

最佳答案

我是通过使用中间件来做到这一点的。这是我的代码:

语言中间件:

public function handle($request, Closure $next)
{
    if(session()->has('locale'))
        app()->setLocale(session('locale'));
    else 
        app()->setLocale(config('app.locale'));

    return $next($request);
}

记得注册你的中间件:)

用户可以通过简单的 GET-Route 更改语言:

Route::get('/lang/{key}', function ($key) {
    session()->put('locale', $key);
    return redirect()->back();
});

希望对你有帮助:)

显然,Laravel 7.0 中有一些变化!

如果您使用上面的代码,请将 BeforeMiddleware 更改为 AfterMiddleware! (参见 https://laravel.com/docs/7.x/middleware)

如果不这样做,session('locale') 的值将始终为 null!

关于php - 拉维尔;如何使 setLocale 永久化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44456027/

相关文章:

javascript - 如何获取托管我的 iframe 的网站的 url

php - 你能在不使用 Laravel 5 在数据库中创建条目的情况下填充 Eloquent 模型吗

php - Laravel 查询 - 按计数排序

php - 如何在 Image_Canvas PHP PEAR 包中裁剪图像

javascript - XAMPP 返回错误 "Unexpected end of JSON input"

php - Laravel 需要获取每条评论的用户名

php - 在 Codeception Functional Cept 中设置预期异常

php - Vagrant "No input file specified."

validation - 使用闭包进行 Laravel 验证

PHP - 通过引用传递可变数量的参数