Last active
April 20, 2016 13:19
-
-
Save Nek-/10585526 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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)), | |
); | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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