Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
<?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)),
        );
    }
}