src/EventSubscriber/LocaleSubscriber.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Form\Model\Settings;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. class LocaleSubscriber implements EventSubscriberInterface
  11. {
  12.     /**
  13.      * LocaleSubscriber constructor.
  14.      */
  15.     public function __construct(
  16.         protected UsageTrackingTokenStorage $tokenStorage,
  17.         protected TranslatorInterface $translator,
  18.         private string $defaultLocale 'en'
  19.     ) {
  20.     }
  21.     public function onKernelRequest(RequestEvent $event): void
  22.     {
  23.         $route $event->getRequest()->get('_route');
  24.         if ('front' != substr((string) $route05)) {
  25.             $settings = new Settings();
  26.             $request  $event->getRequest();
  27.             if (!$request->hasPreviousSession()) {
  28.                 return;
  29.             }
  30.             $locale $request->attributes->get('_locale');
  31.             /** @var UserInterface $user */
  32.             $user $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
  33.             if (null !== $user && 'anon.' != $user) {
  34.                 if (method_exists($user'getPreferredLanguage') && $user->getPreferredLanguage()) {
  35.                     $locale $user->getPreferredLanguage();
  36.                 } else {
  37.                     $locale $settings->getPreferredLanguage();
  38.                 }
  39.             }
  40.             if ($locale != $request->attributes->get('_locale')) {
  41.                 $request->getSession()->set('_locale'$locale);
  42.                 $request->setLocale($locale);
  43.                 $this->translator->setLocale($locale);
  44.             } else {
  45.                 $request->setLocale($request->getSession()->get('_locale'$this->defaultLocale));
  46.             }
  47.         }
  48.     }
  49.     public static function getSubscribedEvents(): array
  50.     {
  51.         return [
  52.             KernelEvents::REQUEST => [['onKernelRequest'1]],
  53.         ];
  54.     }
  55. }