Repository URL to install this package:
|
Version:
6.0.11 ▾
|
<?php
namespace DigitalAscetic\SimpleTranslatable\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
*
*/
class LocaleListener implements EventSubscriberInterface
{
private $defaultLocale;
private $availableLocales;
public function __construct($defaultLocale = 'en', $availableLocales = array('en'))
{
$this->defaultLocale = $defaultLocale;
$this->availableLocales = $availableLocales;
}
public function onKernelRequest(RequestEvent $event)
{
$request = $event->getRequest();
// If no session is present try to detect the right locale from the
// browser allowed locales.
if (!$request->hasPreviousSession()) {
foreach ($request->getLanguages() as $locale) {
if (in_array($locale, $this->availableLocales)) {
$request->getSession()->set('_locale', $locale);
break;
}
}
return;
}
// try to see if the locale has been set as a _locale routing parameter
$locale = $request->attributes->get('_locale');
// if no explicit locale has been set on this request, use one from the session.
if (!$locale) {
$locale = $request->getSession()->get('_locale', $this->defaultLocale);
}
$request->getSession()->set('_locale', $locale);
$request->setLocale($locale);
}
public static function getSubscribedEvents(): array
{
return array(
// must be registered before the default Locale listener
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
);
}
}