Sonata Admin Bundle 语言环境

Soanta Admin Bundle Locale

我的翻译有问题。我用

我已经创建了交互式登录侦听器,当用户登录应用程序时,我获得了用户语言环境并设置了会话 _locale,但这在 sonata 中被忽略了。

监听器是

class UserLocaleListener {

 /**
  * @var Session
  */
private $container;


public function __construct(Session $session)
{
    $this->session = $session;
}

public function onInteractiveLogin(InteractiveLoginEvent $event)
{
    $request = $event->getRequest();

    $user = $event->getAuthenticationToken()->getUser();


    if (null !== $user->getLocale()) {
        $this->session->set('_locale', $user->getLocale());
        //$request->setLocale($user->getLocale());
        var_dump($request->getSession()->get('_locale'));
    }
  }
}

在service.yml中添加

app.user_locale_listener:
    class: xxxxxx\xxxxxxxx\EventListener\UserLocaleListener
    arguments: ["@session"]
    tags:
        - { name: kernel.event_listener, event: security.interactive_login,       method: onInteractiveLogin }

我的错误在哪里?

语言环境是根据请求设置的,不会 "stick" ,所以每次请求都会再次成为默认语言环境,除非你这样做:

http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html

Wich 将根据每个请求从会话中获取语言环境,并在当前请求中设置它。

(确保 LocaleListener 的优先级低于您的 UserLocaleListener,以便它在它之后运行)