<?php
namespace App\EventListener;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\Translation\LocaleSwitcher;
use App\Entity\User;
class LocaleListener
{
private $container;
private LocaleSwitcher $localeSwitcher;
public function __construct(KernelInterface $appKernel,
ManagerRegistry $doctrine,
LocaleSwitcher $localeSwitcher)
{
$this->appKernel = $appKernel;
$this->doctrine = $doctrine;
$this->localeSwitcher = $localeSwitcher;
// print('<br>LocaleListener __construct ');
if($_SERVER['HTTP_HOST'] == 'www.easycommerc.cz' OR $_SERVER['HTTP_HOST'] == 'easycommerc.cz') {
$defaultLocale = 'cs';
} elseif($_SERVER['HTTP_HOST'] == 'www.easycommerc.com' OR $_SERVER['HTTP_HOST'] == 'easycommerc.com') {
$defaultLocale = 'en';
} elseif($_SERVER['HTTP_HOST'] == 'www.easycommerc.eu' OR $_SERVER['HTTP_HOST'] == 'easycommerc.eu') {
$defaultLocale = 'en';
} else {
$defaultLocale = 'cs';
}
$this->defaultLocale = $defaultLocale;
}
/**
* @throws \ReflectionException
*/
public function __invoke(RequestEvent $event): void
{
$request = $event->getRequest();
// if (!$event->isMainRequest()) {
// // don't do anything if it's not the master request
// return;
// }
$session = $request->getSession();
// print('<br>locale listener: '.$request->getSession()->get('lang')->getLangKey());
// print('<br>session _locale: '.$request->getSession()->get('_locale'));
//$locale = 'en';
//$request->getSession()->set('_locale', $locale);
$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('_locale')) {
$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));
}
if(!empty($request->getSession()->get('lang'))) {
$locale = $request->getSession()->get('lang')->getLangKey();
} else {
$locale = $this->defaultLocale;
//$locale = 'cz';
}
//$locale = 'en';
// print('<br> QQW LocaleListener locale: '.$locale);
// $request->setLocale($locale);
// you can get the current application locale like this:
$currentLocale = $this->localeSwitcher->getLocale();
// print('<br> QQW localeSwitcher locale: '.$currentLocale);
$this->localeSwitcher->setLocale($locale);
$request->getSession()->set('_locale', $locale);
}
}