vendor/symfony/http-kernel/EventListener/TranslatorListener.php line 45

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <[email protected]>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\HttpKernel\EventListener;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
  15. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  16. use Symfony\Component\HttpKernel\KernelEvents;
  17. use Symfony\Component\Translation\TranslatorInterface;
  18. use Symfony\Contracts\Translation\LocaleAwareInterface;
  19. /**
  20.  * Synchronizes the locale between the request and the translator.
  21.  *
  22.  * @author Fabien Potencier <[email protected]>
  23.  */
  24. class TranslatorListener implements EventSubscriberInterface
  25. {
  26.     private $translator;
  27.     private $requestStack;
  28.     /**
  29.      * @param LocaleAwareInterface $translator
  30.      */
  31.     public function __construct($translatorRequestStack $requestStack)
  32.     {
  33.         if (!$translator instanceof TranslatorInterface && !$translator instanceof LocaleAwareInterface) {
  34.             throw new \TypeError(sprintf('Argument 1 passed to %s() must be an instance of %s, %s given.'__METHOD__LocaleAwareInterface::class, \is_object($translator) ? \get_class($translator) : \gettype($translator)));
  35.         }
  36.         $this->translator $translator;
  37.         $this->requestStack $requestStack;
  38.     }
  39.     public function onKernelRequest(GetResponseEvent $event)
  40.     {
  41.         $this->setLocale($event->getRequest());
  42.     }
  43.     public function onKernelFinishRequest(FinishRequestEvent $event)
  44.     {
  45.         if (null === $parentRequest $this->requestStack->getParentRequest()) {
  46.             return;
  47.         }
  48.         $this->setLocale($parentRequest);
  49.     }
  50.     public static function getSubscribedEvents()
  51.     {
  52.         return [
  53.             // must be registered after the Locale listener
  54.             KernelEvents::REQUEST => [['onKernelRequest'10]],
  55.             KernelEvents::FINISH_REQUEST => [['onKernelFinishRequest'0]],
  56.         ];
  57.     }
  58.     private function setLocale(Request $request)
  59.     {
  60.         try {
  61.             $this->translator->setLocale($request->getLocale());
  62.         } catch (\InvalidArgumentException $e) {
  63.             $this->translator->setLocale($request->getDefaultLocale());
  64.         }
  65.     }
  66. }