Как установить локаль по запросу с помощью symfony 3.4

Я использую symfony 3.4 и хочу установить язык отображения для запроса.

Я попробовал, как описано в документации Symfony со следующим кодом

namespace AppBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;

class EventListener
{
    private $tokenStorage;

    public function __construct(TokenStorageInterface $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
        $request->setLocale('en');
    }
}

но это не влияет на страницу. В строке состояния symfony он по-прежнему показывает мне de_DE как локаль. Я прочитал объяснение в этом посте stackoverflow, но Я чувствую, что я сделал именно то, что там описано. Так что я пропустил?


person Mathias Bader    schedule 19.04.2019    source источник


Ответы (1)


Пользовательский прослушиватель должен вызываться перед LocaleListener, который инициализирует локаль на основе текущего запроса. Для этого установите приоритет слушателя на более высокое значение, чем приоритет LocaleListener (который вы можете получить, выполнив команду debug:event kernel.request). проверьте документацию https://symfony.com/doc/3.4/translation/locale.html

person A.Marwan    schedule 19.04.2019
comment
Это работает. Меня это удивляет, потому что я устанавливал в том же EventListener локаль пользователя (при входе в систему), и это сработало. Так как же это тогда работало? - person Mathias Bader; 19.04.2019
comment
в вашем случае вам нужно было переопределить LocaleListener с вашим пользовательским, установка вашего пользовательского приоритета прослушивателя выше, чем LocaleListener, заставит его изменить локаль - person A.Marwan; 19.04.2019