Cette page est en cours de rédaction.
Apportez votre aide…

PO4A : PO for Anything

Po4a, acronyme de "PO 4 (for) Anything" est un programme d'aide à la traduction et à la maintenance des traductions de logiciels et de documents.

Il extrait les phrases à traduire de plusieurs formats de fichiers en les transformant en un fichier POT (*.pot), puis en fichier PO (*.po) pour chaque langue de traduction souhaitée.

une fois les traductions insérées manuellement dans le fichier PO (*.po), il crée la traduction du fichier de départ dans son format d'origine.

  Action de po4a: *.xml > *.pot > *.fr.po > (traduction manuelle) > *.fr.po > *.fr.xml.

Il est capable de faire des mises à jour des fichiers POT, PO, et de la traduction uniquement pour les fichiers qui le nécessitent (à la façon de make), en fonction des modifications des fichiers source et des fichiers PO :

  • si et seulement si le ou les fichiers source à traduire sont modifiés, les fichiers POT et PO sont mis à jour ;
  • si et seulement si le ou les fichiers PO sont modifiés, les fichiers traduits sont mis à jour ;
  • les fichiers POT et les fichiers traduits ne doivent pas être modifiés à la main : po4a se charge de tout !
  • vous pouvez vous concentrer sur le travail le plus utile: la traduction du ou des fichiers PO, que po4a met à jour pour vous si et seulement si le fichier dans la langue source est modifié.

Il est en ligne de commande, est écrit en Perl et utilise les outils gettext.

Il se décline en 5 commandes :

  • po4a
  • po4a-gettextize
  • po4a-updatepo
  • po4a-translate
  • po4a-normalize.

La commande la plus utile est po4a ! Les autres sont "châpeautées" par po4a, autant s'en passer pour un usage basique !

Quelques formats de fichiers supportés : # Manuels (man), C/C++, C#, JAVA, PERL, PHP, Python, TCL,Glade, SGML, XML, …

Le synopsis de la syntaxe est le suivant :

 po4a [options] <fichier de configuration>

Le fichier de configuration

Commençons par un exemple : imaginons que vous voulez traduire la documentation d'un paquet de documentation Linux ; le document d'origine est en anglais américain, son arborescence est (entre autres) la suivante :

  paquet_linux ---> guide/C/fichiers à traduire
               |--> help/C/fichiers à traduire

Voyons un exemple de fichier de configuration, créé dans le dossier racine :

  # fichier "po4a.cfg"
  #
  # template languages
  #[po4a_langs] test
  [po4a_langs] fr de jp en_GB
  #
  # paths to POT and PO
  # single
  [po4a_paths] po/guide.pot $lang:po/guide.$lang.po
  # splitted
  #[po4a_paths] po/$master.pot $lang:po/$lang/$master.po
  # documents to translate
  # [type]	source				translation
  [type: docbook]	guide/C/appendixa.xml		$lang:guide/$lang/appendixa.xml
  [type: docbook]	guide/C/appendixb.xml		$lang:guide/$lang/appendixb.xml
  [type: docbook]	guide/C/appendixc.xml		$lang:guide/$lang/appendixc.xml
  [type: docbook]	help/C/how-to.xml		$lang:help/$lang/how-to.xml
  # ... autant de documents que nécessaire

Le fichier de configuration "po4a.cfg" indique à po4a :

  1. de traduire les documents dans les langues suivantes : en français (fr), allemand (de), japonais (jp), anglais britannique (en_GB).
  2. les dossiers et fichiers où seront stockés les fichiers POT (*.pot) et les fichiers PO (*.PO). Ils sont stockés dans un dossier séparé (po) qu'il faut créer AVANT d'exécuter po4a.
  3. indique pour chaque ligne de documents à traduire : de quel type de document il s'agit (ici XML), l'emplacement du fichier de départ, l'emplacement du fichier de destination.
  4. LES SEULS FICHIERS À MODIFIER (traduire) SERONT LES *po ! Tous les autres (*.pot, *xml d'origine et de départ) ne doivent pas être édités !
  5. Astuce : ici nous sommes en mode "single" (un seul) ; il faut commenter sa ligne et décommenter la ligne en dessous de "splitted" pour passer en mode "splitted" (séparé).
  6. Astuce : utiliser une langue bidon appelée par exemple "test" lors des essais du fichier de configuration.
  7. Attention : pour ne pas écraser le document à traduire, ne donnez pas le même chemin et nom au fichier traduit !

Nous décrirons les deux plus utiles, cf le manuel de po4a pour les autres. De toutes façon, elles ne sont pas indispensables pour un usage basique.

Pourcentage exigible de traduction: -k%

Indique à po4a le pourcentage exigible de traduction dans le ou les fichiers PO (*.po) pour que les documents de traduction soient créés : par défaut 80%. syntaxe :

    po4a -kXX po4a.cfg

Au moins pour tester le fonctionnement, il peut être utile d'obliger po4a à traduire même sans aucune traduction faite (chaque ligne du fichier PO conservera alors la phrase dans la langue d'origine, sans aucune traduction).

    po4a -k0 po4a.cfg

Ne pas traduire: --no-translations

    po4a --no-translations po4a.cfg

Indique à po4a de se limiter à la création ou la mise à jour des fichiers POT (*.pot) et PO (*.po), sans créer le ou les documents traduits. Tant que les fichiers PO ne sont pas traduits, cette option peut être utile.

En mode "single", le fichier POT peut être unique et commun à tous les documents (dans notre exemple, toutes les lignes à traduire seront mises dans guide.pot et guide.fr.po par exemple), ou individuels pour chaque document : chaque document à traduire aura son .pot et son .fr.pot. Dans tous les cas, la traduction des documents restitués sera faite fichier par fichier dans la langue de destination. Chacun a ses avantages et ses inconvénients:

  • Le mode "single" permet d'avoir toutes les phrases à traduire dans le même fichier ; toutes les lignes identiques d'un fichier à l'autre ne seront à traduire qu'une seule fois. Avec de très nombreux petits fichiers, surtout s'ils reprennent les mêmes lignes à traduire (interfaces de logiciels par exemple) , le mode "single" est à bénéficier.
  • Le mode "splitted" crée un fichier PO séparé pour chaque document à traduire : la tâche de traduction peut plus facilement être répartie entre plusieurs traducteurs. Il convient mieux aux gros fichiers, surtout s'ils sont nombreux.

Les addendas sont des ajouts, des rustines, que l'on peut être amené à apporter aux documents traduits : leur contenu sera intégré aux documents traduits.

Ça peut être n'importe quoi : un copyright de traduction, des notes de traduction, une amélioration du document traduit.

En revanche, il n'est pas possible de supprimer du texte à traduire, sauf à enlever des fichiers à traduire de la liste du fichier de configuration : ça peut par exemple être utile pour un fichier de licence ou de copyright, bien spécifique à la langue d'origine, et qui a déjà été traduit d'autre part.

Voici la syntaxe avec addendas :

  [type: <format>] <doc_maître> <lang>:<doc_traduit>* add_<lang>:<addendum>*

Revoici notre fichier de configuration d'exemple avec les addendas :

  # fichier "po4a_addendas.cfg"
  #
  # template languages
  #[po4a_langs] test
  [po4a_langs] fr de jp en_GB
  #
  # paths to POT and PO
  # single
  [po4a_paths] po/guide.pot $lang:po/guide.$lang.po add_$lang:po/guide.$lang.add
  # splitted
  #[po4a_paths] po/$master.pot $lang:po/$lang/$master.po add_$lang:po/$lang/$master.add
  # documents to translate
  # [type]	source				translation
  [type: docbook]	guide/C/appendixa.xml		$lang:guide/$lang/appendixa.xml
  [type: docbook]	guide/C/appendixb.xml		$lang:guide/$lang/appendixb.xml
  [type: docbook]	guide/C/appendixc.xml		$lang:guide/$lang/appendixc.xml
  [type: docbook]	help/C/how-to.xml		$lang:help/$lang/how-to.xml
  # ... autant de documents que nécessaire

Les fichiers d'addenda (d'Ajout) seront ajoutés tels quels au fichier traduit.

NB: à notre avis, l'utilisation des addendas est à limiter ou du moins éviter, surtout s'il s'agit d'étoffer le document d'origine : autant le faire sur celui dans la langue d'origine, à condition de la parler bien sûr !

Pour ce qui est des informations sur le nom du traducteur, la date de traduction… Elle peuvent être mises dans l'entête du document traduit par les éditeurs de traduction (poedit, gtranslator…) ou par les commandes.

  • Le type de fichier "xml" sert surtout comme base à des sous-modules: "docbook", "dia", "xhtml", etc. Il ne devrait pas être utilisé directement, même s'il peut l'être.
  • En précisant correctement le type du fichier à traiter, certaines options sont appliquées directement sans avoir à les préciser dans la liste des options.
  • les fichiers au format "docbook" sont des fichiers xml purs : il est possible d'indiquer à po4a que c'est du xml, mais le fichier sera traité différemment et beaucoup mieux en indiquant que c'est du "docbook": en effet, les fichiers "docbook" sont des fichiers de documentation, et chaque paragraphe (balise <para></para>) contient plusieurs phrases non séparées par des balises, et éventuellement d'autres balises : mise en forme (italique, souligné, gras…), raccourcis de menus, etc.
  • Typés comme "xml", les éléments à traduire sont systématiquement coupés à chaque balise, et une balise au milieu d'un paragraphe sera mise dans une ligne à traduire (msgid/msgtr) à part, et le paragraphe séparé d'office en lignes distinctes à traduire, y compris au milieu de phrase… Bref, tout ceci n'est pas pratique pour traduire une documentation ! Il vaut mieux typer comme du "docbook" !
  • Pour faire un essai comparatif, remplacez le type de fichier docbook par xml, et comptez le nombre de lignes à traduire, qui sera différent :
  # remplacement de type par un autre pour voir la différence !
  # ...
  [type: xml]	help/C/how-to.xml		$lang:help/$lang/how-to.xml
  # ...

Repousser cette section dans une page spécifique serait le bien venu !

Edition des fichiers

Une fois po4a exécuté une première fois, les fichiers PO peuvent être édités avec Lokalize, poedit, gtranslator, dont voici les différences :

  1. Lokalize est le plus abouti et est sous KDE. Pour traduire une documentation, il a l'avantage de laisser l'arborescence des phrases à traduire dans l'ordre du fichier à traduire, même une fois les phrases traduites ; il affiche le source à côté des phrases traduites et à traduire…

Les autres :

  1. gtranslator fournit une arborescence avec 3 dossiers : phrases non traduites, traductions approximatives (douteuses à améliorer), phrases traduites. C'est la fonctionnalité manquante à poedit pour dominer gtranslator !
  2. poedit fournit un gestionnaire de catalogue de fichiers PO du répertoire et des sous-répertoires de travail, ce qui facilite le passage d'un document à traduire à l'autre. Une autre commande de poedit est censée générer une mémoire de traduction (base de donnée) à partir de tous les fichiers *.po des dossiers que vous lui indiquez sur votre machine (d'un dossier racine et de ses arborescences) avec toutes les phrases trouvées : je ne suis pas parvenu à la faire marcher (ça pédale dans la semoule, et il faut tuer poeditor).
  3. poedit propose dans la fenêtre préférences, une liste d'analyseurs (de documents à traduire) ; leur appel est basé sur gettext-kde, qui rappelons-le ne marche pas avec les fichiers XML ; il faudrait remplacer par une commande po4a, une fois que la syntaxe est trouvée…
  4. Les deux ont le défaut de ne pas avoir de bouton à cliquer lorsque la traduction d'une phrase est faite (la touche entrée et la touche de tabulation ne fonctionnent pas car utilisées dans l'entrée du texte): au départ, c'est déroutant, et il faut en fait cliquer sur une autre ligne à traduire pour que la traduction entrée soit intégrée.
  5. Aucune liste de mots clés ni de groupes de mots ou de phrases clés n'est disponible. Utilité des mots-clés : par exemple si vous traduisez "Whitesnow", une fois le mot clé associé "Blancheneige", toutes ses occurrences devraient être remplacées automatiquement dans le document traduit. Pour les phrases clés de même, dans l'exemple du XML, po4a extrait ce qui est dans la balise <para></para>, qui peut contenir une ou plusieurs phrases ou groupes de mots déjà traduits autre part !

Regroupement des fichiers PO: msgmerge

msgmerge (message merge: "mélange de messages") n'est pas fourni par po4a, mais est un outil gettext.

Les fichiers PO peuvent être associés en un seul par la commande msgmerge

Par exemple le travail de traduction est séparé avec le mode "splitted" pour que chacun traduise une partie le week-end… Et le lundi tout le monde associe sa partie traduit dans le PO créé en mode "single" (guide.pot et guide.fr.po dans notre exemple).

Inconvénients :

  1. Le type de ficher à traduire doit être précisé pour chaque fichier, et il serait pratique que po4a le "devine" tout seul, via l'extension et le type de fichier par exemple, au moins pour les cas simples.
  2. Il n'est pas possible d'utiliser de "jockers" pour la liste des fichiers à traduire ; pouvoir dire à po4a de préparer à la traduction tous les fichiers *.xml par exemple, avec des exceptions inscrites dans une liste du type POTFILE.ignore. Il n'est pas possible non plus de fournir la liste à traduire et celle de fichiers à ignorer dans un fichier externe au fichier de configuration.
  3. Je n'ai pas trouvé comment générer une liste de mots-clés avec po4a !

Avantages :

  1. Obtenir une traduction du fichier à traduire dans le format de fichier de départ, et pas seulement de deux fichier POT et PO !
  2. éviter d'éditer un fichier (par exemple XML +++) dans un environnement de programmation ou un traitement de texte, avec le risque d'endommager les balises XML adjacentes au texte à traduire.
  3. Une fois traduits, les fichiers PO générés peuvent servir et resservir tels quels pour d'autres projets que le fichier d'origine, voire être mis en commun pour avoir une base de traduction commune.
  • Traduire ! po4a ne le fait pas à votre place. Il fait seulement le sale boulot pour vous : extraire les phrases à traduire et créer le document traduit !
  • Comme pour toute traduction, il faut relire et faire relire le fichier traduit : erreurs typographiques, orthographiques, grammaticales et contre-sens doivent être traquées. Comme pour cette page !
  • Vous pouvez rejoindre les communautés de traduction avec vos fichiers PO traduits! cf. aide à la traduction.
  • site de po4a, traduit en français!
  • le manuel de po4a: faire "man 7 po4a" une fois installé: et c'est traduit en français!
  • po4a.txt
  • Dernière modification: Le 20/08/2016, 13:30
  • (modification externe)