6

ユーザーの優先言語を検出し (Accept-Language ヘッダーを考慮して)、それをセッションに保存して、すべてのリクエストをチェックしないようにする LocaleListener を実装しようとしています。これを実現するために、以下のコードを開発しました。

public function onKernelRequest(GetResponseEvent $event) {
    $request = $event->getRequest();

    if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
        return;
    }

    $preferredLocale = $request->getPreferredLanguage($this->availableLocales);

    if ($this->container->has('session')) {
        $session = $this->container->get('session');
        if (!$session->has('_locale')) {
            $session->set('_locale', $preferredLocale);
        }
    } else {
        $request->setLocale($preferredLocale);
    }
}

コードは機能しており、優先言語はセッションに保存されていますが、symfony は文字列を翻訳するためにセッションに保存されているロケールを考慮していません。私の場合、優先言語は「pt_BR」で、エスケープすると:

{{ app.request.locale }}

symfony は 'en' をエスケープしています。symfony はリクエストロケールを定義するために session('_locale') に格納された値を考慮すべきではありませんか? これは正しい動作ですか?どうすればそれを達成できますか?

4

2 に答える 2