Skip to content

Instantly share code, notes, and snippets.

@Nek-
Last active April 20, 2016 13:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nek-/10585526 to your computer and use it in GitHub Desktop.
Save Nek-/10585526 to your computer and use it in GitHub Desktop.
<?php
namespace Ceva\CoreBundle\Listener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Cookie;
class LocaleListener implements EventSubscriberInterface
{
private $router;
private $defaultLocale;
// Initialise la langue par défaut, utilise le paramètre "locale" de la configuration
public function __construct($router, $default_locale = "en")
{
$this->router = $router;
$this->defaultLocale = $default_locale;
}
// Ecoute les requètes reçu par le kernel et choisit la langue en fonction du navigateur client si session présente
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
// Vérifie la présence du cookie languagePreferred, sinon test si la locale en cours correspond au nivagateur
if(!$request->cookies->get('languagePreferred') && $request->getPreferredLanguage() != $request->getLocale()){
// Répond au client une redirection vers la page avec la locale correspondant à son navigateur
$response = new RedirectResponse($this->router->generate($request->attributes->get('_route'),
array('_locale' => $request->getPreferredLanguage())
));
// Enregistrement du cookie languagePreferred
$cookie = new Cookie('languagePreferred', $request->getPreferredLanguage(), time() + 3600 * 24 * 7);
$response->headers->setCookie($cookie);
// Renvoi la réponse
$event->setResponse($response);
}
}
static public function getSubscribedEvents()
{
return array(
// must be registered before the default Locale listener
KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
);
}
}
?>
Copy link

ghost commented Dec 15, 2014

Bonjour, j'utilise ton entite "LocaleListener" ainsi que ces fonctions et j'ai un probléme lorsque que la "$request->getLocale()" pour moi la valeur vaut 'fr' correspond au "$request->getPreferredLanguage()" moi la valeur de mon navigateur vaut 'fr', la condition "if" de la methode "onKernelRequest" n'est pas rempli du fait de l'egalite 'fr'='fr' plus présicesement $request->getLocale() est égal à $request->getPreferredLanguage().
Pour les autres langues tout fonctionne a merveille c'est juste quand il ce trouve qui il a une agalité entre $request->getLocale() est $request->getPreferredLanguage() pour un navigateur en langue francaise
As tu une indication cher amis a me conseiller

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment