<?php
namespace App\Translation;
use Gedmo\Translatable\TranslatableListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class LocaleSubscriber implements EventSubscriberInterface
{
private $defaultLocale;
private $translatableListener;
private $currentLocale;
public function __construct($defaultLocale = 'en', TranslatableListener $translatableListener)
{
$this->defaultLocale = $defaultLocale;
$this->translatableListener = $translatableListener;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
if ($locale = $request->query->get('locale', $this->defaultLocale)) {
$request->setLocale($locale);
}
$this->translatableListener->setTranslatableLocale($request->getLocale());
$this->currentLocale = $request->getLocale();
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => [['onKernelRequest', 200]],
KernelEvents::RESPONSE => ['setContentLanguage']
];
}
public function setContentLanguage(ResponseEvent $event)
{
$response = $event->getResponse();
$response->headers->add(['Content-Language' => $this->currentLocale]);
return $response;
}
}