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

Langage PHP Discussion :

Utilisation de gettext


Sujet :

Langage 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 Utilisation de gettext
    Bonjour à tous,


    Je fais actuellement face à un problème assez troublant. Troublant parcequ'il n'y a aucune erreur, ni exception.

    Pour faire court:
    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
     
    putenv('LC_ALL=' . $_SESSION['lng']->getLocale());
    putenv('LANG=' . $_SESSION['lng']->getLocale());
    setlocale(LC_ALL, $_SESSION['lng']->getLocale());
     
     
     
    $moFileName = "messages";
     
     
    //Quelques trucs de debug:
    $debugFullMoPath = FOLDER_ROOT . 'locale' . DIRECTORY_SEPARATOR . $_SESSION['lng']->getLocale() . DIRECTORY_SEPARATOR . 'LC_MESSAGES' . DIRECTORY_SEPARATOR . $moFileName . '.mo';
    if(!file_exists($debugFullMoPath))
        echo 'Translation file not found (' . $debugFullMoPath . ')!';
     
     
    bindtextdomain($moFileName, FOLDER_ROOT . 'locale');
    bind_textdomain_codeset($moFileName, 'UTF-8'); 
    textdomain($moFileName);
     
    echo gettext('MON COMPTE');
    Problème:
    - $_SESSION['lng']->getLocale() retourne bien 'en_CA'
    - Le résultat de echo gettext('MON COMPTE'); est: 'MON COMPTE' (et non 'MY ACCOUNT')


    Plus d'info:
    - Je possède bien un fichier messages.mo dans ./locale/en_CA/LC_MESSAGES/messages.mo
    - locale -a sur le serveur me retourne (entre autre): 'en_CA.utf8'
    - mon fichier .po contient:
    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
     
    msgid ""
    msgstr ""
    "Project-Id-Version: projetTest\n"
    "Report-Msgid-Bugs-To: \n"
    "POT-Creation-Date: 2010-10-08 16:48-0500\n"
    "PO-Revision-Date: \n"
    "Last-Translator: Francois Mazerolle <bidon@gmail.com>\n"
    "Language-Team: Bidon\n"
    "MIME-Version: 1.0\n"
    "Content-Type: text/plain; charset=UTF-8\n"
    "Content-Transfer-Encoding: 8bit\n"
    "X-Poedit-Language: English\n"
    "X-Poedit-Country: CANADA\n"
    "X-Poedit-SourceCharset: utf-8\n"
    "X-Poedit-Basepath: /mnt/nas/www/client/projet/test/\n"
    "X-Poedit-SearchPath-0: ./framework/lib/3rd/Dwoo/compiled\n"
     
    #: framework/lib/3rd/Dwoo/compiled/mnt/nas/www/client/projet/test/framework/module/User/Template/widget_login.html.d17.php:5
    msgid "MON COMPTE"
    msgstr "MY ACCOUNT"

    - Le fichier .mo semble valide (si je l'ouvre dans un éditeur hexadécimal, je retrouve MON COMPTE sans problème.)
    - Le tout est généré avec POEdit, donc j'exclu le fait que le fichier puisse être mal formaté.
    - Aucune erreur, aucune exception
    - Mes fichiers messages.po et messages.mo sont situés dans ./locale/en_CA/LC_MESSAGES/message.mo , et si vous regardez le code, c'est validé que le fichier existe, et je passe le chemin complet pour être bien certain.
    - phpinfo montre que gettext est activé.



    Est-ce que par miracle l'un d'entre-vous aurait une idée ?
    Car je suis vraiment à court. (Faut dire que ca fait 5h que je suis sur le cas, ma créativité à inventer des hypothèses à ses limites...)

    Merci à tous ceux qui liront !

  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
    Voilà, j'ai trouvé une solution à mon problème !

    Il faut spécifier l'encodage à même le nom de la "locale", voici donc le code corrigé et fonctionnel:

    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
     
    putenv('LC_ALL=' . $_SESSION['lng']->getLocale() . '.UTF8');
     
    putenv('LANG=' . $_SESSION['lng']->getLocale() . '.UTF8');
     
    setlocale(LC_ALL, $_SESSION['lng']->getLocale() . '.UTF8');
     
     
     
    $moFileName = "messages";
     
     
    bindtextdomain($moFileName, INTREPID_ROOT . 'locale');
     
    bind_textdomain_codeset($moFileName, 'UTF8'); 
     
    textdomain($moFileName);
     
     
     
    echo gettext('MON COMPTE'); //Retournera bien MY ACCOUNT
    Note:
    Si l'utilisation de l'encodage est nécessaire afin de définir la locale, elle n'est pas requise pour le nom des dossier dans locale/. En quelque sorte, gettext retire l'encodage du nom de la locale de façon automatique.


    Le commentaire suivant, de la doc PHP, m'a mis sur la piste:
    http://www.php.net/manual/en/functio...cale.php#89076

    Voilà ! En espérant que ca serve mon prochain

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

Discussions similaires

  1. Utilisation de gettext
    Par DevLqncer dans le forum Langage
    Réponses: 0
    Dernier message: 17/06/2013, 17h03
  2. Utiliser GNU gettext dans un projet visual studio c++
    Par sentza dans le forum Débuter
    Réponses: 1
    Dernier message: 08/01/2012, 19h20
  3. Réponses: 0
    Dernier message: 14/12/2010, 17h12
  4. Utilisation de gettext
    Par AmI2Blame4 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 13/05/2007, 21h36

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