src/EventListener/LocaleListener.php line 60

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Sylius\Bundle\ShopBundle\Locale\LocaleSwitcherInterface;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  7. use Symfony\Component\Routing\RequestContextAwareInterface;
  8. class LocaleListener
  9. {
  10.     /** @var LocaleSwitcherInterface */
  11.     private $localeSwitcher;
  12.     private $container;
  13.     private $request;
  14.     private $router;
  15.     const LOCALES = array(
  16.         'ro',
  17.         'en',
  18.         'tr',
  19.         'hu',
  20.         'bg',
  21.         'de',
  22.         'it',
  23.         'ru',
  24.         'tr',
  25.         'pl',
  26.         'uk',
  27.         'fr',
  28.         'nl',
  29.         'cs',
  30.         'sr',
  31.         'sk',
  32.         'es',
  33.         'el',
  34.         'hr',
  35.         'sv',
  36.         'no',
  37.     );
  38.     public function __construct(
  39.         LocaleSwitcherInterface $localeSwitcher,
  40.         RequestStack $requestStack,
  41.         ContainerInterface $container,
  42.         RequestContextAwareInterface $router
  43.     ) {
  44.         $this->request $requestStack->getCurrentRequest();
  45.         $this->localeSwitcher $localeSwitcher;
  46.         $this->container $container;
  47.         $this->router $router;
  48.     }
  49.     public function onKernelRequest(GetResponseEvent $event)
  50.     {
  51.         $session $this->request->getSession();
  52.         $localeCode 'ro';
  53.         if ($session->has('localeCode')) {
  54.             $localeCode $session->get('localeCode');
  55.         }
  56.         if ($this->request->get('_locale')) {
  57.             $localeCode $this->request->get('_locale');
  58.             $session->set('localeCode'$localeCode);
  59.         }
  60.         $localeCode LocaleListener::checkIfGiveLocaleIsValid($localeCode) ? $localeCode 'ro';
  61.         $this->container->get('translator')->setLocale($localeCode);
  62.         $this->request->getSession()->set('_locale'$localeCode);
  63.         $this->request->setLocale($localeCode);
  64.         $this->request->setDefaultLocale($localeCode);
  65.         $this->localeSwitcher->handle($this->request$localeCode);
  66.         $this->router->getContext()->setParameter('_locale'$localeCode);
  67.     }
  68.     public static function checkIfGiveLocaleIsValid($locale)
  69.     {
  70.         $isValid false;
  71.         if (ctype_alpha($locale) && in_array($localeLocaleListener::LOCALES)) {
  72.             $isValid true;
  73.         }
  74.         return $isValid;
  75.     }
  76. }