首页 > 解决方案 > Symfony 3.4 如何设置语言环境

问题描述

使用 symfony 3.4,我使用比symfony 文档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

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

标签: phpsymfonyevent-handlinglocalesymfony-3.4

解决方案


推荐阅读