<?php
namespace App\EventSubscriber;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class LocaleSubscriber implements EventSubscriberInterface
{
private $defaultLocale;
private $logger;
public function __construct(string $defaultLocale = 'en', LoggerInterface $logger)
{
$this->defaultLocale = $defaultLocale;
$this->logger = $logger;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
$language = $request->cookies->get('language');
$request->setLocale($this->getLocale($language));
}
public static function getSubscribedEvents()
{
return [
// must be registered before (i.e. with a higher priority than) the default Locale listener
KernelEvents::REQUEST => [['onKernelRequest', 20]],
];
}
private function getLocale($language)
{
switch ($language) {
case 'Spanish' :
$lang = "es";
break;
case 'Romanian' :
$lang = "ro";
break;
case 'Finnish' :
$lang = "fi";
break;
case 'Basque' :
$lang = "vas";
break;
default:
$lang = $this->defaultLocale;
break;
}
return $lang;
}
}