IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Travailler avec les locales et les URLS [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut Travailler avec les locales et les URLS
    Bonjour à tous,

    J'ai récemment débuté mon introduction à Symfony2, et j'ai un peu de difficulté avec l'internationnalisation ( i18n ) des locales; mettre en place une logique efficace.

    Mon but est simple, faire comme microsoft.com: lorsqu'un utilisateur accède à la route /, déterminer la locale la plus appropriée, et le rediriger vers la page d'accueil correspondante. Si aucune locale ne correspond, attribuer la locale par défaut à l'utilisateur.

    Donc déjà, il me faut savoir:

    1- Comment définir les locales que mon site supportera.

    Pour se faire, j'ai créé l'entré suivante dans app/config.yml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    parameters:
        supported_locale: [fr, en, es]
    Ce qui me permet d'y avoir accès à partir de n'importe quel contrôlleur de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->container->getParameter('supported_locale');
    Question: Suis-je en train d'essayer de ré-inventer quelque chose qui existe déjà dans Symfony2 ?


    2- Comment rendre fonctionnel la détection de la locale ?
    J'ai besoin de traduction différentes pour les locales en_CA et en_US.
    En fait, en_US sera la version anglaise par défaut, donc je pourrais dire que j'ai besoin de en et en_CA.

    Lorsque je regarde la valeur de $this->get('session')->getLocale(), j'obtiens toujours 'en', malgré que mon navigateur soit configuré pour prioriser fr_CA, fr, en.

    Question: Pourquoi est-ce que symfony2 ne détecte pas bien ma locale ? ( Lien à faire avec la question #1 ?)
    Edit: $this->getRequest()->getPreferredLanguage()

    3- Comment accéder à la locale par défaut ?

    Un petit var_dump($this->get('session')); montre rapidement qu'il existe une variable protected 'defaultLocale' => string 'en' (length=2) dans l'objet Symfony\Component\HttpFoundation\Session. Or, il n'existe aucune méthode d'accès à cette propriété.

    Question: Comment suis-je supposer pouvoir la récupérer à l'intérieur d'un controlleur ?

    Note: Si possible sans ajouter ceci dans app/config.yml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    parameters: 
        default_locale: %locale%

    Note concernant les routes: j'utilise le bundle BeSimpleI18nRoutingBundle() pour gérer l'internationnalisatio de mes routes.

  2. #2
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    J'ai finalement réussit à tout faire fonctionner le système comme bon me semble, voici la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    //Get the supported locales of the site.
    $arrSupportedLocale = $this->container->getParameter('supported_locale');
     
    //Match the best possible locale
    $bestLocale = $this->getRequest()->getPreferredLanguage($arrSupportedLocale);
     
    //Set the active locale to the best matching locale
    $this->get('session')->setLocale($bestLocale);
     
    //Generate redirection URL
    $arrParam = array('locale' => $this->get('session')->getLocale());
    $url = $this->container->get('router')->generate('_welcome', $arrParam);
     
    //Effectuer la redirection
    return new RedirectResponse($url);

    À noter que j'utilise BeSimpleI18nRoutingBundle, et que j'ai ajouté ceci dans app/config.yml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    parameters:
        supported_locale: [fr, en_CA, en, es]

  3. #3
    Membre régulier Avatar de waldo2188
    Profil pro
    Chef de projets
    Inscrit en
    Mars 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets

    Informations forums :
    Inscription : Mars 2004
    Messages : 115
    Points : 113
    Points
    113
    Par défaut
    Bonjour,

    Je rencontre la même problématique que vous.
    Vous est-il possible de nous partager votre fichier routing.yml surtout en ce qui concerne les première route (/ et /en/).

    D'avance, grand merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Comment travailler avec un xml dont les noms de noeud sont identique ?
    Par eucaly dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 06/02/2013, 17h04
  2. Réponses: 4
    Dernier message: 02/10/2012, 14h20
  3. Réponses: 5
    Dernier message: 14/01/2010, 18h11
  4. Est-il possible de travailler avec des index dans les checkboxes ?
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/12/2008, 12h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo