Soanta Admin Bundle Locale

时间:2015-10-01 16:25:51

标签: symfony sonata-admin

我的翻译问题。我用

  • symfony 2.7
  • sonata admin-bundle 2.3

我创建了交互式登录监听器,当用户登录应用程序时,我获得了用户区域设置并设置了会话_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 }

我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

语言环境在请求中设置,并且不会“粘住”,因此每次请求它都将是默认值,除非您执行以下操作:

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

将在每个请求中,从会话中获取区域设置,并将其设置为当前请求。

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