使用symfony 3.4,我使用symfony docs中描述的优先级高于LocaleListener
的事件侦听器设置区域设置:
namespace AppBundle\EventListener;
use AppBundle\Component\Common;
use AppBundle\Entity\Client;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class EventListener
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function onKernelRequest(GetResponseEvent $event)
{
if ($this->entityManager !== null) {
$client = Common::getClient($this->entityManager);
$event->getRequest()->setLocale($client->getDefaultLocale());
}
}
}
据我所知,为了使用树枝模板获取语言环境,我使用
{{ app.request.locale }}
会输出我通过EventListener设置的语言环境(即en
)。但是,我还在我登录页面的getDisplayLocale()
对象上实现了Member
方法。这里的想法是,如果没有登录,则应使用客户端的默认语言环境(如果已登录),则应使用成员的语言环境。现在,成员区域设置为de
。
我现在不明白的是,该页面实际上是用德语呈现的,而symfony状态栏显示的是德语,甚至认为树枝模板变量{{ app.request.locale }}
显示的是en
:
为什么symfony状态栏中显示的变量与{{ app.request.locale }}
中的变量不同?如何在EventListener的树枝模板中设置实际用于翻译的变量?