ユーザーの優先言語を検出し (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') に格納された値を考慮すべきではありませんか? これは正しい動作ですか?どうすればそれを達成できますか?