내가 원하는 것은 사용자 브라우저의 언어를 감지하여 URL에 로케일이 포함 된 페이지로 리디렉션하는 것입니다.로케일을 감지하고 로캘을 포함하도록 URL (리디렉션)을 변경하십시오.
커널 수신기를 등록하는 것이 가장 쉬운 방법이라고 생각했습니다. 그래서 내가 무슨 짓을 :
services:
kernel__request_listener:
class: Me\MainBundle\Listener\KernelRequestListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
calls:
- [ setContainer, [ @service_container ] ]
KernelRequestListener.php
...
/**
* @Service
*/
class KernelRequestListener
{
/**
* @Observe("kernel.request")
*/
public function onKernelRequest(GetResponseEvent $response)
{
if($newLocale = $this->newLocale())
{
$parmArray = $request->get('_route_params');
$parmArray['_locale'] = $newLocale;
$redirectResponse = new RedirectResponse($this->getContainer()->get('router')->generate($request->get('_route'), $parmArray));
$redirectResponse->headers->setCookie(new Cookie('b_locale', $newLocale, time() + 2592000));
$response->setResponse($redirectResponse);
}
}
...
}
방법의 $ this-> 사용자가 다른 언어로 재와 새로운 언어 코드를 반환 할 필요가있는 경우 newLocale()는 단지 감지 (예 : DE 또는 FR).
여기에 문제가 있습니다. jail 파일을 압축하기 위해 assetsics를 사용하고 로케일 기반 라우팅을 수행하기 위해 jms/i18n-routing-bundle을 사용하고 있습니다. 커널 리스너가 로케일을 전환하면 페이지가 js 파일을 계속해서 다시로드하기 시작합니다. 또한 리디렉션이 감지되지 않거나 smthing을 일으키지 않아 리디렉션이 발생하지 않는 여러 페이지 (예 : 프로필러, 로그인/로그 아웃 등)가 있습니다.
커널 수신기가 이러한 리다이렉션을 수행하기에 적합한 장소인가, 아니면 더 좋은 곳입니까? 위의 문제를 해결하는 방법?
! 고마워. 그것에 대한 몇 가지 기본 정보는 [Cookbook] (http://symfony.com/doc/current/book/internals.html#events)에서 찾을 수 있습니다. – madc