【发布时间】:2018-04-24 20:23:07
【问题描述】:
我正在尝试在 Symfony 2.7 项目中使用语言环境。
如果用户未通过身份验证,我想将语言环境设置为$request->getPreferredLanguage(),如果用户通过身份验证并设置了他的首选语言环境,我想将其设置为$user->getLocale()。
我读过类似这样的不同帖子:https://gist.github.com/Dattaya/1670163/450a8054d84b30c16174a75eb60f139e2602cdea
但我在setLocaleForUnauthenticatedUser() 中遇到问题,因为我无法将语言环境设置为undefined。
这是我的config.yml 文件:
parameters:
locale: "undefined"
session:
storage:
options:
name: app_sess
framework:
translator: { fallback: "undefined" }
default_locale: "%locale%"
secret: "%secret%"
我定义了服务:
acme.locale.interactive_login_listener:
class: acme\GeneralBundle\EventListener\LocaleListener
calls:
- [ setSession, [@session] ]
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: setLocaleForAuthenticatedUser }
acme.locale.kernel_request_listener:
class: acme\GeneralBundle\EventListener\LocaleListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: setLocaleForUnauthenticatedUser, priority: 17 }
方法如下:
public function setLocaleForUnauthenticatedUser(GetResponseEvent $event)
{
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}
$request = $event->getRequest();
file_put_contents('test.txt', $request->getLocale(), FILE_APPEND);
if ($request->getLocale() === 'undefined' ) {
$request->setLocale($request->getPreferredLanguage());
}
}
在此代码中,$request->getLocale() 不是undefined,而是en。
我不明白为什么。有人可以帮帮我吗?
【问题讨论】:
-
您在
parameters下的locale行实际上是否正确缩进?因为现在贴出来,不是parameters下的孩子 -
抱歉,这是一个错误的复制/粘贴,但在我的文件中缩进得很好
-
如果你在 config.yml 中设置 fr 而不是 "undefined" 会发生什么?将 $request->getLocale() "en" 吗?
-
我试过了,文件里写了“en”,但是网站是法语的(选择法语翻译)
-
会不会是优先级的原因?这很奇怪,因为当我将语言环境设置为未定义时,找到了任何翻译(网站充满了翻译键),当我将其设置为法语时,网站是法语的。似乎考虑了语言环境变量但不在
$request->getLocale()
标签: php symfony listener locale