Création de fichier *.po avec outils xgettext (fichiers sources yacs) et tutoriaux d'utilisation
Bonjour à tous ;
Ce message s'adresse plus particulièrement à Bernard, auteur de la classe i18n intégrée au projet YACS.
Ce message s'adresse plus particulièrement à Bernard, auteur de la classe i18n intégrée au projet YACS.
Il y a quelque temps, je t'avais fais part d'un projet dans lequel je souhaitais intégrer ta classe i18n. Tu m'avais donné ton accord par retour courriel.
Ajourd'hui, dans la mesure ou je suis en pleine internationalisation, j'aurais besoin (je sais, je suis un peu fainiant) de connaître les arguements que tu passe à l'outil xgettext pour créer les fichiers *.po à partir des fichiers sources.
Plus particulièrement, j'aimerais si possible que tu m'indique le mot clé que tu utilise dans la mesure ou dans le code source *.php, l'identificateur n'est pas celui communement employé. Est-ce tout simplement un truc du genre --> -ks ?
Je sais que ma question peut paraître conne mais dans le code source, tu fais appel à différentes méthodes de la classe i18n selon qu'il s'agisse de pluriels ou non.
Ps : Si dans le fond de ton grenier ou encore, dans la cage de ton Amster, tu as rangé un petit script maison pour la création des fichiers *.po, je suis bien entendu preneur.
Merci d'avance pour les éclaircissement apportés.
Nuxwin Team
Ajourd'hui, dans la mesure ou je suis en pleine internationalisation, j'aurais besoin (je sais, je suis un peu fainiant) de connaître les arguements que tu passe à l'outil xgettext pour créer les fichiers *.po à partir des fichiers sources.
Plus particulièrement, j'aimerais si possible que tu m'indique le mot clé que tu utilise dans la mesure ou dans le code source *.php, l'identificateur n'est pas celui communement employé. Est-ce tout simplement un truc du genre --> -ks ?
Je sais que ma question peut paraître conne mais dans le code source, tu fais appel à différentes méthodes de la classe i18n selon qu'il s'agisse de pluriels ou non.
Ps : Si dans le fond de ton grenier ou encore, dans la cage de ton Amster, tu as rangé un petit script maison pour la création des fichiers *.po, je suis bien entendu preneur.
Merci d'avance pour les éclaircissement apportés.
Nuxwin Team
Files
| Recipelevel php.zip 1,764 bytes, 89 downloads Edited by Agnès on Dec. 22 2007 Zoom | |
| unix_build_pot.pl 12,158 bytes, 179 downloads Edited by Nuxwin on Nov. 4 2007 Zoom |
Comments
| Bernard from nearby-an-airport Associate 6555 posts registered on Sep. 12 2003 | La commande utilisée est : ##xgettext *.php --output=i18n/templates/%MODULE%.pot --default-domain=%MODULE% --keyword=c --keyword=nc:1,2 --keyword=s --keyword=ns:1,2 --language=php ## Le script qui permet d'extraire les chaînes en ligne de commande sous Windows est disponible dans l'archive de base de YACS, c'est le fichier tools/build_i18n.bat
|
| Nuxwin from Caen, devant mon bureau Member 190 posts registered on June 9 2006 | Bonjour ; Je te remercie pour cette réponse rapide. Je suis sous linux donc le .bat.... J'avais trouvé la marche à suivre sous poedit mais j'avais omis les arguements (1,2) pour les pluriels et du coup, j'arrivais pas à les extraire. Encore merci. Nuxwin Team |
| Bernard from nearby-an-airport Associate 6555 posts registered on Sep. 12 2003 |
Nuxwin: Si tu prépares un script shell pour Linux, je connais quelques personnes que ceci pourrait intéresser. Merci d'avance... |
| Nuxwin from Caen, devant mon bureau Member 190 posts registered on June 9 2006 |
Bernard : Bonjour ; Je peux bien faire ça mais je pense que Perl offrerais plus de possibilitées (La vérité c'est que je n'aime pas l'approche bash ).Pour exemple, je pourrais coder un programme qui opererait récursivement dans l'archive amont de yacs à la recherche de modules. Ce programme extrairait les chaînes, crérait les fichiers *.pot et *.po. Le programme serait invoqué avec x arguements offrant ainsi plusieurs possibilitées à l'utilisateur. Bien entendu, il faudrait aussi penser à gérer les exceptions au niveau des noms de certains *.pot qui diffèrent des fichiers sources. Qu'en pense-tu ? Si tu as une idée précise de ce que ce programme devrais pouvoir accomplir, n'hésite pas. Edit : Dans un premier temps, je pense qu'on pourrait axer le codage sur ton .bat. Voici le genre de résultat que l'utilisateur pourrait obtenir en mode debug : nuxwin@dev:~/Desktop/20071024-yacs-7-10beta24.tgz_FILES/tools$ ./build_pot.pl -v J'attends tes idées pour continuer. Nuxwin Team |
| Bernard from nearby-an-airport Associate 6555 posts registered on Sep. 12 2003 | Et bien, cela m'irait très bien, le propos étant d'avoir, pour les Unixiens, une solution complète d'extraction des chaînes de caractères et de fabrication des .pot et des .po de référence, équivalente à celle utilisée aujourd'hui sous Windows. Donc une commande qui analyse l'ensemble des scripts et qui, module par module, recrée le contenu des répertoires i18n/templates et aussi i18n/locale/en et i18n/locale/fr. Idéalement, une deuxième commande pourrait être fabriquée pour rafraichir les .po dans une autre langue. Merci par avance...
|
| Nuxwin from Caen, devant mon bureau Member 190 posts registered on June 9 2006 | Bernard : Bonsoir ; Je fais suite à notre discussion en te demandant si tu peux arranger ceci (je suis une vrai courge en anglais) : $0 Ver $VERSION D'avance merci. Nuxwin Team |
| Bernard from nearby-an-airport Associate 6555 posts registered on Sep. 12 2003 |
Pour information, courge se dit squash en anglais $0 Ver $VERSION A faire tester et vérifier par NickR, à l'occasion, et un grand merci pour ce boulot. Tu vas faire des heureux chez les Linuxiens... |
| Nuxwin from Caen, devant mon bureau Member 190 posts registered on June 9 2006 | Bonjour ; Dans le cadre du développement du présent script, je suis entrain de mettre en place certaines règles au niveau du nom des locales que l'utilisateur peut passer à l'option --locale. Je voulais donc savoir si on devais simplement autoriser la définition ISO 639 soit : # Set Locales Ou modifier ces règles de façon à accepter la définition ISO 3166-1. Merci d'avance pour la réponse. Ps : Merci pour la rectification du helper. Nuxwin Team |
Agnès![]() from le Grésivaudan (grenoble-chambéry) Associate 2007 posts registered on Feb. 13 2006 | Nuxwin : J'avoue que je ne comprends pas tout à votre discussion technique mais je peux t'assurer que je suis tout cela avec un grand intérêt. Je fais partie de ceux qui te remercieront bôôôôcoup de cette contribution !
|
| Bernard from nearby-an-airport Associate 6555 posts registered on Sep. 12 2003 |
Nuxwin: Tu me poses une colle, mais on pourrait au mons démarrer avec la première spécification, qui est aussi un RFC comme signalé dans ton code, et puis voir venir ensuite non ? |
| Nuxwin from Caen, devant mon bureau Member 190 posts registered on June 9 2006 |
Bernard : Oui, pas de problème, de toute façon, on pourra toujours modifier la chose si besoin. Je pense pouvoir fournir une première version ce jour. Par contre, faudra me dire comment je dois la publier. Merci. @agnes : Merci pour les encouragements Nuxwin Team |
| Nuxwin from Caen, devant mon bureau Member 190 posts registered on June 9 2006 | unix_build_pot.pl - v1.00 : Création des fichiers de langue pour le projet YACSCi-joint une première version du script à renommer en unix_build_pot.pl. Doit être placé dans le dossier ./tools et un chmod 0750 doit être appliqué dessus pour qu'il puisse être exécuté. A noter que l'utilisateur unix qui l'exécute doit avoir le droit d'écriture dans l'archive Yacs.UTILISATION : Ce programme permet aux utilisateurs des systèmes GNU-linux de créer automatiquement tous les fichiers de langues du projets YACS pour une localisation respectant la spécification ISO 639 (e.g. 'en', 'fr', 'ar'...) décrite dans la RFC 3066. A noter que dans l'immédiat, ce programme ne gère pas la spécification ISO 3166-1 (eg. 'en-uk', 'zh-cn' ...). Ce script peut être exécuté avec ou sans option(s). Exécuté sans option, ce script contruira les fichiers *.pot (Portable Object Template), *.po (Portable Object) et *.mo (Machine Object) de tous les modules du projet YACS, étant précisé que la localisation selectionnée par défaut est l'anglais. Comme évoqué ci-avant, le programme peut être invoqué avec une ou des options passées sur la ligne de commandes. Les options disponibles sont les suivantes : -?, h, --help Cette option affiche l'aide d'utilisation du script en Anglais -a, --availablesmod Cette option permet à l'utilisateur de prendre connaissance de la liste des modules disponibles. -b, --buildall=# Cette option permet à l'utilisateur de spécifier en argument un ou plusieurs modules pour lesquels les fichiers *.pot, *.po et *.mo seront générés. Si pour un module donné, le fichier *.po existe déjà, il sera simplement mis à jour. Si l'utilisateur passe l'agument ( all ) à cette option, les fichiers seront générés pour l'ensemble des modules disponibles. -G, --Genpot=# Cette option permet à l'utilisateur de spécifier en argument un ou plusieurs modules pour lesquels les fichiers *.pot seront générés. Si l'utilisateur passe l'argument ( all ) à cette option, les fichers *.pot seront générés pour l'ensemble des modules disponibles. A noter que la création des fichier *.pot est indépendante de la localisation. -g, --genpo=# Cette option permet à l'utilisateur de spécifier en argument un ou plusieurs modules pour lesquels les fichiers *.po seront générés. Si pour un module donné, le fichier *.po existe déjà, il sera simplement mis à jour. A noter que les fichiers *.pot rattachés au modules spécifiés doivent exister. -u, --updatepo=# Cette option permet à l'utilisateur de spécifier en argument un ou plusieurs modules pour lesquels les fichiers *.po seront mis à jour. Si l'utilisateur passe l'argument ( all ) à cette option, la mise à jour sera effectuée pour les fichiers *.po de tous les modules disponibles. A noter que les fichiers *.po rattachés aux modules spécifiés doivent exister. -c, --compile=# Cette option permet à l'utilisateur de spécifier en argument un ou plusieurs modules pour lesquels les fichiers *.mo seront générés. A noter que les fichiers *.po des modules concernés doivent exister. -l, --locale=# Cette option permet à l'utilisateur de specifier en argument une ou plusieurs localisation. Cette option peut être associée aux options --buildall, --genpo, --updatepo et --compile. Pour ce qui concerne l'association de cette option avec les options --updatepo et --compile, il s'agit uniquement de préciser la où les localisations pour lesquelles on souhaite soit mettre les fichiers *.po à jour soit créer les fichiers *.mo. A noter que si l'option --locale n'est pas paramétrée explicitement par l'utilisateur, la localisation selectionnée par défaut sera l'anglais ( en ). -d, v, --debug, --verbose Active le mode debug Vous noterez que le mixage des options --availablesmod, --buildall, --Genpot, --genpo, --updatepo et --compile n'est pas permis. Si vous tentez un mixage, une erreur sera retournée par le programme. Note complémentaire : Ce script à été développé de manière à ce que l'utilisateur final puisse effectuer des actions liées à la localisation de manière dirigée. Si le but est simplement de créer tous les fichiers de langue pour les localisation en et fr, comme le fait déjà le script dédié aux plateformes windows (script ./tools/script build_i18n.bat), l'utilisateur doit simplement exécuter le programme avec les options suivantes : ./unix_build.pot --locale=en-frou ./unix_build.pot --buildall=all --locale=en-frEnfin, si le but est simplement de mettre à jour les fichiers *.po pour la localisation fr, comme le fait déjà le script dédié aux plateformes windows (script ./tools/update_i18n.bat), l'utilisateur doit simplement exécuter le programme avec les options suivantes : ./unix_build_pot.pl --updatepo=all --locale=fr Note de conception : Le présent script est écrit en perl. Il ne requière pas de modules spéficiques supplémentaires que ceux installés avec perl de base. Le script à été testé sur Debian Etch et devrait normalement fonctionner correctement avec toutes les plateformes Linux. Note aux développeurs du projet YACS : Le liste des modules disponibles est incluse en dur dans le code source du programme. Si vous ajoutez ou supprimez un module du projet, il vous suffit d'éditer le tableau listant tous les modules soit la partie suivante du code : our $MODULES = ["root", "actions", "agents", "articles", "behaviors", "categories", "codes", "collections", "comments", "control", "dates", "decisions", "feeds", "files", "i18n", "images", "letters", "links", "locations", "overlays", "scripts", "sections", "servers", "services", "shared", "skins", "smileys", "tools", "tables", "users", "versions"]; Ne pas hésiter à me faire part de vos remarques (bonnes ou mauvaises) Nuxwin Team Fichier joint : unix_build_pot.pl Last Update : - Nov 05 - 01:27 |
Agnès![]() from le Grésivaudan (grenoble-chambéry) Associate 2007 posts registered on Feb. 13 2006 | Nuxwin : c'est un bien joli travail ! Et la doc ira avec, merci. On va bientôt pouvoir compléter la doc et faire l'annonce J'ai pas encore eu le temps de tester ton script, désolée, je suis débordée en ce moment. Mais je promets de le faire bientôt. Nick devrai pouvoir nous en dire plus... plus vite ----- Agnès Il n'y a pas de problèmes, que des solutions. |
Agnès![]() from le Grésivaudan (grenoble-chambéry) Associate 2007 posts registered on Feb. 13 2006 |
Nuxwin : J'ai un overlay à localiser en français. J'ai mis le script dans /tools (extension.pl), et mon overlay dans le répertoire overlays. Quels sont les prérequis sur ma machine ? Car quand je lance la commande, je récolte un "commande introuvable". J'avais commencé en tapant "unix_build...", puis j'ai vu qu'en fait c'était "unix-build...", enfin, j'ai essayé avec et sans l'extension : même résultat. La commande que j'ai tapée (en étant dans le répertoire tools) : unix-build-pot.pl --updatepo=overlays --locale=frJe suis sous ubuntu 7.04. Il y a des librairies perl installées - mais pas de serveur apache sur ma machine, je pense pas en avoir besoin. Faut-il vérifier d'autres choses ? (par ex. je me souviens sous windows, il m'a fallu installer gettext (là j'ai gettext et gettext-base d'installés) et rajouter un truc dans PATH pour que ça fonctionne - et là, y'a quelque chose du même genre à faire ? si oui où et comment ? Mais qu'est-ce que j'ai donc oublié là ? |
Agnès![]() from le Grésivaudan (grenoble-chambéry) Associate 2007 posts registered on Feb. 13 2006 |
Nuxwin : 'a y est, j'ai trouvé mes coquilles ! Alors résultat :
Encore un peu plus cultivée aujourd'hui
|
Agnès![]() from le Grésivaudan (grenoble-chambéry) Associate 2007 posts registered on Feb. 13 2006 |
Coucou, encore moi, avec un message qui me déroute : je tape ./unix-build-pot.pl --Genpot=all et le script me renvoie : ./unix-build-pot.pl --Genpot=all
xgettext: Chaîne non-ASCII repérée à overlays/recipelevel.php:31.
Veuillez spécifier l'encodage de la source avec l'option « --from-code »..Qu'est-ce à dire ? L'overlay (celui que j'ai retravaillé) est sur la base de recipe. J'ai rajouté des champs, et pile poil le premier est à la ligne 31. Pour autant, le script est encodé en UTF-8, mais comme tous les autres. Alors pourquoi il râle juste sur le bout de texte que j'ai tapé ? Ce sont des mots, juste des mots (donc des lettres toutes bêtes), entre quote : $label = i18n::s('Level of the recipe');. Pas d'accents et autres trucs bizarres (que j'aurai encodé de toutes manières).Comment sortir de ça ? une idée, quelqu'un ? Sinon, c'est quoi la syntaxe de l'option --from-code ? |
Agnès![]() from le Grésivaudan (grenoble-chambéry) Associate 2007 posts registered on Feb. 13 2006 | Allez, ça finit par fonctionner. Voilà où ce sont situés les problèmes :
Reste à comprendre pourquoi le message d'erreur de xgettext mentionne la ligne 31 si le problème se situe ligne 30... |
| Nuxwin from Caen, devant mon bureau Member 190 posts registered on June 9 2006 |
Agnès : bonsoir ; Je suis désolé, de ne pas t'avoir répondu en tant et en heures mais je viens seulement de prendre connaissance de tes posts. Bien que tu es réussie à tant sortir, est-ce qu'en définitif ce script fonctionne correctement, pense tu qu'il faut apporter des modifications ? Pour ce qui concerne le problème concernant le format d'entrée (ACSII), j'avoue que j'ai pas bien compris, tu peux ré-expliquer ? |
Agnès![]() from le Grésivaudan (grenoble-chambéry) Associate 2007 posts registered on Feb. 13 2006 | Nuxwin : pour le script, voici ce que j'ai fait :
En mettant à jour via ton script overlays.po (--updatepo=overlays --locale=en-fr), je récolte ceci sur la console : ...:~/Desktop/712test/tools$ ./unix-build-pot.pl --updatepo=overlays --locale=fr Bref, je comprends pas tout, mais j'ai une cagouille quelque part - et je sais pas du tout d'où ça vient, y compris moi peut-être. Je te joins le script (à peine) modifié qui me pose problème, si tu veux faire des tests - au moins pour voir si ton script est hors de cause. Je me tournerai alors vers mon espace entre la chaise et le clavier...). Pour les messages, pas de soucis. Le transfert du domaine de Yetanoz a duré quelques bonnes paires d'heures, et si le contenu était hébergé sur paxer.info - donc j'ai pu poster - les mails n'étaient plus en service le temps du transfert - donc pas d'alerte. Enfin, pour l'ascii, je comprends pas tout non plus. En fait, j'avais simplement fait une erreur puisque j'avais laissé un caractère accentué sans le coder - le coup de l'erreur entre la chaise et le clavier, classique). |
Agnès![]() from le Grésivaudan (grenoble-chambéry) Associate 2007 posts registered on Feb. 13 2006 |
(le fichier n'est pas passé, je retente) file 709 |
Rate this page
Posted by Nuxwin on Oct. 29 2007, edited by Nuxwin on Jan. 2, (popular)
).

!
) pour se faire expliquer le pourquoi du comment du