Symfony 3.4如何设置语言环境

时间:2019-04-20 19:18:28

标签: php symfony event-handling locale symfony-3.4

使用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 locale and app.request.locale

为什么symfony状态栏中显示的变量与{{ app.request.locale }}中的变量不同?如何在EventListener的树枝模板中设置实际用于翻译的变量?

0 个答案:

没有答案