src/EventSubscriber/LocaleSubscriber.php line 18

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\RequestEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. class LocaleSubscriber implements EventSubscriberInterface
  7. {
  8. private $defaultLocale;
  9. public function __construct(string $defaultLocale = 'fr')
  10. {
  11. $this->defaultLocale = $defaultLocale;
  12. }
  13. public function onKernelRequest(RequestEvent $event)
  14. {
  15. $request = $event->getRequest();
  16. if (!$request->hasPreviousSession()) {
  17. return;
  18. }
  19. if ($locale = $request->query->get('_locale')) {
  20. // Use parameter locale
  21. $request->getSession()->set('_locale', $locale);
  22. } else {
  23. // Use session locale
  24. $locale = $request->getSession()->get('_locale', $this->defaultLocale);
  25. }
  26. $request->setLocale($locale);
  27. }
  28. public static function getSubscribedEvents()
  29. {
  30. return [
  31. KernelEvents::REQUEST => [['onKernelRequest', 20]],
  32. ];
  33. }
  34. }