<?php 
 
// src/EventSubscriber/LocaleSubscriber.php 
namespace App\EventSubscriber; 
 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Symfony\Component\HttpKernel\Event\RequestEvent; 
use Symfony\Component\HttpKernel\KernelEvents; 
 
class LocaleSubscriber implements EventSubscriberInterface 
{ 
    private $defaultLocale; 
 
    public function __construct($defaultLocale = 'en') 
    { 
         
       if(isset($_GET['lang']) && !empty($_GET['lang'])) $defaultLocale=@$_GET['lang']; 
        $this->defaultLocale = $defaultLocale; 
       // $_SESSION['local']=$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->attributes->get('lang')) { 
            $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', 20]], 
        ]; 
    } 
}