<?php 
namespace App\EventListener; 
 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\HttpKernel\Event\RequestEvent; 
use Symfony\Component\HttpKernel\KernelEvents; 
 
class LocaleListener implements EventSubscriberInterface 
{ 
    private $defaultLocale; 
 
    public function __construct($defaultLocale = 'en') 
    { 
        $this->defaultLocale = $defaultLocale; 
    } 
 
    public function onKernelRequest(RequestEvent $event) 
    { 
        $request = $event->getRequest(); 
        if (!$request->hasPreviousSession()) { 
            return; 
        } 
 
        // try to see if the locale has been set as a _locale routing parameter 
        if ($locale = $request->getLocale()) { 
            $request->getSession()->set('locale', $locale); 
        } else { 
            // if no explicit locale has been set on this request, use one from the session 
            $request->setLocale($request->getSession()->get('locale', $this->defaultLocale)); 
        } 
    } 
 
    public static function getSubscribedEvents() 
    { 
        return [ 
            // must be registered before (i.e. with a higher priority than) the default Locale listener 
            KernelEvents::REQUEST => [['onKernelRequest', 10]], 
        ]; 
    } 
}