Table des matières

, , ,

PO4A : PO for Anything

Présentation

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

Le programme extrait les phrases à traduire à partir de plusieurs formats de fichiers et les transforme en un fichier POT (*.pot), puis en fichier PO (*.po) pour chaque langue cible souhaitée.

Une fois les traductions insérées manuellement dans le fichier PO (*.po), la traduction du fichier de départ est générée dans le même format que la source.

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

po4a 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 :

Fonctionnement

En ligne de commande. Le programme est écrit en Perl et utilise les outils gettext.

Le programme se décline en 5 commandes :

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

Format de fichiers supportés

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

Prise en main, première utilisation

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. pour chaque ligne de documents à traduire, le type de document dont il s'agit (ici XML), l'emplacement du fichier de départ et l'emplacement du fichier de destination.

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 !

  1. 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é).
  2. Astuce : utilisez une langue bidon appelée par exemple "test" lors des essais du fichier de configuration.
  3. Attention : pour ne pas écraser le document à traduire, ne donnez pas le même chemin et nom au fichier traduit !

Les options

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.

Mode "splitted" ou mode "single" ?

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:

Les addendas

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.

Précisions sur les types de fichiers en XML

  # remplacement de type par un autre pour voir la différence !
  # ...
  [type: xml]	help/C/how-to.xml		$lang:help/$lang/how-to.xml
  # ...

Traduction proprement dite : Les fichiers PO (*.po)

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).

Avantages, inconvénients de po4a

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.

À faire !

Références