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 :

Internationalisation de l'application


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut Internationalisation de l'application
    Bonjour,
    Je suis actuellement ce tutoriel : http://j-place.developpez.com/tutori...avec-symfony2/ (j'ai suivi le précédent aussi) et j'en suis à l'internationalisation de l'application.
    Mon problème est que lorsque je mets la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    translator:      { fallback: en }
    dans le fichier app/config/config.yml, mon internationalisation fonctionne bien (le fait de cliquer sur les liens de langue change la langue). Mais lorsque je change cette ligne par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    translator:      { fallback: fr }
    l'application reste toujours en français.
    Voici mon routing.yml :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    myapp_accueil:
         pattern: /
         defaults: { _controller: MyAppFilmothequeBundle:Default:index }
    myapp_choisir_langue:
         pattern: /choisir-langue/{langue}
         defaults: { _controller: MyAppFilmothequeBundle:Default:choisirLangue }
     
    myapp_acteur_lister:
         pattern: /acteur/
         defaults: { _controller: MyAppFilmothequeBundle:Acteur:lister }
    myapp_acteur_ajouter:
         pattern: /acteur/ajouter
         defaults: { _controller: MyAppFilmothequeBundle:Acteur:editer }
    myapp_acteur_modifier:
         pattern: /acteur/modifier/{id}
         defaults: { _controller: MyAppFilmothequeBundle:Acteur:editer }
    myapp_acteur_supprimer:
         pattern: /acteur/supprimer/{id}
         defaults: { _controller: MyAppFilmothequeBundle:Acteur:supprimer }
    myapp_acteur_rechercher:
         pattern: /acteur/rechercher
         defaults: { _controller: MyAppFilmothequeBundle:Acteur:rechercher }
         requirements:
            _method: POST
     
    myapp_categorie_lister:
         pattern: /categorie/
         defaults: { _controller: MyAppFilmothequeBundle:Categorie:lister }
    myapp_categorie_ajouter:
         pattern: /categorie/ajouter
         defaults: { _controller: MyAppFilmothequeBundle:Categorie:editer }
    myapp_categorie_modifier:
         pattern: /categorie/modifier/{id}
         defaults: { _controller: MyAppFilmothequeBundle:Categorie:editer }
    myapp_categorie_supprimer:
         pattern: /categorie/supprimer/{id}
         defaults: { _controller: MyAppFilmothequeBundle:Categorie:supprimer }
     
    myapp_film_lister:
         pattern: /film/
         defaults: { _controller: MyAppFilmothequeBundle:Film:lister }
    myapp_film_ajouter:
         pattern: /film/ajouter
         defaults: { _controller: MyAppFilmothequeBundle:Film:editer }
    myapp_film_modifier:
         pattern: /film/modifier/{id}
         defaults: { _controller: MyAppFilmothequeBundle:Film:editer }
    myapp_film_supprimer:
         pattern: /film/supprimer/{id}
         defaults: { _controller: MyAppFilmothequeBundle:Film:supprimer }
    mon fichier de vue (src/MyApp/FilmothequeBundle/Resources/views/Acteur/lister.html.twig) :
    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
    30
    31
    32
    33
    34
    35
    36
    {% extends 'MyAppFilmothequeBundle::layout.html.twig' %}
     
    {% block title %}{{ "acteur.liste" | trans  }}{% endblock %}
     
    {% block content %}
    <form id="form_recherche" action="{{ path('myapp_acteur_rechercher') }}" method="post">
      {{ form_widget(form) }}
      <input type="submit" value="Rechercher" />
    </form>
    <div class="loading"></div>
    <div id="resultats_recherche">
      {% include 'MyAppFilmothequeBundle:Acteur:liste.html.twig' with {'acteurs' : acteurs} %}
    </div>
     
    <p><a href="{{ path('myapp_acteur_ajouter') }}">Ajouter un acteur</a>
     
    <script>
      $(".loading").hide();
      $("#form_recherche").submit(function() {
          $('.loading').show();
          var motcle = $("#acteurrecherche_motcle").val();
          var DATA = 'motcle='+motcle;
          $.ajax({
              type: "POST",
              url: "{{ path('myapp_acteur_rechercher') }}",
              data: DATA,
              cache: false,
              success: function(data) {
                  $("#resultats_recherche").html(data);
                  $('.loading').hide();
              }
          });
          return false;
      });
    </script>
    {% endblock %}
    et mon contrôleur (ActeurController) :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    <?php
    namespace MyApp\FilmothequeBundle\Controller;
     
    use Symfony\Component\DependencyInjection\ContainerAware;
    use Symfony\Component\httpFoundation\RedirectResponse;
    use Symfony\Component\HttpKernel\Exception\notFoundHttpException;
    use MyApp\FilmothequeBundle\Entity\Acteur;
    use MyApp\FilmothequeBundle\Form\ActeurForm;
    use MyApp\FilmothequeBundle\Form\ActeurRechercheForm;
     
    class Acteurcontroller extends ContainerAware {
          public function listerAction() {
                 $em = $this->container->get('doctrine')->getEntityManager();
     
                 $acteurs = $em->getRepository('MyAppFilmothequeBundle:Acteur')->findAll();
     
                 $form = $this->container->get('form.factory')->create(new ActeurRechercheForm());
     
                 return $this->container->get('templating')->renderResponse('MyAppFilmothequeBundle:Acteur:lister.html.twig',
                   array('acteurs' => $acteurs,
                         'form'    => $form->createView())
                 );
          }
     
          public function editerAction($id = null) {
                 $message = '';
                 $em = $this->container->get('doctrine')->getEntityManager();
     
                 if(isset($id)) {
                     // modification d'un acteur existant : on recherche ses données
                     $acteur = $em->find('MyAppFilmothequeBundle:Acteur', $id);
     
                     if (!$acteur) {
                        $message = 'Aucun acteur trouvé !';
                     }
                 } else {
                     // ajout d'un nouvel acteur
                     $acteur = new Acteur();
                 }
     
                 $form = $this->container->get('form.factory')->create(new ActeurForm(), $acteur);
     
                 $request = $this->container->get('request');
     
                 if ($request->getMethod() == 'POST') {
                    $form->bindRequest($request);
     
                    if ($form->isValid()) {
     
                       $em->persist($acteur);
                       $em->flush();
                       if (isset($id)) {
                           $message = 'Acteur modifié avec succès !';
                       } else {
                           $message = 'Acteur ajouté avec succès !';
                       }
                    }
                 }
     
                 return $this->container->get('templating')->renderResponse('MyAppFilmothequeBundle:Acteur:editer.html.twig',
                 array('form' => $form->createView(),
                       'message' => ''));
          }
     
          public function supprimerAction($id) {
                 $em = $this->container->get('doctrine')->getEntityManager();
                 $acteur = $em->find('MyAppFilmothequeBundle:Acteur', $id);
     
                 if(!$acteur) {
                   throw new NotFoundHttpException("Acteur non trouvé");
                 }
     
                 $em->remove($acteur);
                 $em->flush();
     
                 return new RedirectResponse($this->container->get('router')->generate('myapp_acteur_lister'));
          }
     
          public function topAction($max = 5) {
                 $em = $this->container->get('doctrine')->getEntityManager();
     
                 $qb = $em->createQueryBuilder();
                 $qb->select('a')
                    ->from('MyAppFilmothequeBundle:Acteur', 'a')
                    ->orderBy('a.dateNaissance', 'DESC')
                    ->setMaxResults($max);
     
                 $query = $qb->getQuery();
                 $acteurs = $query->getResult();
     
                 return $this->container->get('templating')->renderResponse('MyAppFilmothequeBundle:Acteur:liste.html.twig', array(
                   'acteurs' => $acteurs,
                 ));
          }
     
          public function rechercherAction() {
                 $request = $this->container->get('request');
     
                 if ($request->isXmlHttpRequest()) {
                     $motcle='';
                     $motcle = $request->request->get('motcle');
     
                     $em = $this->container->get('doctrine')->getEntityManager();
     
                     if ($motcle != '') {
                        $qb = $em->createQuerybuilder();
     
                        $qb->select('a')
                           ->from('MyAppFilmothequeBundle:Acteur', 'a')
                           ->where("a.nom LIKE :motcle OR a.prenom LIKE :motcle")
                           ->orderBy('a.nom', 'ASC')
                           ->setParameter('motcle', '%'.$motcle.'%');
     
                        $query = $qb->getQuery();
                        $acteurs = $query->getResult();
                     } else {
                        $acteurs = $em->getRepository('MyAppFilmothequeBundle:Acteur')->findAll();
                     }
     
                     return $this->container->get('templating')->renderResponse('MyAppFilmothequeBundle:Acteur:liste.html.twig', array('acteurs' => $acteurs));
                 } else {
                   return $this->listerAction();
                 }
          }
    }
    ?>

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    avec du texte brute style Ajouter un acteur, Aucun acteur trouvé !, Acteur modifié avec succès ! ça risque pas de changer

    après pour la traduction elle est dépendante de la session

  3. #3
    Membre éclairé Avatar de magicbisous-nours
    Inscrit en
    Octobre 2005
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 277
    Par défaut
    J'ai bien compris que les textes bruts ne risquaient pas de changer mais je voulais faire l'essai avec le titre pour commencer. Pourquoi cela fonctionne bien avec le fallback en et pas avec le fallback fr ?

    voici mon messages.fr.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    acteur: Acteur
    acteur.nom: Nom
    acteur.prenom: Prénom
    acteur.dateNaissance: Date de naissance
    acteur.sexe: Sexe
    acteur.liste: Liste des acteurs
    acteur.ajouter: Ajouter un acteur
    et mon messages.en.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    acteur: Actor
    acteur.nom: Last name
    acteur.prenom: First name
    acteur.dateNaissance: Date of birth
    acteur.sexe: Gender
    acteur.liste: Actors list
    acteur.ajouter: Add an actor

Discussions similaires

  1. Internationalisation d'une application
    Par LeonardL dans le forum Windows Presentation Foundation
    Réponses: 13
    Dernier message: 11/06/2009, 23h49
  2. Internationalisation d'une application en Java
    Par dduke dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/04/2007, 16h22
  3. [C#][2.0] Internationalisation de l'application Web
    Par slopera dans le forum ASP.NET
    Réponses: 3
    Dernier message: 28/12/2005, 13h40
  4. [Unicode] Internationalisation d'une application
    Par Thierry Laborde dans le forum Langage
    Réponses: 4
    Dernier message: 21/10/2003, 20h15

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