2009-07-28 8 views
5

J'ai toujours entendu parler de gettext - Je sais que c'est une sorte de commande unix pour rechercher une traduction basée sur l'argument de chaîne fourni, puis produit un fichier .pot mais quelqu'un peut-il m'expliquer comment cela est pris en charge de dans un cadre web? Je pourrais essayer de voir comment un cadre établi l'a fait, mais l'explication d'un profane aiderait parce que cela pourrait aider à éclaircir l'image un peu plus avant que je fouille dans les choses pour fournir ma propre solution.Ajout de la prise en charge de i18n en PHP avec gettext?

Répondre

12

Le système gettext fait écho aux chaînes d'un ensemble de fichiers binaires créés à partir de fichiers texte source contenant les traductions dans différentes langues pour la même phrase.

La clé de recherche est la phrase dans un langage "de base".

dans votre code source, vous aurez quelque chose comme

echo _("Hello, world!"); 

pour chaque langue que vous aurez un fichier texte correspondant avec la clé et la version traduite (notez le% s qui peut être utilisé avec des fonctions printf)

french 
msgid "Hello, world!" 
msgstr "Salut, monde!" 
msgid "My name is %s" 
msgstr "Mon nom est %s" 

italian 
msgid "Hello, world!" 
msgstr "Ciao, mondo!" 
msgid "My name is %s" 
msgstr "Il mio nome è %s" 

Voici les principales étapes que vous devez passer par la création de vos

localisations
  • toutes vos sorties de texte doit utiliser les fonctions gettext (gettext(), ngettext(), _())
  • utilisation xgettext (* nix) pour analyser vos fichiers php et créer le fichier texte de base .po
  • utilisation poedit à ajouter des textes de traduction aux fichiers .po
  • utilisation msgfmt (* nix) pour créer le fichier .mo binaire à partir du fichier .po
  • mettre les fichiers .mo dans une structure de répertoire comme

locale/de_DE/LC_MESSAGES/myPHPApp.mo

locale/en_EN/LC_MESSAGES/myPHPApp.mo

locale/it_IT/LC_MESSAGES/myPHPApp.mo

alors vous créez un script php doit définir les paramètres régionaux qui doivent être utilisés

L'exemple du php manuel est très clair pour cette partie

<?php 
// Set language to German 
setlocale(LC_ALL, 'de_DE'); 

// Specify location of translation tables 
bindtextdomain("myPHPApp", "./locale"); 

// Choose domain 
textdomain("myPHPApp"); 

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now 

// Print a test message 
echo gettext("Welcome to My PHP Application"); 

// Or use the alias _() for gettext() 
echo _("Have a nice day"); 
?> 

toujours dans le manuel php regarder here pour un bon tutoriel

+0

Mais ce qui précède L'exemple de PHP ne semble pas traduire la chaîne donnée. Y a-t-il autre chose à faire avec l'exemple? –

Questions connexes