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 :

Traduction i18n qui ne remplace pas les chaines de mon interface


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut Traduction i18n qui ne remplace pas les chaines de mon interface
    Bonjour à tous,
    j'ai voulu utiliser la fonction I18n pour traduire l'interface d'une application que je suis en train de dévelloper.
    Après avoir pourtant suivi tout les tutoriels du site officiel, aucune de mes chaines n'est remplacée par celles contenues dans les fichiers message...

    Bien entendu, aucune erreur n'est produite et je ne sais donc pas ou se pose le soucis.

    Voila ce que j'ai fait :
    - Ajouté i18n comme helper par défaut
    - Ajouté dans settings.yml :
    default_culture:fr
    i18n: on
    - Utiliser la fonction d'extraction des chaines pour mes languages (en et fr)
    - Modifier ces fichiers pour ajouter (la balise d'ouverture <target> était absente du fichier:
    <target>Ma chaine traduite

    -Vérifier les droits sur l'ensemble des fichiers
    - Fait un clear-cache

    Ensuite, un rafraichissement de mon navigateur mais aucune chaine n'est traduite

    Je précise que j'affiche dans mes template les chaînes via __('Ma chaine')

    Si quelqu'un peut me dépanner, je pense qu'il s'agit que d'un réglage puisque je n'ai pas d'erreurs, mais je ne trouve pas lequel ....

    Merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut
    Je refait un petit UP à mon topic,
    je n'ai toujours pas trouvé de solution et aucune erreur n'étant générée, cela ne m'indique vraiment aucune piste !

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Je ne connais pas symfony , mais petite question :
    L'internationalisation se base t'elle sous gettext ?
    Si oui , il y'a un bug sous PHP 5.3.0 et windows qui empèche gettext de fonctionner correctement.
    En gros le setlocale() retourne false et bloque gettext ce qui n'était pas le cas dans les version 5.2.x

    Si tu est dans ce cas , c'est sans doute la source du problème
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut
    Merci pour ta réponse, mais mon serveur tourne sous PHP 5.2.10
    Avec Symfony, j'arrive bien via l'helper Date et Number à afficher mon nombre ou ma date selon la culture de l'utilisateur.
    Cela signifie à mes yeux que la culture est définie correctement puisqu'elle est prise en compte par ces helpers.

    J'ai commencé un nouveau projet sous Symfony 1.4 (j'étais en 1.2 auparavant), voila ce que j'ai fait pour activer i18n:

    Dans le fichiers config/settings.yml de mon application, j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    all:
      .settings:
        # Les réglages linguisitiques
        charset: utf-8
        default_culture: en_GB
     
        # Activation du support de l'internationnalisation
        i18n: true
     
        # Liste des helpers standard de l'application
        standard_helpers: [Partial, Cache, I18N]
    Cela me permet d'utiliser la commande __('Mon texte'); sans provoquer d'erreur, donc l'helper est bien actifs.

    Ensuite, j'ai généré les fichiers de langue comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    symfony i18n:extract intranet fr_FR --auto-save
    Puis j'ai modifié le fichier i18n/fr_FR/message.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
    <xliff version="1.0">
      <file source-language="EN" target-language="fr_FR" datatype="plaintext" original="messages" date="2009-12-15T14:32:32Z" product-name="messages">
        <header/>
        <body>
          <trans-unit id="1">
            <source>helloworld</source>
            <target>Bonjour le monde<target/>
          </trans-unit>
        </body>
      </file>
    </xliff>
    Dans mon action je change la culture par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->getUser()->setCulture('fr_FR');
    Et enfin dans mon template j'affiche ma chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo __('helloworld');
    Bien entendu, la phrase affiché est "helloworld" alors même que les nombre et les dates sont bien affichés en français....

    Qu'ai je loupé ?

  5. #5
    Membre chevronné Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Par défaut
    Bonjour,

    As-tu essayé (rien que pour voir) de remplacer fr_FR par fr tout court ?

    Perso, je ne modifie pas le fichier message.xml, j'en crée un qui sera placé dans l'application : app/i18n/sf_admin.fr.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd" >
    <xliff version="1.0">
      <file original="global" source-language="en" datatype="plaintext">
        <header />
        <body>
          <trans-unit>
            <source>Hello world</source>
            <target>Bonjour le monde</target>
          </trans-unit>
        </body>
      </file>
    </xliff>
    Et j'utilise ce code pour l'appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __('Hello world', array(), 'sf_admin')

  6. #6
    Membre averti
    Inscrit en
    Août 2009
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 40
    Par défaut
    Merci beaucoup, avec ton code cela fonctionne.

    Nous avons poussé un peut plus les recherches et il semble que le contenu du fichier message.xml soit la cause du non-fonctionnement.

    je m'explique, si je met dans mon fichier ce texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd" >
    <xliff version="1.0">
      <file original="global" source-language="en" datatype="plaintext">
        <header />
        <body>
          <trans-unit>
            <source>Hello world</source>
            <target>Bonjour le monde</target>
          </trans-unit>
        </body>
      </file>
    </xliff>
    Ça va fonctionner (après avoir correctement vidé le cache, même en mode dev)

    Par contre, si j'utilise le fichier généré par la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    symfony i18n:extract --auto-save frontend fr
    qui me produit le fichier suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">
    <xliff version="1.0">
      <file source-language="EN" target-language="de" datatype="plaintext" original="messages" date="2009-12-16T14:08:39Z" product-name="messages">
        <header/>
        <body>
          <trans-unit id="1">
            <source>Hello world</source>
            <target>Bonjour le monde<target/>
          </trans-unit>
        </body>
      </file>
    </xliff>
    Alors la, ça ne marche pas ....

    Je ne comprend toujours pas pourquoi l'utilitaire fournit avec symfony crée un fichier qui ne fonctionne pas, mais je suis heureux d'avoir pu avancé sur ce point grâce à ton aide.

    Si tu as plus d'explication sur le pourquoi du comment, je suis preneur !

Discussions similaires

  1. [SQL 2000]Where in qui ne comprend pas les listes
    Par zooffy dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 02/05/2007, 16h36
  2. [RegEx] ereg qui ne trouve pas les accents
    Par Sephiroth Lune dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2007, 18h05
  3. [Requete] qui n'affiche pas les doublons mais sur un seul champs
    Par joseph.breham dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2006, 14h57
  4. Le '%' en SQL ne remplace pas les espaces...
    Par njac dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/09/2004, 17h10

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