Laravel setLocale returns 存储值但使用 config.app 默认值

Laravel setLocale returns stored value but use config.app default one

我遇到了一些奇怪的问题...如标题所述...

我正在 post 请求通过设置 lang forever cookie 来更改 lang 值。

之后我检查 cookie 是否存在以及它是否存在 app()->setLocale(\Cookie::get('lang')) 然后使用 {{ app()->getLocale() }} 其中 returns 将 lang 值存储为 enfr.

但页面仍在加载 config/app.php => 'locale'=>'en'...

我可以至少更改 config('app.locale') value to \Cookie::get('lang') 或者你知道这里可能有什么问题吗?

谢谢

更新:

我找到了答案,我需要添加到 views 文件夹中的每个文件 - 新的语言环境值才能检索正确的 lang 内容。我不知道为什么,因为我以前从未遇到过问题,但如果其他人有问题这可能是解决方案。

app()->setLocale('fr') 会将请求期间的语言环境更改为 'fr'。所以如果在设置之后,你调用app()->getLocale(),它会return 'fr'.

如果您的应用程序在某些地方从 config('app.locale') 读取区域设置,您可以像这样随时更改值:

config(['app.locale' => 'fr'])

然后 config('app.locale') 将在请求期间 return 'fr'

可能是您更改了语言环境,但位置不对。你应该使用 app/Providers/AppServiceProvider.php 来做到这一点。

Innside boot 方法你可以添加这样的东西:

$this->app->setLocale(\Cookie::get('lang', 'en')

然后您将始终设置语言 - 当 cookie 设置为来自 cookie 的值时,否则设置为 en

那么在你看来你什么都不用做。您可以只使用:

{{ trans('some.translated') }}

当您在翻译文件中设置翻译时,它会被翻译成有效的语言。