NOM
po4a - Cadre de travail pour la traduction de documentations et autres
documents
Introduction
L'objectif du projet po4a [PO for anything -- PO pour tout] est de
simplifier la traduction (et de façon plus intéressante, la maintenance
des traductions) en utilisant les outils gettext dans des domaines pour
lesquels ils n'étaient pas destinés, comme la documentation.
Ce document est organisé de la manière suivante :
1 Pourquoi utiliser po4a ? A quoi cela sert-il ?
Cette section d'introduction explique les motivations du projet et
sa philosophie. Vous devriez le lire si vous cherchez à évaluer
po4a pour vos traductions.
2 Comment utiliser les fonctionnalités de po4a ?
Cette section est une sorte de manuel de référence qui cherche à
répondre aux questions des utilisateurs et qui vous donnera une
meilleure compréhension de son fonctionnement. Il vous donnera les
bases de l'utilisation de po4a et sert d'introduction à la
documentation des outils spécifiques.
Comment commencer une nouvelle traduction ?
Comment convertir la traduction en un fichier de documentation ?
Comment mettre à jour une traduction faite avec po4a ?
Comment convertir une traduction pré-existante à ce système ?
Comment ajouter des choses n'étant pas des traductions (comme le
nom du traducteur) ?
Comment automatiser tout ceci ?
Comment personaliser po4a ?
3 Comment ça marche ?
Cette section vous donne un bref aperçu des rouages internes de
po4a afin que vous vous sentiez plus à même de nous aider à le
maintenir et l'améliorer. Elle peut également vous permettre de
comprendre pourquoi cela ne fait pas ce que vous souhaitez et
corriger vos problèmes par vous-même.
4 FAQ
Cette section regroupe les questions le plus souvent posées. En
fait, la plupart d'entre elles sont des questions de design du
projet. Si vous pensez que po4a n'est pas la bonne réponse au
problème de traduction de documentation, lisez cette section avant
de nous donner votre avis sur la liste de diffusion
<po4a-devel@lists.alioth.debian.org>. Votre avis nous intéresse.
5 Notes spécifiques à certains modules
Cette section présente les spécificités de chaque module du point
de vue du traducteur et de l'auteur original. Lisez le pour prendre
connaissance du format des traductions pour ce module et les règles
à suivre dans le document original pour rendre le travail des
traducteurs plus simple.
Cette section ne fait pas vraiment partie de ce document, mais elle
est placée dans chaque documentation des modules. Ceci permet de
s'assurer que les informations sont à jour en conservant la
documentation et le code ensemble.
Pourquoi utiliser po4a ? Dans quel domaine est-il bon ?
J'aime le concept des logiciels à sources ouverts, qui permettent de
donner à tous un accès au logiciel et à son code source. Mais, étant
moi-même français, je suis conscient que la licence n'est pas le seul
frein à l'ouverture d'un logiciel : les logiciels non traduits, même
s'ils sont libres,sont sans aucune utilité pour ceux qui ne comprennent
pas l'anglais, et il y a encore beaucoup de travail pour les rendre
accessibles à vraiment tout le monde.
La perception du problème par les acteurs du développement libre s'est
fortement accélérée récemment. Nous, les traducteurs, avons gagné une
première bataille et avons convaincu tout le monde de l'importance des
traductions. Mais c'est malheureusement la partie la plus facile. Il
faut maintenant réaliser tout le travail, traduire tous les documents.
Les logiciels aux sources ouverts bénéficient d'un niveau de traduction
relativement bon, grâce à la formidable suite d'outils gettext. Ces
outils permettent d'extraire les chaînes à traduire du programme, de
les présenter sous une forme standard pour les traducteurs, puis
d'utiliser le résultat de leur travail lors de l'exécution pour
afficher les messages traduits aux utilisateurs.
Mais cette situation est assez différente en ce qui concerne les
documentations. Trop souvent, la documentation traduite n'est pas assez
visible (pas distribuée avec le programme), seulement partielle ou pas
à jour. Cette dernière situation est de loin la moins bonne. Les
traductions pas à jour peuvent se révéler plus embêtantes pour les
utilisateurs que l'absence de traduction parce que d'anciens
comportements d'un programme peuvent y être décrits, mais ne plus être
en vigueur.
La problématique
La traduction des documentations n'est pas une tâche difficile en
elle-même. Les textes sont bien plus longs que les messages des
programmes, ce qui rend leur traduction plus longue, mais il n'y a
aucune difficulté technique à faire ceci. La difficulté vient en fait
de la maintenance de la traduction. La détection des parties ayant été
modifiées (et nécessitant une mise à jour) est une tâche très
difficile, ce qui explique que tant de traductions ne correspondent
plus à la version originale.
La réponse de po4a
La maintenance de la traduction est donc la raison première de po4a. La
façon de faire de gettext a été réutilisée dans ce but. Comme avec
gettext, des chaînes de texte sont extraites de leur emplacement
d'origine de façon à être présentées de manière standardisée aux
traducteurs. Les outils de gettext sont ensuite utilisés pour aider le
traducteur à faire son travail lorsqu'une nouvelle version du document
est disponible. Mais, à la différence de l'utilisation classique de
gettext, les traductions sont réinjectée dans la structure du document
d'origine de façon à pouvoir les utiliser ou les distribuer comme les
documents de la version anglaise.
Grâce à ceci, la détection des parties du document qui nécessitent une
mise à jour est très facile. Un autre avantage est que l'outil va faire
une bonne partie du travail lorsque seule la structure du document a
été modifiée et que des chapitres ont été déplacés, rassemblés ou
redécoupés. En extrayant le texte à traduire de la structure du
document, il permet également de masquer la complexité de la mise en
page et réduit les chances d'avoir un document défectueux (même s'il
reste un risque).
Veuillez également consulter la FAQ plus bas dans ce document pour une
liste plus complète des avantages et inconvénients de cette approche.
Formats pris en charge
Actuellement, cette approche a été implémentée avec succès pour un
certain nombre de formats de mise en page de texte.
man
Le bon vieux format des pages de manuel, utilisé par beaucoup de
programmes. Le support de po4a pour ce format est très utile parce que
ce format est assez compliqué, surtout pour les débutants. Le module
Locale::Po4a::Man(3pm) supporte également le format mdoc, utilisé par
les pages de manuel BSD (également assez fréquentes sous Linux).
pod
C'est le format pour la documentation en ligne de Perl (Perl Online
Documentation). Le langage et ses documentations sont documentés de
cette façon, ainsi que la plupart des scripts Perl existants. Il permet
de garder la documentation plus fidèle au code en les intégrant tous
deux au même fichier. Il rend la vie du programmeur plus simple, mais
malheureusement pas celle du traducteur.
sgml
Même s'il est de plus en plus remplacé par le XML, ce format est encore
assez utilisé pour les documents dont la taille dépasse plusieurs
écrans. Il permet de faire des livres complets. La mise à jour de
documents aussi longs est un vrai cauchemar. diff(1) se montre souvent
inutile quand le document original a été réindenté après une mise à
jour. Heureusement, po4a vous aide dans cette tâche.
Actuellement, seules les DTDDebianDoc et DocBook sont prises en charge,
mais l'ajout d'une nouvelle est très facile. Il est même possible
d'utiliser po4a avec une DTDSGML inconnue sans modifier le code en
fournissant les informations nécessaires sur la ligne de commande.
Veuillez consulter Locale::Po4a::Sgml(3pm) pour plus de détails.
TeX / LaTeX
Le format LaTeX est un format majeur utilisé pour les documentations
dans le monde du logiciel libre ou pour des publications. Le module
Locale::Po4a::LaTeX(3pm) a été testé avec la documentation de Python,
un livre et avec quelques présentations.
texinfo
Toutes les documentations du projet GNU sont écrites dans ce format
(c'est même une des exigences pour devenir un projet officiel du projet
GNU). Le support pour Locale::Po4a::Texinfo(3pm) dans po4a en est
encore à ses débuts. Veuillez nous envoyer des rapports de bogue ou des
demandes de nouvelle fonctionnalité.
xml
Le format XML est à la base de beaucoup de formats pour la
documentation.
A ce jour, la DTDDocBook est prise en charge par po4a. Veuillez
consulter Locale::Po4a::Docbook(3pm) pour plus de détails.
autres
Po4a peut également gérer des formats plus rares et plus spécifiques,
tels que celui de la documentation des options de compilation des
noyaux 2.4.x ou les diagrammes produits par l'outil dia. L'ajout d'un
nouveau format est souvent très simple et consiste principalement à
fournir un interpréteur pour le format voulu. Veuillez consulter
Locale::Po4a::TransTractor(3pm) pour plus d'informations à ce sujet.
Formats non supportés
Malheureusement, po4a ne supporte pas encore certains formats utilisés
pour les documentations.
Il y a une quantité d'autres formats que nous aimerions supporter avec
po4a ; et pas seulement des formats de documentation. En fait, nous
visons toutes les niches laissées par les outils gettext classiques.
Cela va de la traduction de la documentation des descriptions des
paquets Debian et paquetages rpm, aux questions posées par les
scripts d'installation, en passant par les fichiers changelog, et de
tous les formats spécifiques tels que les scénarios de jeux ou les
fichiers de ressource pour wine.
Comment utiliser po4a ?
Cette section est une sorte de manuel de référence qui cherche à
répondre aux questions des utilisateurs et qui vous donnera une
meilleure compréhension de son fonctionnement. Il vous donnera les
bases de l'utilisation de po4a et sert d'introduction à la
documentation des outils spécifiques.
Résumé graphique
Le schéma suivant donne un aperçu du processus mis en oeuvre pour la
traduction de documents avec po4a. Ne soyez pas effrayés par son
apparente complexité, qui est due au fait que le processus complet y
est présent. Une fois que vous avez converti votre projet à po4a, seule
la partie de droite du graphique est utilisée.
Notez que maitre.doc est pris pour exemple de documentation à traduire
et traduction.doc est la traduction correspondante. L'extension
pourrait être .pod, .xml ou .sgml en fonction du format. Chaque partie
de la figure est détaillée dans les sections suivantes.
maitre.doc
|
V
+<-----<----+<-----<-----<--------+------->-------->-------+
: | | :
{traduction} | { mise à jour de maitre.doc } :
: | | :
XX.doc | V V
(optionnel) | maitre.doc ->-------->------>+
: | (nouveau) |
V V | |
[po4a-gettextize] doc.XX.po--->+ | |
| (ancien) | | |
| ^ V V |
| | [po4a-updatepo] |
V | | V
traduction.pot ^ V |
| | doc.XX.po |
| | (I<fuzzy>) |
{ traduction } | | |
| ^ V V
| | {édition manuelle} |
| | | |
V | V V
doc.XX.po --->---->+<---<-- doc.XX.po addendum maitre.doc
(initial) ( jour) (optionnel) ( jour)
: | | |
: V | |
+----->----->----->------> + | |
| | |
V V V
+------>-----+------<------+
|
V
[po4a-translate]
|
V
XX.doc
(à jour)
La partie gauche illustre la conversion d'une traduction n'utilisant
pas po4a. En haut de la partie droite est présent ce qui est du ressort
de l'auteur du document d'origine (la mise à jour de la documentation).
Au milieu de la partie de droite se trouve la partie automatisée par
po4a. Les nouvelles chaînes sont extraites et comparées avec la
traduction existante. Pour celles qui n'ont pas changé, la traduction
précédente est utilisée. Celles qui ont été en partie modifiées sont
également associées à leur ancienne traduction, mais avec un marquage
spécifique indiquant que la traduction doit être mise à jour. La partie
du bas indique comment le document formaté est construit.
En fait, en tant que traducteur, la seule opération manuelle consiste
en l'étape indiquée par {édition manuelle}. En effet, nous nous en
excusons, po4a aide à la traduction, mais il ne traduit rien pour
vous...
Comment commencer une nouvelle traduction ?
Cette section présente les étapes nécessaires pour débuter une nouvelle
traduction avec po4a. Les modifications à appliquer pour la conversion
d'un projet existant sont détaillées dans la section correspondante.
Voici les étapes permettant de commencer une traduction avec po4a :
- Extraction du texte du document d'origine <maitre.doc> qui doit être
traduit dans <traduction.pot>, un nouveau fichier POT (le format
utilisé par gettext). Pour ceci, utilisez po4a-gettextize de cette
façon :
$ po4a-gettextize -f <format> -m <maitre.doc> -p <traduction.pot>
Naturellement, <format> est le format du document maitre.doc et la
sortie est placée dans traduction.pot. Veuillez consulter
po4a-gettextize(1) pour plus de détails concernant les options
existantes.
- Traduit réellement ce qui doit être traduit. Pour cela, vous devez
renommer le fichier POT en doc.XX.po (o XX est le code ISO639 de la
langue vers laquelle vous êtes en train de traduire, c.-à-d. fr pour
le français), puis éditer ce fichier. C'est souvent une bonne idée de
ne pas nommer le fichier XX.po pour éviter de confondre ce fichier
avec la traduction des messages du programme, mais vous faites comme
vous voulez. N'oubliez pas de mettre à jour les en-têtes du fichier
PO, ils sont importants.
La traduction peut être réalisée avec emacs(1) et son mode PO ou
Lokalize (basé sur KDE) ou Gtranslator(1) (basé sur GNOME) ou encore
n'importe quel programme que vous préférez utiliser pour l'édition de
ces fichiers. Un bon vieux vi(1) fera l'affaire, même s'il n'y a pas
de mode spécial pour ce type de tâche.
Si vous voulez en apprendre plus à ce sujet, vous voudrez
probablement consulter la documentation de gettext, disponible dans
le paquet gettext-doc.
Comment convertir la traduction en un fichier de documentation ?
Une fois que la traduction est effectuée, il faut générer la
documentation traduite et la distribuer avec l'original. Pour cela,
utilisez po4a-translate(1) de cette façon (XX représente le code de la
langue) :
$ po4a-translate -f <format> -m <maitre.doc> -p <doc.XX.po> -l <XX.doc>
Comme précédemment, <format> est le format du document maitre.doc. Mais
cette fois-ci, le fichier PO fourni en paramètre de l'option -p est un
fichier d'entrée. Il s'agit de votre traduction. La sortie se trouve
dans le fichier XX.doc.
Veuillez consulter po4a-translate(1) pour plus de détails.
Comment mettre à jour une traduction faite avec po4a ?
Pour mettre à jour votre traduction lorsque l'original maitre.doc a
changé, utilisez po4a-updatepo(1) comme ceci :
$ po4a-updatepo -f <format> -m <nouveau_maitre.doc> -p <ancien.XX.po>
Veuillez consulter po4a-updatepo(1) pour plus de détails.
Naturellement, les nouveaux paragraphes de ce document ne seront pas
traduits par magie dans le fichier "PO" par cette opération, et vous
devrez mettre à jour le fichier "PO" manuellement. De la même façon,
vous devrez vérifier les traductions des paragraphes qui ont été
légèrement modifiés. Pour vous assurer que vous n'en oubliez pas, ils
sont marqués comme approximatifs (fuzzy) pendant cette phase, et vous
devrez retirer cette marque avant d'utiliser la traduction avec
po4a-translate. Comme pour la traduction originelle, vous pouvez
utiliser votre éditeur de fichier PO préféré.
Une fois que votre fichier "PO" est de nouveau à jour, sans aucune
chaîne non traduite ou marquée comme approximative (fuzzy), vous
pouvez générer un fichier de documentation traduit, comme expliqué dans
la section précdente.
Comment convertir une traduction pré-existante à ce système ?
Souvent, vous traduisez manuellement le document sans difficult, jusqu'
ce qu'une rorganisation majeure du document d'origine maitre.doc
apparaisse. Alors, aprs quelques essais infructueux en utilisant diff
ou des outils similaires, vous voulez convertir la traduction po4a.
Mais bien sr, vous ne souhaitez pas perdre votre traduction existante
dans le mme temps. Pas de panique, ce cas est aussi gr par les outils
de po4a et est appel gettextization.
Le point important pour ceci est d'avoir la mme structure de document
pour l'original et la version traduite, de faon ce que les outils
associent leur contenu correctement.
Si vous avez de la chance (c.--d., si les structures des deux documents
se correspondent parfaitement), ceci fonctionnera sans soucis, et vous
n'en aurez que pour quelques secondes. Sinon, vous allez comprendre
pourquoi ce processus a un nom si barbare, et vous devriez vous prparer
une tche ingrate. Dans tous les cas, souvenez-vous que c'est le prix
payer pour bnficier du confort que po4a vous apportera par la suite. Le
point positif est que vous n'aurez faire cela qu'une seule fois.
Ceci ne sera jamais rpt suffisamment: afin de faciliter ce processus,
il est trs important de trouver la version exacte qui a t utilise pour
raliser la traduction. La meilleure situation est quand vous avez not
la version CVS lors de la traduction.
a ne fonctionnera pas trs bien si vous utilisez le document d'origine
mis
jour avec l'ancienne traduction. a reste possible, mais sera plus
compliqu et doit tre vit autant que possible. En fait, je pense que si
vous n'arrivez pas trouver le document original, la meilleure solution
est de trouver quelqu'un pour faire la gettextization pour vous (mais,
s'il vous plat, pas moi;).
Je dramatise peut-tre un peu trop ici. Mme lorsque tout ne se passe pas
bien, c'est bien plus rapide que de tout retraduire. J'ai pu raliser
une gettextization de la traduction franaise de Perl en un jour, mme si
les choses ne se sont pas bien passes. Il y avait plus de deux
mgaoctets de textes, et une nouvelle traduction aurait pris des mois.
Voici d'abord la procdure, puis nous reviendrons sur les astuces qui
permettent d'y parvenir avec succs lorsqu'il y a un problme. Pour
faciliter la comprhension, rutilisons encore une fois l'exemple
prcdent.
Une fois que vous avez l'ancien maitre.doc correspondant la traduction
XX.doc, la gettextization peut tre faite directement dans doc.XX.po
sans traduction manuelle du fichier traduction.pot:
$ po4a-gettextize -f <format> -m <ancien_maitre.doc> -l <XX.doc> -p <doc.XX.po>
Si vous avez de la chance, c'est fini. Vous avez converti votre
ancienne traduction pour po4a et pouvez commencer la phase de mise
jour qui suit. Utiliser la procdure dcrite quelques sections auparavant
pour synchroniser votre fichier PO avec le nouveau document original,
et mettez jour votre traduction en consquence.
Veuillez noter que mme si tout semble s'tre bien pass, il reste une
possibilit que des erreurs se soient introduites au cours du processus.
En fait, po4a est incapable de vrifier que les chanes correspondent
l'original, et il marque toutes les chanes comme approximatives (fuzzy)
au cours de cette procdure. Vous devriez vrifier chacune d'elle
soigneusement avant de retirer ces marques.
Souvent, la structure du document ne correspond pas exactement, ce qui
empche po4a-gettextize de faire son travail correctement. Pour
contourner cela, vous pouvez diter les fichiers afin de faire
correspondre leur structure.
La section "Gettextization: Comment a marche?" ci-dessous pourra vous
aider. La comprhension du fonctionnement interne vous aidera raliser
cette tche. Par chance, po4a-gettextize est relativement bavard sur ce
qui s'est mal pass. Dans un premier temps, il indique o, dans les
documents, se trouve la diffrence des structures. Vous obtiendrez les
chanes qui ne correspondent pas, leur position dans le texte, et leur
type De plus, le fichier PO gnr ainsi sera crit dans
gettextization.failed.po.
- Retirez toutes les parties propres la traduction, telles que les
sections dans lesquelles vous avez indiqu le nom du traducteur et
les remerciements envers toutes les personnes qui ont contribu la
traduction. Les addenda qui sont dcrits dans la section suivante
vous permettront de les rajouter par la suite.
- N'hsitez pas diter les deux fichiers. Le plus important est
d'obtenir le fichier PO. Vous pourrez le mettre jour par la suite.
Cela dit, il est tout de mme prfrable d'diter la traduction quand
c'est possible, puisque a simplifiera les tapes suivantes.
- Si besoin, supprimez des parties de l'original s'il se trouve
qu'elles n'ont pas t traduites. Elles reviendront par la suite
lorsque vous synchroniserez le PO avec le document.
- Si vous avez un peu modifi la structure (pour combiner deux
paragraphes ou pour en dcouper un autre), enlevez ces
modifications. S'il y a des problmes avec l'original, vous devriez
en informer son auteur. Faire la correction dans votre traduction
n'en fait bnficier qu'une partie de la communaut. Et de plus, ce
n'est pas possible lorsque po4a est utilis.
- Parfois, le contenu des paragraphes correspond, mais pas leur type.
Corriger cela dpend du format. Pour les formats POD et man, cela
provient souvent du fait qu'un des deux contient une ligne
commenant par des espaces et pas l'autre. Pour ces formats, cela
signifie que ce paragraphe ne doit pas tre reformat, il a donc un
type diffrent. Retirez simplement les espaces et vous serez
tranquille. Il se peut aussi qu'il s'agisse d'une petite erreur
dans le nom d'une balise.
De la mme faon, deux paragraphes peuvent avoir t combins, dans le
format POD, si la ligne qui les spare contient des espaces, ou s'il
n'y a pas de ligne vide avant la ligne =item et le contenu de cet
lment.
- Il arrive galement qu'il se produise une dsynchronisation entre les
fichiers, et la traduction se retrouve alors attache au mauvais
paragraphe. C'est le signe que le problme se situe avant dans le
fichier. Consultez gettextization.failed.po pour voir quand la
dsynchronisation s'est produite, et corrigez-la.
- D'autres fois, vous aurez l'impression que po4a a oubli des parties
du texte original ou de la traduction. gettextization.failed.po
indique que les deux correspondent correctement, mais la
gettextization choue parce que po4a essaie de faire correspondre un
paragraphe avec le paragraphe suivant (ou prcdant) de celui qui
devrait lui tre associ, comme si celui-ci avait disparu. Vous
pesterez srement contre po4a comme je l'ai fait quand a m'est
arriv.
Cette situation malheureuse se manifeste quand un mme paragraphe
est rpt dans le document. Dans ce cas, aucune nouvelle entre n'est
cre dans le fichier PO, mais une nouvelle rfrence est ajoute
l'entre existante.
Donc, lorsque le mme paragraphe apparat deux fois dans l'original
mais n'est pas traduit exactement de la mme faon chaque fois, vous
aurez l'impression qu'un paragraphe de l'original a disparu.
Supprimez juste la seconde traduction. Si vous prfrez plutt
supprimer la premire traduction parce que la nouvelle traduction
est meilleure, enlevez la seconde de sa place et replacez-la la
place de la premire.
De la mme faon, si deux paragraphes lgrement diffrents ont t
traduits de faon identique, vous aurez l'impression qu'un
paragraphe de la traduction a disparu. Une solution consiste
ajouter une certaine chane dans le paragraphe du document original
(I'm different par exemple). Ne vous inquitez pas, ces
modifications disparatront pendant la synchronisation, et quand le
texte ajout est suffisamment court, gettext associera votre
traduction au texte existant de toute faon (en le marquant comme
approximatif (fuzzy), ce qui n'a pas d'importance puisque toutes
les chanes sont marques fuzzy aprs la gettextization).
Avec un peu de chance, ces astuces vous permettront de raliser la
gettextization et d'obtenir le prcieux PO. Vous serez alors prt pour
synchroniser votre fichier et commencer la traduction. Veuillez noter
que pour les gros fichiers, la synchronisation peut prendre beaucoup de
temps.
Par exemple, la premire excution de po4a-updatepo pour la traduction de
la documentation Perl (un fichier PO de 5,5 Mo) a pris presque deux
jours sur un G5 1GHz. Eh oui, 48 heures. Mais les mises jour
suivantes n'ont pris que quelques secondes sur un vieux portable. Ceci
parce que la premire fois, la plupart des msgid du PO ne correspondent
aucun dans le fichier POT. Ce qui oblige gettext rechercher la chane
la plus proche avec un algorithme de recherche coteux.
Comment ajouter des choses n'étant pas des traductions (comme le nom du
traducteur) ?
Du fait de l'approche de type gettext, faire ceci est plus compliqu
avec po4a que a ne l'tait en ditant simplement le nouveau fichier et en
lisant l'original ct. Mais ceci reste possible en utilisant les
addenda.
Pour aider leur comprhension, on peut considrer les addenda comme des
sortes de rustines appliquer sur le document traduit la fin du
processus. Ils sont assez diffrents des rustines usuelles (il n'y a
qu'une seule ligne de contexte, qui peut contenir une expression
rationnelle Perl, et ne peuvent que rajouter du texte, sans en
enlever), mais la fonctionnalit qu'ils apportent est la mme.
Leur but est de permettre au traducteur d'ajouter au document du texte
qui ne soit pas une traduction, mais quelque chose de spcifique la
version traduite. De cette faon, ils peuvent ajouter une section
indiquant qui a particip cette traduction ou expliquer comment
rapporter des bogues de traduction.
Un addendum est fourni dans un fichier spar. La premire ligne constitue
un en-tte indiquant o le texte qu'il contient doit tre plac dans le
document. Le reste du fichier est ajout tel quel cette position dans
le document rsultant.
Les en-ttes ont une syntaxe relativement rigide: ils doivent commencer
par la chane PO4A-HEADER:, suivie par une liste de champs de la forme
clef=valeur spars par des points-virgules. Les espaces ONT leur
importance. Notez qu'il n'est pas possible d'utiliser de point-virgule
dans la valeur, mme en la plaant entre des guillemets.
Encore une fois, a parat peut-tre effrayant, mais les exemples ci-
dessous devraient vous aider crire les en-ttes dont vous avez besoin.
Supposons que nous voulons ajouter une section propos de cette
traduction aprs la section propos de ce document.
Voici les diffrentes clefs d'en-tte existantes:
position (obligatoire)
une expression rationnelle. L'addendum sera plac prs de la ligne
correspondant cette expression rationnelle. Notez qu'il s'agit ici
du document traduit, et non pas du document original. Si plus d'une
ligne correspond cette expression (ou si aucune ne correspond),
l'ajout chouera. Il est prfrable de donner un message d'erreur que
d'ajouter l'addendum au mauvais endroit.
La ligne est appele point de position par la suite. L'endroit o est
ajout l'addendum est appel point d'insertion. Ces deux points sont
proches, mais pas identiques. Par exemple, si vous voulez insrer
une nouvelle section, il est plus simple de placer le point de
position au niveau du titre de la section prcdente, et d'expliquer
po4a o se termine la section (souvenez-vous que le point de
position doit tre donn par une expression rationnelle ne
correspondant qu' une seule ligne.
La localisation du point d'insertion par rapport au point de
position est contrle par les champs "mode", "beginboundary" et
"endboundary", comme expliqu par la suite.
Dans notre cas, nous aurons:
position=<title> propos de ce document</title>
mode (obligatoire)
Le mode est soit before (avant) soit after (aprs). Il permet de
prciser la position de l'addendum par rapport au point d'ancrage.
Comme nous voulons placer la nouvelle section sous celle qui
correspond, nous utilisons:
mode=after
beginboundary (utilis uniquement avec mode=after, et obligatoire dans
ce cas)
endboundary (idem)
expression rationnelle correspondant la fin de la section aprs
laquelle l'addendum doit tre plac.
Lorsque le mode vaut after (aprs), le point d'insertion se trouvera
aprs le point de position, mais pas juste aprs! Il est plac la fin
de la section qui dbute par le point de position, c'est--dire aprs
la ligne correspondant l'expression rationnelle donne par le champ
"beginboundary" ou avant la ligne correspondant l'expression
rationnelle donne par le champ "endboundary".
Dans notre cas, nous pouvons choisir d'indiquer la fin de la
section qui doit correspondre en ajoutant:
endboundary=</section>
ou en indiquant le dbut de la section suivante en indiquant:
beginboundary=<section>
Dans les deux cas, notre addendum sera plac aprs </section> et
avant <section>. La premire solution est meilleure puisqu'elle
fonctionnera toujours, mme si le document est rorganis.
Les deux existent parce que les formats des documentations sont
diffrents. Dans certains d'entre eux, il est possible d'indiquer la
fin d'une section comme "</section>" que nous avons utilis), et
dans d'autres les fins de section ne sont pas spcifies
explicitement (c'est le cas du format man). Dans le premier cas, la
frontire (boundary) est la fin de section, et le point d'insertion
vient aprs. Dans le second cas, la frontire correspond au dbut de
la section suivante, et le point d'insertion vient juste avant.
Tout ceci peut sembler confus, mais l'exemple suivant devrait vous
clairer.
Pour rsumer l'exemple utilis, pour ajouter une section appele propos
de cette traduction aprs la section propos de ce document dans un
document SGML, vous pouvez utiliser une de ces lignes d'en-tte.
PO4A-HEADER: mode=after; position= propos de ce document; endboundary=</section>
PO4A-HEADER: mode=after; position= propos de ce document; beginboundary=<section>
Si vous voulez ajouter quelque chose aprs la section nroff suivante:
.SH "AUTEURS"
vous devez utiliser un champ "position" correspondant cette ligne,
et un champ "beginboundary" correspondant au dbut de la section
suivante (c'est--dire "^\.SH"). L'addendum sera plac aprs le point de
position et immdiatement avant la premire ligne correspondant au
champ "beginboundary". C'est--dire:
PO4A-HEADER:mode=after;position=AUTEURS;beginboundary=\.SH
Si vous voulez ajouter quelque chose une section (par exemple aprs
Copyright Tralala) au lieu d'ajouter une section entire, vous pouvez
fournir une "position" correspondant cette ligne, et un champ
"beginboundary" correspondant n'importe quelle ligne.
PO4A-HEADER:mode=after;position=Copyright Tralala, 2004;beginboundary=^
Si vous voulez ajouter quelque chose la fin du document, donnez une
position correspondant n'importe quelle ligne du document (mais une
seule ligne, puisque po4a n'acceptera pas que la position ne
corresponde pas une ligne unique), et donnez un champ "endboundary" ne
correspondant aucune ligne. N'utilisez pas de chane simple, comme FIN,
mais prfrez-en une qui a une chance moindre de se trouver dans votre
document.
PO4A-HEADER:mode=after;position=<title>Au sujet de...</title>;beginboundary=FausseLimitePo4a
Dans tous les cas, rappelez-vous qu'il s'agit d'une expression
rationnelle. Par exemple, si vous voulez pointer la fin d'une section
nroff qui se termine par la ligne:
.fi
N'utilisez pas ".fi" comme valeur pour endboundary, parce que cette
expression rationnelle correspond galement ce[fi]chier, ce qui n'est
videmment pas ce que vous voulez. La valeur du champ endboundary dans
ce cas est "^\.fi$".
Si l'addendum n'est pas positionn l o vous l'escomptiez, essayez en
fournissant l'option -vv aux outils, ce qui vous donnera des
indications sur ce qui est fait pour le placement de l'addendum.
Voici un exemple plus dtaill.
Document original (au format POD):
|=head1 NAME
|
|dummy - a dummy program
|
|=head1 AUTHOR
|
|me
Voici maintenant un addendum qui s'assure qu'une section est ajoute la
fin du fichier pour indiquer le traducteur.
|PO4A-HEADER:mode=after;position=AUTEUR;beginboundary=^=head
|
|=head1 TRADUCTEUR
|
|moi
De faon placer l'addendum avant l'AUTEUR (section nomme AUTHOR dans le
document original), utilisez l'en-tte suivant:
PO4A-HEADER:mode=after;position=NOM;beginboundary=^=head1
Ceci fonctionne parce que la premire ligne correspondant l'expression
rationnelle donne dans le champ beginboundary (/^=head1/) aprs la
section NOM (correspondant la section NAME dans le document original),
est celle indiquant les auteurs. De cette faon, l'addendum est plac
entre les deux sections.
Comment automatiser tout ceci ?
L'utilisation de po4a s'est montre propice aux erreurs pour les
utilisateurs parce que deux programmes doivent tre appels dans le bon
ordre (po4a-updatepo puis po4a-translate), chacun d'eux prenant au
moins 3 paramtres. De plus, il tait difficile avec ce systme d'utiliser
un seul fichier PO pour tous les documents quand plusieurs formats
taient utiliss.
Le programme po4a(1) a t conu pour rpondre ces difficults. Une fois
que votre projet a t converti po4a, vous crivez un petit fichier de
configuration indiquant o se trouvent vos fichiers de traduction (les
fichiers PO et POT), o se trouvent les documents originaux, leurs
formats, et o doivent tre places leur traduction.
Ensuite, l'appel de po4a(1) avec ce fichier vrifie que les fichiers PO
sont synchroniss avec le document original, et que les documents
traduits sont gnrs correctement. Bien sr, il vous faudra appeler ce
programme deux fois: une fois avant l'dition des fichiers PO pour les
mettre jour et une autre fois aprs pour mettre jour les documents
traduits. Mais vous n'aurez qu' vous rappeler cette commande.
Comment personaliser po4a ?
Les modules po4a ont des options (fournies l'aide de l'option -o) qui
peuvent tre utilises pour modifier le comportement du module.
Il est aussi possible de personaliser un module, d'ajouter de nouveaux
modules ou des modules drivs / modifis en plaant un module dans
lib/Locale/Po4a/ et en ajoutant lib aux chemins indiqus par les
variables d'environnement PERLLIB ou PERL5LIB. Par exemple:
PERLLIB=$PWD/lib po4a --previous po4a/po4a.cfg
Note: le nom du rpertoire lib n'est pas important.
Comment ça marche ?
Cette section vous donne un bref aperu des rouages internes de po4a
afin que vous vous sentiez plus mme de nous aider le maintenir et
l'amliorer. Elle peut galement vous permettre de comprendre pourquoi
cela ne fait pas ce que vous souhaitez et corriger vos problmes par
vous-mme.
Quel est le plan général ici ?
L'architecture po4a est oriente objet (en Perl, n'est-ce pas
formidable?). L'anctre commun de tous les classes d'analyseur est appel
Transtractor. Ce nom trange provient du fait qu'il est la fois charg
de la traduction et de l'extraction des chanes du document.
Plus formellement, il prend un document traduire et un fichier PO
contenant les traductions en entre et produit en sortie deux autres
fichiers: un autre fichier PO (rsultant de l'extraction des chanes
traduire du document d'entre), et un document traduit (avec la mme
structure que le document d'entre, mais dont toutes les chanes
traduire ont t remplaces par leur traduction donne par le PO fournit en
entre). Voici une reprsentation graphique de tout ceci:
document entrée --\ /---> document sortie
\ TransTractor:: / (traduit)
+-->-- parse() --------+
/ \
PO entrée --------/ \---> PO sortie
(extrait)
Cette forme d'os est le coeur de l'architecture de po4a. Sans le
fichier PO en entre et le document en sortie, cela donne
po4a-gettextize. Si vous fournissez les deux entres et ignorez le PO de
sortie, vous aurez po4a-translate.
TransTractor::parse() est une fonction virtuelle implmente dans chaque
module. Voici un petit exemple pour montrer comment elle marche. Cet
exemple analyse une liste de paragraphes qui dbutent tous par <p>.
1 sub parse {
2 PARAGRAPH: while (1) {
3 $my ($paragraph,$pararef,$line,$lref)=("","","","");
4 $my $first=1;
5 while (($line,$lref)=$document->shiftline() && defined($line)) {
6 if ($line =~ m/<p>/ && !$first--; ) {
7 $document->unshiftline($line,$lref);
8
9 $paragraph =~ s/^<p>//s;
10 $document->pushline("<p>".$document->translate($paragraph,$pararef));
11
12 next PARAGRAPH;
13 } else {
14 $paragraph .= $line;
15 $pararef = $lref unless(length($pararef));
16 }
17 }
18 return; # Did not got a defined line? End of input file.
19 }
20 }
la ligne 6, <p> est rencontr pour la seconde fois. Cela indique le
passage un paragraphe suivant. Nous replaons donc la ligne, qui vient
juste d'tre obtenue, dans le document d'origine (ligne 7) et envoyons
le paragraphe ainsi construit dans les sorties. Aprs avoir retir le <p>
de tte en ligne 9, nous envoyons la concatnation de cette balise avec
la traduction du reste du paragraphe.
Cette fonction translate() est trs pratique. Elle envoie son paramtre
dans le fichier PO de sortie (l'extraction) et renvoie sa traduction
telle qu'elle a t trouve dans le fichier PO d'entre (la traduction).
Comme elle est utilise dans le paramtre de pushline(), cette traduction
se retrouve dans le document de sortie.
N'est-ce pas gnial? Il est possible de construire un module complet
pour po4a en moins de 20 lignes, si le format est suffisamment
simple...
Vous trouverez plus de dtails ce sujet dans
Locale::Po4a::TransTractor(3pm).
Gettextization : comment ça marche ?
L'ide ici est de prendre la fois le document d'origine et sa
traduction, et de supposer que la nime chane extraite du document
traduit correspond
la traduction de la nime chane du document original. Pour que cela
fonctionne, il faut donc que les deux documents aient exactement la mme
structure. Par exemple, si les fichiers ont la structure suivante, il y
a trs peu de chance pour que la quatrime chane de la traduction (qui
est de type chapter) soit la traduction de la quatrime chane du
document original (de type paragraph).
Original Traduction
chapitre chapitre
paragraphe paragraphe
paragraphe paragraphe
paragraphe chapitre
chapitre paragraphe
paragraphe paragraphe
Pour cela, les analyseurs po4a sont utiliss la fois sur l'original et
sur la traduction pour extraire des fichiers PO, et un troisime fichier
PO est construit partir d'eux en utilisant les chanes du second comme
traductions des chanes du premier. Pour s'assurer que les chanes ainsi
associes sont bien les traductions, les analyseurs de po4a doivent
ajouter des informations sur le type syntaxique des chanes extraites du
document (les analyseurs existants le font, les vtres devraient
galement). Ensuite, ces informations sont utilises pour s'assurer que
les deux documents ont la mme syntaxe. Dans l'exemple prcdent, cela
permet de dtecter que la quatrime chane est dans un cas un paragraphe
et dans l'autre un titre de chapitre, et le problme est affich.
En thorie, il devrait tre possible de dtecter le problme, puis de
resynchroniser les fichiers par la suite (comme le fait diff). Mais il
est alors difficile de savoir quoi faire des chanes prcdant la
dsynchronisation, et le rsultat pourrait parfois ne pas tre bon. C'est
pourquoi l'implmentation actuelle ne resynchronise rien et choue avec
un message d'erreur complet quand quelque chose se passe mal, indiquant
qu'une modification manuelle des fichiers est ncessaire pour corriger
le problme.
Mme avec ces prcautions, des erreurs peuvent survenir. C'est la raison
pour laquelle toutes les traductions trouves de cette faon sont marques
fuzzy, pour s'assurer que le traducteur les relira et vrifiera.
Fonctionnement d'un Addendum
Bien, il n'y a rien de bien compliqu ici. La traduction n'est pas
directement crite sur le disque, mais est conserve en mmoire jusqu' ce
que tous les addenda soient ajouts. Les algorithmes utiliss sont assez
simples. Une ligne correspondant l'expression rationnelle de la
position est recherche, et l'addendum est ajout juste avant si
mode=before. Sinon, la premire ligne trouve partir de cette position
correspondant l'expression rationnelle donne par le champ boundary est
recherche et l'addendum est insr juste aprs cette ligne s'il s'agit
d'un "endboundary" ou juste avant s'il s'agit d'un "beginboundary".
FAQ
Cette section regroupe les questions le plus souvent poses. En fait, la
plupart d'entre elles sont des questions de design du projet. Si vous
pensez que po4a n'est pas la bonne rponse au problme de traduction de
documentation, lisez cette section avant de nous donner votre avis sur
la liste de diffusion <po4a-devel@lists.alioth.debian.org>. Votre avis
nous intresse.
Pourquoi traduire chaque paragraphe séparément ?
En effet, avec po4a, tous les paragraphes sont traduits sparment (en
fait, c'est au choix de chaque module, mais tous les modules existants
font ainsi, et les vtres devraient galement). Il y a deux avantages
principaux cette approche:
o Quand les parties techniques du document sont masques, le traducteur
ne peut pas faire de btises avec. Moins nous prsentons de marqueurs
au traducteur, moins il pourra faire d'erreurs.
o Dcouper le document aide isoler les changements apparaissant dans le
document original. Lorsque l'original est modifi, la mise jour des
parties modifies est plus facile.
Mme avec ces avantages, certains n'aiment pas l'ide de traduire chaque
paragraphe sparment. Voici quelques rponses leurs inquitudes:
o Cette approche a t couronne de succs dans le cadre du projet KDE et a
permis de produire la plus grosse documentation traduite et mise
jour notre connaissance.
o Les traducteurs peuvent toujours utiliser le contexte pour traduire,
puisque les chanes du fichier PO se trouvent dans le mme ordre que
dans le document original. La traduction squentielle est donc
relativement comparable qu'elle soit faite avec ou sans po4a. Et dans
tous les cas, la meilleure faon reste de convertir le document dans
un format imprimable puisque les indications de formatage ne sont pas
vraiment lisibles.
o C'est l'approche utilise par les traducteurs professionnels. Mme si
je l'admets, leurs buts peuvent tre diffrents des traducteurs de
logiciels source ouvert. La maintenance tant par exemple souvent
moins critique puisque le contenu change rarement.
Pourquoi ne pas découper au niveau des phrases (ou à un niveau plus petit)?
Les outils des traducteurs professionnels dcoupent parfois les
documents au niveau des phrases, de faon maximiser la rutilisation de
traductions prcdentes et acclrer leur travail. Le problme est qu'une
mme phrase peut avoir plusieurs traductions en fonction du contexte.
Les paragraphes sont par dfinition plus longs que les phrases. Cela
permet la plupart du temps d'assurer que deux paragraphes dans deux
documents diffrents auront le mme sens (et la mme traduction),
indpendamment du contexte.
Un dcoupage un niveau encore plus petit qu'une phrase pourrait tre très
génant. Ce serait un peu long d'expliquer pourquoi ici, mais les
lecteurs intresss pourront par exemple consulter la page de manuel
Locale::Maketext::TPJ13(3pm) (qui est fournie avec la documentation de
Perl). Pour faire court, chaque langue a ses propres rgles syntaxiques,
et il n'y a aucun moyen de construire des phrases partir de morceaux
de phrases pour toutes les langues existantes (ou pour les 5 10
langues les plus parles, et mme moins).
Pourquoi ne pas mettre la version originelle en commentaire avec la
traduction ?
A premire vue, gettext ne semble pas adapt tous les types de
traduction. Par exemple, il ne semblait pas adapt debconf, l'interface
que tous les paquets Debian utilisent pour l'interaction avec
l'utilisateur pendant l'installation. Dans ce cas, les textes traduire
taient assez courts (une dizaine de lignes pour chaque fichier), et il
tait difficile de placer la traduction dans un fichier spar parce qu'il
doit tre disponible avant l'installation du paquet.
C'est pourquoi les concepteurs de debconf ont dcid d'implmenter une
autre solution, plaant les traductions dans le mme fichier que
l'original. C'est une solution plutt sduisante. Certains voudront
galement faire ainsi pour les fichiers XML, par exemple. Voici quoi
cela ressemblerait:
<section>
<title lang="en">My title</title>
<title lang="fr">Mon titre</title>
<para>
<text lang="en">My text.</text>
<text lang="fr">Mon texte.</text>
</para>
</section>
Mais cette solution a t si problmatique que l'approche base sur PO est
dsormais utilise. Seul l'original peut tre dit dans le fichier, et les
traductions sont places dans des fichiers PO gnrs partir du modle
matre (et replacs au cours de la compilation). L'ancien systme a t
abandonn cause de plusieurs problmes:
o problmes de maintenance
Si plusieurs traducteurs fournissent une rustine (patch) au mme
moment, il est difficile de les appliquer ensemble.
Comment dtecter les modifications dans l'original qui doivent tre
appliques une traduction? Pour pouvoir utiliser diff, il faut
noter la version du document original traduit. C'est--dire qu'il
faut un fichier PO dans le fichier;)
o problmes d'encodage
Cette solution n'est envisageable que quand seules des langues
europennes sont impliques, mais la traduction pour le coren, le
russe ou l'arabe peuvent compliquer la situation. UTF peut tre une
solution, mais il y a galement des problmes avec.
De plus, ces problmes sont difficiles dtecter (c.--d. que seules
les personnes capables de lire le coren pourront s'apercevoir que
l'encodage pour le coren est dfectueux [ce qui aurait t caus par un
traducteur russe]).
gettext rsout tous ces problmes.
Mais gettext n'a pas été conçu pour faire ça !
C'est vrai, mais ce jour, personne n'a apport de meilleure solution.
La seule solution alternative est la traduction manuelle, avec tous les
problmes de maintenance qu'elle comporte.
Qu'en est-il des autres outils de traduction de documentation utilisant
gettext ?
Il n'y en a à notre connaissance que deux :
poxml
C'est l'outil dvelopp au sein du projet KDE pour grer les
XMLDocBook. C'est notre connaissance le premier programme qui a
extrait des chanes traduire d'une documentation pour les mettre
dans un fichier PO, et les rinjecter ensuite dans le document aprs
la traduction.
Il ne peut grer que le format XML, avec une DTD particulire. Je
n'aime pas beaucoup la faon dont les listes sont gres: elles sont
rassembles en un seul gros msgid. Lorsque la liste est de taille
importante, les lments sont assez durs grer.
po-debiandoc
Ce programme crit par Denis Barbier est un prcurseur du module SGML
de po4a, qui le remplace plus ou moins. Comme son nom l'indique, il
ne gre que la DTD DebianDoc, qui est en voie d'extinction.
Le principal avantage de po4a par rapport eux est la facilit d'ajouter
du contenu additionnel (ce qui est encore plus difficile avec ces
outils) et la possibilit de faire une gettextization.
Eduquer les développeurs au problème des traductions
Lors de la traduction de documentations ou de programmes, trois types
de difficults sont rencontrs; des problmes linguistiques (tout le monde
ne parle pas deux langues), des problmes techniques (la raison d'tre de
po4a) et des problmes de type relationnel et humain. Tous les
dveloppeurs ne voient pas la ncessit de raliser des traductions. Mme
avec la meilleure volont, ils peuvent aussi ignorer comment faciliter
le travail des traducteurs. C'est pour cela que po4a fournit une bonne
quantit de documentation que vous pouvez leur indiquer.
Un autre point important est que chaque fichier traduit contient un
petit commentaire indiquant ce qu'est le fichier et comment l'utiliser.
Ceci devrait aider les pauvres dveloppeurs inonds de tonnes de fichiers
contenant les traductions pour des langues qu'ils ne parlent quasiment
pas, et qui devrait les aider grer ces fichiers correctement.
Dans le projet po4a, les fichiers traduits ne sont plus des fichiers
source. Comme les fichiers SGML sont d'habitude des fichiers source,
ceci peut tre droutant. C'est pourquoi tous les fichiers contiennent un
en-tte similaire celui-ci:
| *****************************************************
| * GENERATED FILE, DO NOT EDIT *
| * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
| *****************************************************
|
| This file was generated by po4a-translate(1). Do not store it (in cvs,
| for example), but store the PO file used as source file by po4a-translate.
|
| In fact, consider this as a binary, and the PO file as a regular source file:
| If the PO gets lost, keeping this translation up-to-date will be harder ;)
De la mme faon, les fichiers PO usuels n'ont qu' tre copis dans le
rpertoire po/. Mais ce n'est pas le cas de ceux manipulés par po4a. Le
principal risque tant que le dveloppeur crase la traduction existante
de son programme avec la traduction de sa documentation. (Les deux ne
peuvent pas tre stockes dans le mme fichier PO parce que le programme
doit installer sa traduction en tant que fichier mo et que la
documentation n'a besoin de la traduction qu'au moment de la
compilation). C'est pourquoi les fichiers PO crs par le module po-
debiandoc contient l'en-tte suivant:
#
# ADVISES TO DEVELOPERS:
# - you do not need to manually edit POT or PO files.
# - this file contains the translation of your debconf templates.
# Do not replace the translation of your program with this !!
# (or your translators will get very upset)
#
# ADVISES TO TRANSLATORS:
# If you are not familiar with the PO format, gettext documentation
# is worth reading, especially sections dedicated to this format.
# For example, run:
# info -n '(gettext)PO Files'
# info -n '(gettext)Header Entry'
#
# Some information specific to po-debconf are available at
# /usr/share/doc/po-debconf/README-trans
# or http://www.debian.org/intl/l10n/po-debconf/README-trans
#
Résumé des avantages de l'approche basée sur gettext
o Les traductions ne sont pas stockées indépendamment de l'original, ce
qui rend possible la détection des parties à mettre à jour.
o Les traductions sont stockées dans des fichiers différents pour
chaque langue, ce qui évite les interférences entre traducteurs, que
ce soit pour la soumission de rustines ou pour le choix d'un
encodage.
o En interne, tout est basé sur "gettext" (mais "po4a" offre une
interface simple qui ne nécessite pas de comprendre comment ça marche
en interne pour pouvoir l'utiliser). Ce qui permet de ne pas
réinventer la roue, et du fait de leur utilisation importante, nous
pouvons supposer qu'ils ont peu ou pas de bogue.
o Pour l'utilisateur final, rien ne change (à part le fait que les
documentations seront probablement mieux maintenues :). La
documentation distribuée reste la même.
o Il n'est pas nécessaire pour les traducteurs d'apprendre une nouvelle
syntaxe et leur éditeur de fichier PO prfr (qui peut être le mode PO
d'Emacs, Lokalize ou Gtranslator) sera parfait.
o Gettext permet d'obtenir facilement des statistiques sur ce qui a été
fait, ce qui doit être revu et mis à jour, et sur ce qu'il reste à
faire. Vous trouverez des exemples à ces adresses :
- http://kv-53.narod.ru/kaider1.png
- http://www.debian.org/intl/l10n/
Mais tout n'est pas rose, et cette approche a aussi quelques
désavantages que nous devons gérer.
o Les addenda sont... surprenants au premier abord.
o Il n'est pas possible d'adapter le texte traduit à votre goût, comme
de décomposer ou recomposer des paragraphes. Mais d'un autre côté,
s'il s'agit d'un problème dans le document original, celui-ci doit
être signalé de toute façon.
o Même s'il a une interface simple, il reste un nouvel outil qu'il
faudra apprendre à maîtriser.
Un de mes rêves serait d'intégrer po4a à Gtranslator ou Lokalize.
Lorsqu'un fichier SGML serait ouvert, ses chaînes seraient extraites
automatiquement. Lors de l'enregistrement, le fichier SGML traduit
serait écrit sur le disque. Si nous arrivons à faire un module pour
Ms Word (TM) (ou au moins pour le format RTF), des traducteurs
professionnels pourraient même l'utiliser.
AUTEURS
Denis Barbier <barbier,linuxfr.org>
Martin Quinson (mquinson#debian.org)