src/EventSubscriber/TranslationEventListener.php line 40

  1. <?php
  2. // src/EventSubscriber/TranslationEventListener.php
  3. namespace App\EventSubscriber;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\Cookie;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  11. class TranslationEventListener implements EventSubscriberInterface
  12. {
  13.     public function onKernelRequest(RequestEvent $event): Request
  14.     {
  15.         $request $event->getRequest();
  16.         if ($request->get('lang')) {
  17.             // Utiliser la langue du get
  18.             $locale $request->get('lang');
  19.         } else if ($request->cookies->has('lang')) {
  20.             // Utiliser la langue du cookie
  21.             $locale $request->cookies->get('lang');
  22.         } else {
  23.             // Utiliser la langue du header "Accept-Language"
  24.             $acceptLanguages explode(','$request->headers->get('Accept-Language'));
  25.             $locale in_array('fr'$acceptLanguages) ? 'fr' 'en';
  26.         }
  27.         //set local
  28.         $request->setLocale($locale);
  29.         $request->setDefaultLocale($locale);
  30.         return $request;
  31.     }
  32.     public function onKernelResponse(ResponseEvent $event): Response
  33.     {
  34.         $request $event->getRequest();
  35.         $response $event->getResponse();
  36.         $locale $request->getLocale();
  37.         // Vérifier si le cookie de langue est défini
  38.         if (!$request->cookies->has('lang') || $request->cookies->get('lang') != $locale) {
  39.             $cookie = new Cookie('lang'$localestrtotime('+1 year'), '/'nulltruefalse);
  40.             $response->headers->setCookie($cookie);
  41.         }
  42.         return $response;
  43.     }
  44.     public static function getSubscribedEvents(): array
  45.     {
  46.         return [
  47.             KernelEvents::REQUEST => ['onKernelRequest'200],
  48.             KernelEvents::RESPONSE  => 'onKernelResponse',
  49.         ];
  50.     }
  51. }