src/Subscriber/LocaleSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Subscriber;
  4. use App\Event\Application\LanguageChangedEvent;
  5. use App\Service\Context\ContextInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
  10. class LocaleSubscriber implements EventSubscriberInterface
  11. {
  12.     const LANGUAGE_SYMBOL_LENGTH 2;
  13.     private $defaultLocale;
  14.     private EventDispatcherInterface $eventDispatcher;
  15.     private ContextInterface $context;
  16.     public function __construct(
  17.         EventDispatcherInterface $eventDispatcher,
  18.         ContextInterface         $context
  19.     )
  20.     {
  21.         $this->defaultLocale getenv('locale');
  22.         $this->eventDispatcher $eventDispatcher;
  23.         $this->context $context;
  24.     }
  25.     public function onKernelRequest(RequestEvent $event): void
  26.     {
  27.         $request $event->getRequest();
  28.         $locale $this->defaultLocale;
  29.         if ($request->getPreferredLanguage()) {
  30.             $locale $request->getPreferredLanguage();
  31.         } elseif ($request->getSession()->get('_locale'$this->defaultLocale)) {
  32.             $locale $request->getSession()->get('_locale'$this->defaultLocale);
  33.         }
  34.         $language substr($locale0self::LANGUAGE_SYMBOL_LENGTH);
  35.         $this->context->setLanguage(!empty($language) ? mb_strtolower($language) : mb_strtolower(getenv('locale')));
  36.         $this->context->setIsLanguageSet(
  37.             $request->headers->has('Accept-Language') || $request->getSession()->has('_locale')
  38.         );
  39.         $this->eventDispatcher->dispatch(
  40.             new LanguageChangedEvent($locale)
  41.         );
  42.     }
  43.     public static function getSubscribedEvents()
  44.     {
  45.         return [
  46.             KernelEvents::REQUEST => [['onKernelRequest'20]],
  47.         ];
  48.     }
  49. }