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 :

Symfony2 ne charge pas la langue stocké dans la session (_locale)


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Symfony2 ne charge pas la langue stocké dans la session (_locale)
    Bonjour,

    Je suis entrain de mettre en place un système multilingue dans l'application que j'ai crée et Symfony2 ne charge pas la lange.

    J'ai configuré mon fichier config.yml comme suit pour qu'il ai une langue par défaut :

    framework:
    translator: { fallback: fr }

    Ensuite, j'ai créer une fonction qui permet de stocker la langue dans une session :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function choiceLangAction(Request $request, $lang = null) {
        if ($lang != null) {            
            $this->get('session')->set('_locale', $lang);
        }
     
        // on tente de rediriger vers la page d'origine
        $url = $this->container->get('request')->headers->get('referer');
        if (empty($url)) {
            $url = $this->container->get('router')->generate('homepage');
        }
        return new RedirectResponse($url);
    }
    Voici les liens se trouvant dans un template permettant de changer de langue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <li><a href="{{ path('syslang', {'lang' : 'fr_FR'}) }}">FR</a></li>
    <li><a href="{{ path('syslang', {'lang' : 'en_US'}) }}">EN</a></li>
    Pour terminé, j'ai créé mes fichiers de traductions messages.en.yml et messages.fr.yml dans le repertoire translations. J'ai également mis en place les traductions dans mes templates et vérifié que dans la session il y a bien la langue sélectionné par l'utilisateur.

    Merci de votre aide

  2. #2
    Membre du Club
    Homme Profil pro
    PHP + JAVA
    Inscrit en
    Mars 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : PHP + JAVA

    Informations forums :
    Inscription : Mars 2009
    Messages : 65
    Points : 60
    Points
    60
    Par défaut
    Salut, un sujet avait été déjà ouvert à ce sujet ici . N'oublie pas également de faire un cache:clear pour être sûr que tes deux nouveaux fichiers ont été bien pris en compte par Symfony . Avec la solution qui est indiquée en fin de post, j'ai réussi à m'en sortir. Je l'ai bien entendu amélioré entre temps:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    public function changeLanguage(){
            $langue=null;
            $tab_langue=array("fr","en");
            if (!is_null($this->container)){
                $langue = $this->container->get('request')->get("_locale");
            }
            if (!is_null($langue)&&in_array($langue, $tab_langue)){
                //on prend en compte en priorité l'action de l'utilisateur (changement de langue)
                $request = $this->getRequest();
                $request->setDefaultLocale($langue);
                $request->setLocale($langue);
                $session = new Session();
                $session->start();
                $session->set('_locale', $langue);
            }else{
                $session = new Session();
                $session->start();
                if (!is_null($session->get('_locale'))){
                    $langue=$session->get('_locale');
                }
                if (!is_null($langue)&&in_array($langue, $tab_langue)){
                    //si aucune action on regarde s'il y en a déjà une qui a été effectuée à travers la session
                    $request = $this->getRequest();
                    $request->setDefaultLocale($langue);
                    $request->setLocale($langue);
                }
            }
        }
    Cette méthode je l'ai mise dans chacun de mes contrôleur et en est fait appel à chaque fois que j'en avait besoin, c'est à dire à chaque fois que je devais charger une page (cf discussion).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Salut, merci pour ta réponse tu as donc créer une Entity qui se nomme Session pour la mise en place de la traduction?

  4. #4
    Membre habitué
    Ingénieur d'études et de développement
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    Non, Session est une classe de SF.

    Il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Symfony\Component\HttpFoundation\Session\Session;
    en haut de ton controller.

    Par contre cette solution me parait étrange. Tu redéfinis la session si tu veux changer de culture, quid des autres paramètres dont tu pourrais avoir besoin et qui sont déjà stockés dans la session ?

Discussions similaires

  1. Filemanager dans CKeditor ne charge pas l'arborescence
    Par prince_rick dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 16/04/2014, 20h48
  2. Réponses: 2
    Dernier message: 21/12/2012, 13h14
  3. [MySQL] Fonction php stockée dans ma DB qui ne s'exécute pas
    Par steiner62 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 30/10/2008, 15h05
  4. Réponses: 10
    Dernier message: 08/09/2007, 14h33
  5. probleme:recuperer une valeur stockée dans une session
    Par oasma dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 26/03/2007, 00h38

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