당신이 JMSI18nRoutingBundle 같은 다른 번들에 당신은, 예를 들어 심포니의 이벤트 시스템를 숙지해야 의존하지 않으려면 HttpKernel에서 읽을 수 있습니다.
귀하의 경우에는 kernel.request
이벤트에 연결하고 싶습니다.
일반적인 용도 : 요청에 정보를 추가하거나 시스템의 일부를 초기화하거나 가능한 경우 응답 (예 : 액세스를 거부하는 보안 계층)을 반환합니다.
사용자 정의 EventListener에서 해당 이벤트를 수신하여 라우터에서 사용되는 요청 객체에 정보를 추가 할 수 있습니다. 그것은이 같은 것을 볼 수 있었다 :
class LanguageListener implements EventSubscriberInterface
{
private $supportedLanguages;
public function __construct(array $supportedLanguages)
{
if (empty($supportedLanguages)) {
throw new \InvalidArgumentException('At least one supported language must be given.');
}
$this->supportedLanguages = $supportedLanguages;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => ['redirectToLocalizedHomepage', 100],
];
}
public function redirectToLocalizedHomepage(GetResponseEvent $event)
{
// Do not modify sub-requests
if (KernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
return;
}
// Assume all routes except the frontpage use the _locale parameter
if ($event->getRequest()->getPathInfo() !== '/') {
return;
}
$language = $this->supportedLanguages[0];
if (null !== $acceptLanguage = $event->getRequest()->headers->get('Accept-Language')) {
$negotiator = new LanguageNegotiator();
$best = $negotiator->getBest(
$event->getRequest()->headers->get('Accept-Language'),
$this->supportedLanguages
);
if (null !== $best) {
$language = $best->getType();
}
}
$response = new RedirectResponse('/' . $language);
$event->setResponse($response);
}
}
이 리스너는 요청의 Accept-Language
헤더를 확인하고 최적의 로케일을 결정하기 위해 협상 \의 LanguageNegotiator을 사용합니다. 사용 문을 추가하지 않았으므로주의해야하지만 상당히 명확해야합니다.
고급 버전의 경우 JMSI18nRoutingBundle에서 LocaleChoosingListener의 소스를 읽을 수 있습니다.
이 작업은 일반적으로 프론트 페이지에서만 필요하므로 게시 된 예제와 JMSBundle의 예제는 다른 모든 경로를 제외합니다. https://symfony.com/doc/current/session/locale_sticky_session.html 을 :
https://symfony.com/doc/current/translation/locale.html#the-locale-and-the-url
는 심포니 문서는 어떻게 로케일을 읽고 리스너를 사용하여 세션에서이 끈적 만드는 예제를 포함 문서에 설명 된대로 사람들을 위해 당신은 특별한 매개 변수 _locale
을 사용할 수 있습니다 이 예제는 services.yml에 리스너를 등록하는 방법을 보여준다.
'JMSI18nRoutingBundle'을 사용해보십시오. 또한'Accept-Language' 요청 헤더를 수동으로 분석 할 수 있습니다. –