Provided by: po4a_0.34-2_all bug

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 faA~Xon plus intA~Xressante, la
       maintenance des traductions) en utilisant les outils gettext dans des
       domaines pour lesquels ils n’A~Xtaient pas destinA~Xs, comme la
       documentation.

Table des matiA~Xres

       Ce document est organisA~X de la maniA~Xre suivante :

       1 Pourquoi utiliser po4a ? A~X quoi cela sert-il ?
           Cette section d’introduction explique les motivations du projet et
           sa philosophie. Vous devriez le lire si vous cherchez A~  A~Xvaluer
           po4a pour vos traductions.

       2 Comment utiliser les fonctionnalitA~Xs de po4a ?
           Cette section est une sorte de manuel de rA~XfA~Xrence qui cherche
           A~  rA~Xpondre aux questions des utilisateurs et qui vous donnera
           une meilleure comprA~Xhension de son fonctionnement. Il vous
           donnera les bases de l’utilisation de po4a et sert d’introduction
           A~  la documentation des outils spA~Xcifiques.

           Comment commencer une nouvelle traduction ?
           Comment convertir la traduction en un fichier de documentation ?
           Comment mettre A~  jour une traduction faite avec po4a ?
           Comment convertir une traduction prA~X-existante A~  ce systA~Xme ?
           Comment ajouter des choses n’A~Xtant pas des traductions (comme le
           nom du traducteur) ?
           Comment automatiser tout ceci ?
       3 Comment A~Xa marche ?
           Cette section vous donne un bref aperA~Xu des rouages internes de
           po4a afin que vous vous sentiez plus A~  mA~Xme de nous aider A~
           le maintenir et l’amA~Xliorer. Elle peut A~Xgalement vous permettre
           de comprendre pourquoi cela ne fait pas ce que vous souhaitez et
           corriger vos problA~Xmes par vous-mA~Xme.

       4 FAQ
           Cette section regroupe les questions le plus souvent posA~Xes. En
           fait, la plupart d’entre elles sont des questions de design du
           projet. Si vous pensez que po4a n’est pas la bonne rA~Xponse au
           problA~Xme 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 intA~Xresse.

       5 Notes spA~Xcifiques A~  certains modules
           Cette section prA~Xsente les spA~XcificitA~Xs 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 rA~Xgles A~  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 placA~Xe dans chaque documentation des modules. Ceci permet de
           s’assurer que les informations sont A~  jour en conservant la
           documentation et le code ensemble.

       6 Bogues connus et fonctionnalitA~Xs manquantes
           Un certain nombre dA~XjA~  :(

Pourquoi utiliser po4a ? Dans quel domaine est-il bon ?

       J’aime le concept des logiciels A~  sources ouverts, qui permettent de
       donner A~  tous un accA~Xs au logiciel et A~  son code source. Mais,
       A~Xtant moi-mA~Xme franA~Xais, je suis conscient que la licence n’est
       pas le seul frein A~  l’ouverture d’un logiciel : les logiciels non
       traduits, mA~Xme s’ils sont libres, sont sans aucune utilitA~X pour
       ceux qui ne comprennent pas l’anglais, et il y a encore beaucoup de
       travail pour les rendre accessibles A~  vraiment tout le monde.

       La perception du problA~Xme par les acteurs du dA~Xveloppement libre
       s’est fortement accA~XlA~XrA~Xe rA~Xcemment. Nous, les traducteurs,
       avons gagnA~X une premiA~Xre bataille et avons convaincu tout le monde
       de l’importance des traductions. Mais c’est malheureusement la partie
       la plus facile. Il faut maintenant rA~Xaliser tout le travail et
       traduire tous les documents.

       Les logiciels aux sources ouverts bA~XnA~Xficient d’un niveau de
       traduction relativement bon, grA~Xce A~  la formidable suite d’outils
       gettext. Ces outils permettent d’extraire les chaA~Xnes A~  traduire du
       programme, de les prA~Xsenter sous une forme standard pour les
       traducteurs, puis d’utiliser le rA~Xsultat de leur travail lors de
       l’exA~Xcution pour afficher les messages traduits aux utilisateurs.

       Mais cette situation est assez diffA~Xrente en ce qui concerne les
       documentations. Trop souvent, la documentation traduite n’est pas assez
       visible (pas distribuA~Xe avec le programme), seulement partielle ou
       pas A~  jour. Cette derniA~Xre situation est de loin la moins bonne.
       Les traductions pas A~  jour peuvent se rA~XvA~Xler plus embA~Xtantes
       pour les utilisateurs que l’absence de traduction parce que d’anciens
       comportements d’un programme peuvent y A~Xtre dA~Xcrits, mais ne plus
       A~Xtre en vigueur.

   La problA~Xmatique
       La traduction des documentations n’est pas une tA~Xche difficile en
       elle-mA~Xme. Les textes sont bien plus longs que les messages des
       programmes ce qui rend leur traduction plus longue, mais il n’y a
       aucune difficultA~X technique A~  faire ceci. La difficultA~X vient en
       fait de la maintenance de la traduction. La dA~Xtection des parties
       ayant A~XtA~X modifiA~Xes et nA~Xcessitant une mise A~  jour est une
       tA~Xche trA~Xs difficile, ce qui explique que tant de traductions ne
       correspondent plus A~  la version originale.

   La rA~Xponse de po4a
       La maintenance de la traduction est donc la raison premiA~Xre de po4a.
       La faA~Xon de faire de gettext a A~XtA~X rA~XutilisA~Xe dans ce but.
       Comme avec gettext, des chaA~Xnes de texte sont extraites de leur
       emplacement d’origine de faA~Xon A~  A~Xtre prA~XsentA~Xes de faA~Xon
       standardisA~Xe aux traducteurs. Les outils pour gettext sont ensuite
       utilisA~Xs pour aider le traducteur A~  faire son travail lorsqu’une
       nouvelle version du document est disponible. Mais, A~  la diffA~Xrence
       de l’utilisation classique de gettext, les traductions sont
       rA~XinjectA~Xe dans la structure du document d’origine de faA~Xon A~
       pouvoir les utiliser ou les distribuer comme les documents de la
       version anglaise.

       GrA~Xce A~  ceci, la dA~Xtection des parties du document qui
       nA~Xcessitent une mise A~  jour est trA~Xs facile. Un autre avantage
       est que l’outil va faire une bonne partie du travail lorsque seule la
       structure du document A~  A~XtA~X modifiA~Xe et que des chapitres ont
       A~XtA~X dA~XplacA~Xs, rassemblA~Xs ou redA~XcoupA~Xs. En extrayant le
       texte A~  traduire de la structure du document, il permet A~Xgalement
       de masquer la complexitA~X de la mise en page et rA~Xduit les chances
       d’avoir un document dA~Xfectueux (mA~Xme s’il reste un risque).

       Veuillez A~Xgalement consulter la FAQ plus bas dans ce document pour
       une liste plus complA~Xte des avantages et inconvA~Xnients de cette
       approche.

   Formats supportA~Xs
       Actuellement, cette approche a A~XtA~X implA~XmentA~Xe avec succA~Xs
       pour un certain nombre de formats de mise en page de texte.

       nroff

       Le bon vieux format des pages de manuel, utilisA~X par beaucoup de
       programmes. Le support de po4a pour ce format est trA~Xs utile parce
       que ce format est assez compliquA~X, surtout pour les dA~Xbutants. Le
       module Locale::Po4a::Man(3pm) supporte A~Xgalement le format mdoc,
       utilisA~X par les pages de manuel BSD (elles sont A~Xgalement assez
       frA~Xquentes sous Linux).

       pod

       C’est le format pour la documentation en ligne de Perl (AX Perl Online
       Documentation AX). Le langage et ses documentations sont documentA~Xs
       de cette faA~Xon, ainsi que la plupart des scripts Perl existants. Il
       permet de garder la documentation plus fidA~Xle au code en les
       intA~Xgrant tous deux au mA~Xme fichier. Il rend la vie du programmeur
       plus simple, mais malheureusement pas celle du traducteur.

       sgml

       MA~Xme s’il est de plus en plus remplacA~X par le XML, ce format est
       encore assez utilisA~X pour les documents dont la taille dA~Xpasse
       plusieurs A~Xcrans. Il permet de faire des livres complets. La mise A~
       jours de documents aussi longs est un vrai cauchemar. diff se montre
       souvent inutile quand le document original a A~XtA~X rA~XindentA~X
       aprA~Xs une mise A~  jour. Heureusement, po4a vous aide dans cette
       tA~Xche.

       Actuellement, seuls les DTD debiandoc et docbook sont supportA~Xs, mais
       l’ajout d’un nouveau est trA~Xs facile. Il est mA~Xme possible
       d’utiliser po4a avec un DTD sgml inconnu sans modifier le code en
       fournissant les informations nA~Xcessaires sur la ligne de commande.
       Veuillez consulter Locale::Po4a::Sgml(3pm) pour plus de dA~Xtails.

       TeX / LaTeX

       Le format LaTeX est un format majeur utilisA~X pour les documentations
       dans le monde du logiciel libre ou pour des publications. Le module
       Locale::Po4a::LaTeX(3pm) a A~XtA~X testA~X avec la documentation de
       Python, un livre et avec quelques prA~Xsentations.

       texinfo

       Toutes les documentations du projet GNU sont A~Xcrites dans ce format
       (c’est mA~Xme une des exigences pour devenir un projet officiel du
       projet GNU). Le support pour Locale::Po4a::Texinfo(3pm) dans po4a en
       est encore A~  ses dA~Xbut. Veuillez nous envoyer des rapports de bogue
       ou des demandes de nouvelle fonctionnalitA~X.

       xml

       Le format XML est A~  la base de beaucoup de formats pour la
       documentation.

       A~X ce jour, la DTD docbook est supportA~Xe par po4a. Veuillez
       consulter Locale::Po4a::Docbook(3pm) pour plus de dA~Xtails.

       autres

       Po4a peut A~Xgalement gA~Xrer des formats plus rares et plus
       spA~Xcifiques, 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 trA~Xs simple, et consiste
       principalement A~  fournir un interprA~Xteur pour le format voulu.
       Veuillez consulter Locale::Po4a::TransTractor(3pm) pour plus
       d’informations A~  ce sujet.

   Formats non supportA~Xs
       Malheureusement, po4a ne supporte pas encore certains formats
       utilisA~Xs pour les documentations.

       Il y a une quantitA~X d’autres formats que nous aimerions supporter
       avec po4a, et pas seulement des formats de documentation. En fait, nous
       visons toutes les AX niches AX laissA~Xes par les outils gettext
       classiques. Cela va de la traduction de la documentation des
       descriptions des paquets Debian et paquetages rpm, aux les questions
       posA~Xes par les scripts d’installation, ex passant par les fichiers
       changelog, et de tous les formats spA~Xcifiques tels que les
       scA~Xnarios de jeux ou les fichiers de ressource pour wine.

Comment utiliser po4a ?

       Cette section est une sorte de manuel de rA~XfA~Xrence qui cherche A~
       rA~Xpondre aux questions des utilisateurs et qui vous donnera une
       meilleure comprA~Xhension de son fonctionnement. Il vous donnera les
       bases de l’utilisation de po4a et sert d’introduction A~  la
       documentation des outils spA~Xcifiques.

   RA~XsumA~X graphique
       Le schA~Xma suivant donne un aperA~Xu du processus mis en oeuvre pour
       la traduction de documents avec po4a. Ne soyez pas effrayA~X par son
       apparente complexitA~X, qui est due au fait que le processus complet y
       est prA~XsentA~X. Une fois que vous avez converti votre projet A~
       po4a, seule la partie de droite du graphique est utilisA~Xe. Remarquez
       que l’exemple considA~Xre le format sgml, mais que tout reste identique
       avec les autres modules. Chaque partie de la figure sera dA~XtaillA~Xe
       dans les sections suivantes.

         fr.sgml  original.sgml ---->--------+------>----------->-------+
            |         |                      |                          |
            V         V       { mise A~  jour de l'original }             |
            |         |                      |                          |
            +--<---<--+                      V                          |
            |         |              original.new.sgml----->------->----+
            V         V                      |                          |
         [po4a-gettextize]      +--->---->---+                          |
            |         |         |            V                          |
            |         |         |     [po4a-updatepo]                   |
            |         V         ^            |                          V
            V    original.pot   |            V                          |
            |         |         |          fr.po                        |
            |         |         |       (approximA~X)                     |
            |  { traduction }   |            |                          |
            |         |         ^            V                          V
            |         |         |    {A~Xdition manuelle}                 |
            V         V         |            |                          |
            |         |         |            V                          V
            |         |         +--<---    fr.po       addendum   original.sgml
            +---->----+---->------->--->  (A~  jour)   (optionnel)     (A~  jour)
                                             |            |             |
                                             v            v             v
                                             +------>-----+------<------+
                                                          |
                                                          v
                                                  [po4a-translate]
                                                          |
                                                          V
                                                       fr.sgml
                                                      (A~  jour)

       La partie gauche illustre la conversion d’une traduction n’utilisant
       pas po4a. En haut de la partie droite est prA~XsentA~X ce qui est du
       ressort de l’auteur du document d’origine (la mise A~  jour de la
       documentation). Au milieu de la partie de droite se trouve la partie
       automatisA~Xe par po4a. Les nouvelles chaA~Xnes sont extraites et
       comparA~Xes avec la traduction existante. Pour celles qui n’ont pas
       changA~X, la traduction prA~XcA~Xdente est utilisA~Xe. Celles qui ont
       A~XtA~X en partie modifiA~Xes sont A~Xgalement associA~Xes A~  leur
       ancienne traduction, mais avec un marquage spA~Xcifique indiquant que
       la traduction doit A~Xtre mise A~  jour. La partie du bas indique
       comment le document formatA~X est construit.

       En fait, en tant que traducteur, la seule opA~Xration manuelle consiste
       en l’A~Xtape indiquA~Xe par {A~Xdition manuelle}. En effet, nous nous
       en excusons, po4a aide A~  la traduction, mais il ne traduit rien pour
       vous...

   Comment commencer une nouvelle traduction ?
       Cette section prA~Xsente les A~Xtapes nA~Xcessaires pour dA~Xbuter une
       nouvelle traduction avec po4a. Les modifications A~  appliquer pour la
       conversion d’un projet existant sont dA~XtaillA~Xes dans la section
       correspondante.

       Voici les A~Xtapes permettant de commencer une traduction avec po4a :

       - Extraction du texte du document d’origine qui doit A~Xtre traduit
         dans un nouveau fichier pot (le format utilisA~X par gettext). Pour
         ceci, utilisez po4a-gettextize de cette faA~Xon :

           $ po4a-gettextize -f <format> -m <maitre.doc> -p <traduction.pot>

         Naturellement, <format> est le format du document <maitre.doc> et la
         sortie est placA~Xe dans <traduction.pot>. Veuillez consulter
         po4a-gettextize(1) pour plus de dA~Xtails concernant les options
         existantes.

       - Traduit rA~Xellement ce qui doit A~Xtre traduit. Pour cela, vous
         devez renommer le fichier pot en doc.XX.po (oA~X XX est le code
         ISO639 de la langue vers laquelle vous A~Xtes en train de traduire,
         c.-A~ -d. AX fr AX pour le franA~Xais), puis A~Xditer ce fichier.
         C’est souvent une bonne idA~Xe de ne pas nommer le fichier XX.po pour
         A~Xviter de confondre ce fichier avec la traduction des messages du
         programme, mais vous faites comme vous voulez. N’oubliez pas de
         mettre A~  jour les en-tA~Xtes du fichier po, ils sont importants.

         La traduction peut A~Xtre rA~XalisA~Xe avec Emacs et son mode po ou
         kbabel (basA~X sur KDE) ou gtranslator (basA~X sur GNOME) ou encore
         n’importe quel programme que vous prA~XfA~Xrez utiliser pour
         l’A~Xdition de ces fichiers. Un bon vieux vi fera l’affaire, mA~Xme
         s’il n’y a pas de mode spA~Xcial pour ce type de tA~Xche.

         Si vous voulez en apprendre plus A~  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 effectuA~Xe, il faut gA~XnA~Xrer la
       documentation traduite et la distribuer avec l’original. Pour cela,
       utilisez po4a-translate(1) de cette faA~Xon (XX reprA~Xsente le code de
       la langue) :

         $ po4a-translate -f <format> -m <maitre.doc> -p <doc.XX.po> -l <XX.doc>

       Comme prA~XcA~Xdemment, <format> est le format du document
       <maitre.doc>. Mais cette fois-ci, le fichier po fourni en paramA~Xtre
       de l’option -p est un fichier d’entrA~Xe. Il s’agit de votre
       traduction. La sortie se trouve dans le fichier <XX.doc>.

       Veuillez consulter po4a-translate(1) pour plus de dA~Xtails.

   Comment mettre A~  jour une traduction faite avec po4a ?
       Pour mettre A~  jour votre traduction lorsque l’original a changA~X,
       utilisez po4a-updatepo(1) comme ceci :

         $ po4a-updatepo -f <format> -m <nouvel_original.doc> -p <courant.XX.po>

       (Veuillez consulter po4a-updatepo(1) pour plus de dA~Xtails)

       Naturellement, les nouveaux paragraphes de ce document ne seront pas
       traduits par magie dans le fichier "po" par cette opA~Xration, et vous
       devrez mettre A~  jour le fichier "po" manuellement. De la mA~Xme
       faA~Xon, vous devrez vA~Xrifier les traductions des paragraphes qui ont
       A~XtA~X lA~XgA~Xrement modifiA~Xs. Pour vous assurer que vous n’en
       oubliez pas, ils sont marquA~Xs comme AX fuzzy AX 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 A~Xditeur de fichier po prA~XfA~XrA~X.

       Une fois que votre fichier po est de nouveau A~  jour, sans aucune
       chaA~Xne non traduite ou marquA~Xe comme AX fuzzy AX, vous pouvez
       gA~XnA~Xrer un fichier de documentation traduit, comme expliquA~X dans
       la section prA~XcA~Xdente.

   Comment convertir une traduction prA~X-existante A~  ce systA~Xme ?
       Souvent, vous traduisez manuellement le document sans difficultA~X,
       jusqu’A~  ce qu’une rA~Xorganisation majeure du document d’origine
       apparaisse. Alors, aprA~Xs quelques essais infructueux en utilisant
       diff ou des outils similaires, vous voulez convertir la traduction A~
       po4a. Mais bien sA~Xr, vous ne souhaitez pas perdre votre traduction
       existante dans le mA~Xme temps. Pas de panique, ce cas est aussi
       gA~XrA~X par les outils de po4a et est appelA~X gettextization.

       Le point important pour ceci est d’avoir la mA~Xme structure de
       document pour l’original et la version traduite, de faA~Xon A~  ce que
       les outils associent leur contenu correctement.

       Si vous avez de la chance (c.-A~ -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 prA~Xparer A~  une tA~Xche ingrate. Dans tous les cas,
       souvenez-vous que c’est le prix A~  payer pour bA~XnA~Xficier du
       confort que po4a vous apportera par la suite. Le point positif est que
       vous n’aurez A~  faire cela qu’une seule fois.

       Ceci ne sera jamais rA~XpA~XtA~X suffisamment : afin de faciliter ce
       processus, il est trA~Xs important de trouver la version exacte qui a
       A~XtA~X utilisA~Xe pour rA~Xaliser la traduction. La meilleure
       situation est quand vous avez notA~X la version CVS lors de la
       traduction.

       A~Xa ne fonctionnera pas trA~Xs bien si vous utilisez le document
       d’origine mis A~  jour avec l’ancienne traduction. A~Xa reste possible,
       mais sera plus compliquA~X et doit A~Xtre A~XvitA~X autant que
       possible. En fait, je pense que si vous n’arrivez pas A~  trouver le
       document original, la meilleure solution est de trouver quelqu’un pour
       faire la gettextization pour vous (mais, s’il vous plaA~Xt, pas moi ;).

       Je dramatise peut-A~Xtre un peu trop ici. MA~Xme lorsque tout ne se
       passe pas bien, c’est bien plus rapide que de tout retraduire. J’ai pu
       rA~Xaliser une gettextization de la traduction franA~Xaise de Perl en
       un jour, mA~Xme si les choses ne se sont pas bien passA~Xes. Il y avait
       plus de deux mA~Xgaoctets de textes, et une nouvelle traduction aurait
       pris des mois.

       Voici d’abord la procA~Xdure, puis nous reviendrons sur les astuces qui
       permettent d’y parvenir avec succA~Xs lorsqu’il y a un problA~Xme. Pour
       faciliter la comprA~Xhension, le module sgml est utilisA~X en exemple,
       mais le format est, encore une fois, sans importance.

       Une fois que vous avez retrouvA~X l’ancien document original, la
       gettextization peut A~Xtre aussi facile que ceci :

        $ po4a-gettextize -f <format> -m <original.anc> -l <traduction.anc> -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 A~
       jour qui suit. Utiliser la procA~Xdure dA~Xcrite quelques sections
       auparavant pour synchroniser votre fichier po avec le nouveau document
       original, et mettez A~  jour votre traduction en consA~Xquence.

       Veuillez noter que mA~Xme si tout semble s’A~Xtre bien passA~X, il
       reste une possibilitA~X que des erreurs se soient introduites au cours
       du processus. En fait, po4a est incapable de vA~Xrifier que les
       chaA~Xnes correspondent A~  l’original, et il marque toutes les
       chaA~Xnes comme AX fuzzy AX au cours de cette procA~Xdure. Vous devriez
       vA~Xrifier chacune d’elle soigneusement avant de retirer ces marques.

       Souvent, la structure du document ne correspond pas exactement, ce qui
       empA~Xche po4a-gettextize de faire son travail correctement. Pour
       contourner cela, vous pouvez A~Xditer les fichiers afin de faire
       correspondre leur structure.

       La section "Gettextization : Comment A~Xa marche ?" ci-dessous pourra
       vous aider. La comprA~Xhension du fonctionnement interne vous aidera
       A~  rA~Xaliser cette tA~Xche. Par chance, po4a-gettextize est
       relativement bavard sur ce qui s’est mal passA~X. Dans un premier
       temps, il indique oA~X, dans les documents, se trouve la diffA~Xrence
       des structures. Vous obtiendrez les chaA~Xnes qui ne correspondent pas,
       leur position dans le texte, et leur type De plus, le fichier po
       gA~XnA~XrA~X ainsi sera A~Xcrit dans gettextization.failed.po.

       -   Retirez toutes les parties propres A~  la traduction, telles que
           les sections dans lesquelles vous avez indiquA~X le nom du
           traducteur et les remerciements envers toutes les personnes qui ont
           contribuA~X A~  la traduction. Les addenda qui sont dA~Xcrits dans
           la section suivante vous permettront de les rajouter par la suite.

       -   N’hA~Xsitez pas A~  A~Xditer les deux fichiers. Le plus important
           est d’obtenir le fichier po. Vous pourrez le mettre A~  jour par la
           suite. Cela dit, il est tout de mA~Xme prA~XfA~Xrable d’A~Xditer la
           traduction quand c’est possible, puisque A~Xa simplifiera les
           A~Xtapes suivantes.

       -   Si besoin, supprimez des parties de l’original s’il se trouve
           qu’elles n’ont pas A~XtA~X traduites. Elles reviendront par la
           suite lorsque vous synchroniserez le po avec le document.

       -   Si vous avez un peu modifiA~X la structure (pour combiner deux
           paragraphes ou pour en dA~Xcouper un autre), enlevez ces
           modifications. S’il y a des problA~Xmes avec l’original, vous
           devriez en informer son auteur. Faire la correction dans votre
           traduction n’en fait bA~XnA~Xficier qu’une partie de la
           communautA~X. Et de plus, ce n’est pas possible lorsque po4a est
           utilisA~X.

       -   Parfois, le contenu des paragraphes correspond, mais pas leur type.
           Corriger cela dA~Xpend du format. Pour les formats pod et nroff,
           cela provient souvent du fait qu’un des deux contient une ligne
           commenA~Xant par des espaces et pas l’autre. Pour ces formats, cela
           signifie que ce paragraphe ne doit pas A~Xtre reformatA~X, il a
           donc un type diffA~Xrent. 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 mA~Xme faA~Xon, deux paragraphes peuvent avoir A~XtA~X
           combinA~Xs, dans le format pod, si la ligne qui les sA~Xpare
           contient des espaces, ou s’il n’y a pas de ligne vide avant la
           ligne =item et le contenu de cet A~XlA~Xment.

       -   Il arrive A~Xgalement qu’il se produise une dA~Xsynchronisation
           entre les fichiers, et la traduction se retrouve alors attachA~Xe
           au mauvais paragraphe. C’est le signe que le problA~Xme se situe
           avant dans le fichier. Consultez gettextization.failed.po pour voir
           quand la dA~Xsynchronisation s’est produite, et corrigez-la.

       -   D’autres fois, vous aurez l’impression que po4a a oubliA~X des
           parties du texte original ou de la traduction.
           gettextization.failed.po indique que les deux correspondent
           correctement, mais la gettextization A~Xchoue parce que po4a essaie
           de faire correspondre un paragraphe avec le paragraphe suivant (ou
           prA~XcA~Xdant) de celui qui devrait lui A~Xtre associA~X, comme si
           celui-ci avait disparu. Vous pesterez sA~Xrement contre po4a comme
           je l’ai fait quand A~Xa m’est arrivA~X.

           Cette situation malheureuse se manifeste quand un mA~Xme paragraphe
           est rA~XpA~XtA~X dans le document. Dans ce cas, aucune nouvelle
           entrA~Xe n’est crA~XA~Xe dans le fichier po, mais une nouvelle
           rA~XfA~Xrence est ajoutA~Xe A~  l’entrA~Xe existante.

           Donc, lorsque le mA~Xme paragraphe apparaA~Xt deux fois dans
           l’original mais n’est pas traduit exactement de la mA~Xme faA~Xon
           chaque fois, vous aurez l’impression qu’un paragraphe de l’original
           a disparu. Supprimez juste la seconde traduction. Si vous
           prA~XfA~Xrez plutA~Xt supprimer la premiA~Xre traduction parce que
           la nouvelle traduction est meilleure, enlevez la seconde de sa
           place et replacez-la A~  la place de la premiA~Xre.

           De la mA~Xme faA~Xon, si deux paragraphes lA~XgA~Xrement
           diffA~Xrents ont A~XtA~X traduits de faA~Xon identique, vous aurez
           l’impression qu’un paragraphe de la traduction a disparu. Une
           solution consiste A~  ajouter une certaine chaA~Xne dans le
           paragraphe du document original (AX I’m different AX par exemple).
           Ne vous inquiA~Xtez pas, ces modifications disparaA~Xtront pendant
           la synchronisation, et quand le texte ajoutA~X est suffisamment
           court, gettext associera votre traduction au texte existant de
           toute faA~Xon (en le marquant comme AX fuzzy AX, ce qui n’a pas
           d’importance puisque toutes les chaA~Xnes sont marquA~Xes comme
           AX fuzzy AX aprA~Xs la gettextization).

       Avec un peu de chance, ces astuces vous permettront de rA~Xaliser la
       gettextization et d’obtenir le prA~Xcieux po. Vous serez alors prA~Xt
       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 premiA~Xre exA~Xcution 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 A~  1GHz. Eh oui, 48 heures. Mais les
       mises A~  jour suivantes n’ont pris que quelques secondes sur un vieux
       portable. Ceci parce que la premiA~Xre fois, la plupart des msgid du po
       ne correspondent A~  aucun dans le fichier pot. Ce qui oblige gettext
       A~  rechercher la chaA~Xne la plus proche avec un algorithme de
       recherche coA~Xteux.

   Comment ajouter des choses nâ€â€™A~Xtant pas des traductions (comme le nom du
       traducteur) ?
       Du fait de l’approche de type gettext, faire ceci est plus compliquA~X
       avec po4a que A~Xa ne l’A~Xtait en A~Xditant simplement le nouveau
       fichier et en lisant l’original A~  cA~XtA~X. Mais ceci reste possible
       en utilisant les AX addenda AX.

       Pour aider A~  leur comprA~Xhension, on peut considA~Xrer les addenda
       comme des sortes de rustines A~  appliquer sur le document traduit A~
       la fin du processus. Ils sont assez diffA~Xrents 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 fonctionnalitA~X qu’ils apportent est la mA~Xme.

       Leur but est de permettre au traducteur d’ajouter au document du texte
       qui ne soit pas une traduction, mais quelque chose de spA~Xcifique A~
       la version traduite. De cette faA~Xon, ils peuvent ajouter une section
       indiquant qui a participA~X A~  cette traduction ou expliquer comment
       rapporter des bogues de traduction.

       Un addendum est fourni dans un fichier sA~XparA~X. La premiA~Xre ligne
       constitue un en-tA~Xte indiquant oA~X le texte qu’il contient doit
       A~Xtre placA~X dans le document. Le reste du fichier est ajoutA~X tel
       quel A~  cette position dans le document rA~Xsultant.

       Les en-tA~Xtes ont une syntaxe relativement rigide : ils doivent
       commencer par la chaA~Xne AX PO4A-HEADER: AX, suivie par une liste de
       champs de la forme AX clef=valeur AX sA~XparA~Xs par des points-
       virgules. Les espaces ONT leur importance. Notez qu’il n’est pas
       possible d’utiliser de point-virgule dans la valeur, mA~Xme en la
       plaA~Xant entre des guillemets.

       Encore une fois, A~Xa paraA~Xt peut-A~Xtre effrayant, mais les exemples
       ci-dessous devraient vous aider A~  A~Xcrire les en-tA~Xtes dont vous
       avez besoin. Supposons que nous voulons ajouter une section AX A~X
       propos de cette traduction AX aprA~Xs la section AX A~X propos de ce
       document AX.

       Voici les diffA~Xrentes clefs d’en-tA~Xte existantes :

       position (obligatoire)
           une expression rationnelle. L’addendum sera placA~X prA~Xs de la
           ligne correspondant A~  cette expression rationnelle. Notez qu’il
           s’agit ici du document traduit, et non pas du document original. Si
           plus d’une ligne correspond A~  cette expression (ou si aucune ne
           correspond), l’ajout A~Xchouera. Il est prA~XfA~Xrable de donner un
           message d’erreur que d’ajouter l’addendum au mauvais endroit.

           La ligne est appelA~Xe point de position par la suite. L’endroit
           oA~X est ajoutA~X l’addendum est appelA~X point €™insertion. Ces
           deux points sont proches, mais pas identiques. Par exemple, si vous
           voulez insA~Xrer une nouvelle section, il est plus simple de placer
           le point de position au niveau du titre de la section
           prA~XcA~Xdente, et d’expliquer A~  po4a oA~X se termine la section
           (souvenez-vous que le point de position doit A~Xtre donnA~X par une
           expression rationnelle ne correspondant qu’A~  une seule ligne.

           La localisation du point €™insertion par rapport au point de
           position est contrA~XlA~Xe par les champs "mode", "beginboundary"
           et "endboundary", comme expliquA~X par la suite.

           Dans notre cas, nous aurons :

                position=<title>A~X propos de ce document</title>

       mode (obligatoire)
           Le mode est soit AX before AX (avant) soit AX after AX (aprA~Xs).
           Il permet de prA~Xciser 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 (utilisA~X uniquement avec mode=after, et obligatoire
       dans ce cas)
       endboundary (idem)
           expression rationnelle correspondant A~  la fin de la section
           aprA~Xs laquelle l’addendum doit A~Xtre placA~X.

           Lorsque le mode vaut AX after AX (aprA~Xs), le point €™insertion se
           trouvera aprA~Xs le point de position, mais pas juste aprA~Xs ! Il
           est placA~X A~  la fin de la section qui dA~Xbute par le point de
           position, c’est-A~ -dire aprA~Xs la ligne correspondant A~
           l’expression rationnelle donnA~Xe par le champ "beginboundary" ou
           avant la ligne correspondant A~  l’expression rationnelle donnA~Xe
           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 dA~Xbut de la section suivante en indiquant :

              beginboundary=<section>

           Dans les deux cas, notre addendum sera placA~X aprA~Xs
           AX </section> AX et avant AX <section> AX. La premiA~Xre solution
           est meilleure puisqu’elle fonctionnera toujours, mA~Xme si le
           document est rA~XorganisA~X.

           Les deux existent parce que les formats des documentations sont
           diffA~Xrents. Dans certains d’entre eux, il est possible d’indiquer
           la fin d’une section comme AX "</section>" AX que nous avons
           utilisA~X), et dans d’autres les fins de section ne sont pas
           spA~XcifiA~Xes explicitement (c’est le cas du format nroff). Dans
           le premier cas, la AX frontiA~Xre AX (boundary) est la fin de
           section, et le point €™insertion vient aprA~Xs. Dans le second cas,
           la frontiA~Xre correspond au dA~Xbut de la section suivante, et le
           point €™insertion vient juste avant.

       Tout ceci peut sembler confus, mais l’exemple suivant devrait vous
       A~Xclairer.

       Pour rA~Xsumer l’exemple utilisA~X, pour ajouter une section appelA~Xe
       AX A~X propos de cette traduction AX aprA~Xs la section AX A~X propos
       de ce document AX dans un document sgml, vous pouvez utiliser une de
       ces lignes d’en-tA~Xte.
          PO4A-HEADER: mode=after; position=A~X propos de ce document; endboundary=</section>
          PO4A-HEADER: mode=after; position=A~X propos de ce document; beginboundary=<section>

       Si vous voulez ajouter quelque chose aprA~Xs la section nroff
       suivante :
           .SH "AUTEURS"

         vous devez utiliser un champ "position" correspondant A~  cette
         ligne, et un champ "beginboundary" correspondant au dA~Xbut de la
         section suivante (c’est-A~ -dire "^\.SH"). L’addendum sera placA~X
         aprA~Xs le point de position et immA~Xdiatement avant la premiA~Xre
         ligne correspondant au champ "beginboundary". C’est-A~ -dire :

          PO4A-HEADER:mode=after;position=AUTEURS;beginboundary=\.SH

       Si vous voulez ajouter quelque chose A~  une section (par exemple
       aprA~Xs AX Copyright Tralala AX) au lieu d’ajouter une section
       entiA~Xre, vous pouvez fournir une "position" correspondant A~  cette
       ligne, et un champ "beginboundary" correspondant A~  n’importe quelle
       ligne.
          PO4A-HEADER:mode=after;position=Copyright Tralala, 2004;beginboundary=^

       Si vous voulez ajouter quelque chose A~  la fin du document, donnez une
       position correspondant A~  n’importe quelle ligne du document (mais A~
       une seule ligne, puisque po4a n’acceptera pas que la position ne
       corresponde pas A~  une ligne unique), et donnez un champ "endboundary"
       ne correspondant A~ aucune ligne. N’utilisez pas de chaA~Xne simple,
       comme AX FIN AX, mais prA~XfA~Xrez-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 A~Xgalement A~  AX ce[ fi]chier AX,
       ce qui n’est A~Xvidemment pas ce que vous voulez. La valeur du champ
       endboundary dans ce cas est "^\.fi$".

       Si l’addendum n’est pas positionnA~X lA~  oA~X 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 dA~XtaillA~X.

       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 ajoutA~Xe
       A~  la fin du fichier pour indiquer le traducteur.

        |PO4A-HEADER:mode=after;position=AUTEUR;beginboundary=^=head
        |
        |=head1 TRADUCTEUR
        |
        |moi

       De faA~Xon A~  placer l’addendum avant l’AUTEUR (section nommA~Xe
       AUTHOR dans le document original), utilisez l’en-tA~Xte suivant :

        PO4A-HEADER:mode=after;position=NOM;beginboundary=^=head1

       Ceci fonctionne parce que la premiA~Xre ligne correspondant A~
       l’expression rationnelle donnA~Xe dans le champ beginboundary
       (/^=head1/) aprA~Xs la section AX NOM AX (correspondant A~  la section
       AX NAME AX dans le document original), est celle indiquant les auteurs.
       De cette faA~Xon, l’addendum est placA~X entre les deux sections.

   Comment automatiser tout ceci ?
       L’utilisation de po4a s’est montrA~Xe propice aux erreurs pour les
       utilisateurs parce que deux programmes doivent A~Xtre appelA~Xs dans le
       bon ordre (po4a-updatepo puis po4a-translate), chacun d’eux prenant au
       moins 3 paramA~Xtres. De plus, il A~Xtait difficile avec ce systA~Xme
       d’utiliser un seul fichier po pour tous les documents quand plusieurs
       formats A~Xtaient utilisA~Xs.

       Le programme po4a(1) a A~XtA~X conA~Xu pour rA~Xpondre A~  ces
       difficultA~Xs. Une fois que votre projet a A~XtA~X converti A~  po4a,
       vous A~Xcrivez un petit fichier de configuration indiquant oA~X se
       trouvent vos fichiers de traduction (les fichiers po et pot), oA~X se
       trouvent les documents originaux, leurs formats, et oA~X doivent A~Xtre
       placA~Xes leur traduction.

       Ensuite, l’appel de po4a(1) avec ce fichier vA~Xrifie que les fichiers
       po sont synchronisA~Xs avec le document original, et que les documents
       traduits sont gA~XnA~XrA~Xs correctement. Bien sA~Xr, il vous faudra
       appeler ce programme deux fois : une fois avant l’A~Xdition des
       fichiers po pour les mettre A~  jour et une autre fois aprA~Xs pour
       mettre A~  jour les documents traduits. Mais vous n’aurez qu’A~  vous
       rappeler cette commande.

Comment A~Xa marche ?

       Cette section vous donne un bref aperA~Xu des rouages internes de po4a
       afin que vous vous sentiez plus A~  mA~Xme de nous aider A~  le
       maintenir et l’amA~Xliorer. Elle peut A~Xgalement vous permettre de
       comprendre pourquoi cela ne fait pas ce que vous souhaitez et corriger
       vos problA~Xmes par vous-mA~Xme.

   Quel est le plan gA~XnA~Xral ici ?
       L’architecture po4a est orientA~Xe objet (en Perl, n’est-ce pas
       formidable ?). L’ancA~Xtre commun de tous les classes d’analyseur est
       appelA~X Transtractor. Ce nom A~Xtrange provient du fait qu’il est A~
       la fois chargA~X de la traduction et de l’extraction des chaA~Xnes du
       document.

       Plus formellement, il prend un document A~  traduire et un fichier po
       contenant les traductions en entrA~Xe et produit en sortie deux autres
       fichiers : un autre fichier po (rA~Xsultant de l’extraction des
       chaA~Xnes A~  traduire du document d’entrA~Xe), et un document traduit
       (avec la mA~Xme structure que le document d’entrA~Xe, mais dont toutes
       les chaA~Xnes A~  traduire ont A~XtA~X remplacA~Xes par leur traduction
       donnA~Xe par le po fournit en entrA~Xe). Voici une reprA~Xsentation
       graphique de tout ceci :

         document entrA~Xe --\                             /---> document sortie
                            \      TransTractor::       /       (traduit)
                             +-->--   parse()  --------+
                            /                           \
         po entrA~Xe --------/                             \---> po sortie
                                                                (extrait)

       Cette forme d’os est le coeur de l’architecture de po4a. Sans le
       fichier po en entrA~Xe et le document en sortie, cela donne
       po4a-gettextize. Si vous fournissez les deux entrA~Xes et ignorez le po
       de sortie, vous aurez po4a-translate.

       TransTractor::parse() est une fonction virtuelle implA~XmentA~Xe dans
       chaque module. Voici un petit exemple pour montrer comment elle marche.
       Cet exemple analyse une liste de paragraphes qui dA~Xbutent 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 }

       A~X la ligne 6, <p> est rencontrA~X pour la seconde fois. Cela indique
       le passage un paragraphe suivant. Nous replaA~Xons donc la ligne, qui
       vient juste d’A~Xtre obtenue, dans le document d’origine (ligne 7) et
       envoyons le paragraphe ainsi construit dans les sorties. AprA~Xs avoir
       retirA~X le <p> de tA~Xte en ligne 9, nous envoyons la concatA~Xnation
       de cette balise avec la traduction du reste du paragraphe.

       Cette fonction translate() est trA~Xs pratique. Elle envoie son
       paramA~Xtre dans le fichier po de sortie (l’extraction) et renvoie sa
       traduction telle qu’elle a A~XtA~X trouvA~Xe dans le fichier po
       d’entrA~Xe (la traduction). Comme elle est utilisA~Xe dans le
       paramA~Xtre de pushline(), cette traduction se retrouve dans le
       document de sortie.

       N’est-ce pas gA~Xnial ? 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 dA~Xtails A~  ce sujet dans
       Locale::Po4a::TransTractor(3pm).

   Gettextization : Comment A~Xa marche ?
       L’idA~Xe ici est de prendre A~  la fois le document d’origine et sa
       traduction, et de supposer que la NiA~Xme chaA~Xne extraite du document
       traduit correspond A~  la traduction de la NiA~Xme chaA~Xne du document
       original. Pour que cela fonctionne, il faut donc que les deux documents
       aient exactement la mA~Xme structure. Par exemple, si les fichiers ont
       la structure suivante, il y a trA~Xs peu de chance pour que la
       quatriA~Xme chaA~Xne de la traduction (qui est de type AX chapter AX)
       soit la traduction de la quatriA~Xme chaA~Xne du document original (de
       type AX paragraph AX).

           Original         Traduction

         chapitre            chapitre
           paragraphe          paragraphe
           paragraphe          paragraphe
           paragraphe        chapitre
         chapitre              paragraphe
           paragraphe          paragraphe

       Pour cela, les analyseurs po4a sont utilisA~Xs A~  la fois sur
       l’original et sur la traduction pour extraire des fichiers po, et un
       troisiA~Xme fichier po est construit A~  partir d’eux en utilisant les
       chaA~Xnes du second comme traductions des chaA~Xnes du premier. Pour
       s’assurer que les chaA~Xnes ainsi associA~Xes sont bien les
       traductions, les analyseurs de po4a doivent ajouter des informations
       sur le type syntaxique des chaA~Xnes extraites du document (les
       analyseurs existants le font, les vA~Xtres devraient A~Xgalement).
       Ensuite, ces informations sont utilisA~Xes pour s’assurer que les deux
       documents ont la mA~Xme syntaxe. Dans l’exemple prA~XcA~Xdent, cela
       permet de dA~Xtecter que la quatriA~Xme chaA~Xne est dans un cas un
       paragraphe et dans l’autre un titre de chapitre, et le problA~Xme est
       affichA~X.

       En thA~Xorie, il devrait A~Xtre possible de dA~Xtecter le problA~Xme,
       puis de resynchroniser les fichiers par la suite (comme le fait diff).
       Mais il est alors difficile de savoir quoi faire des chaA~Xnes
       prA~XcA~Xdant la dA~Xsynchronisation, et le rA~Xsultat pourrait parfois
       ne pas A~Xtre bon. C’est pourquoi l’implA~Xmentation actuelle ne
       resynchronise rien et A~Xchoue avec un message d’erreur complet quand
       quelque chose se passe mal, indiquant qu’une modification manuelle des
       fichiers est nA~Xcessaire pour corriger le problA~Xme.

       MA~Xme avec ces prA~Xcautions, des erreurs peuvent survenir. C’est la
       raison pour laquelle toutes les traductions trouvA~Xes de cette faA~Xon
       sont marquA~Xes AX fuzzy AX, pour s’assurer que le traducteur les
       relira et vA~Xrifiera.

   Fonctionnement dâ€â€™un Addendum
       Bien, il n’y a rien de bien compliquA~X ici. La traduction n’est pas
       directement A~Xcrite sur le disque, mais est conservA~Xe en mA~Xmoire
       jusqu’A~  ce que tous les addenda soient ajoutA~Xs. Les algorithmes
       utilisA~Xs sont assez simples. Une ligne correspondant A~  l’expression
       rationnelle de la position est recherchA~Xe, et l’addendum est ajoutA~X
       juste avant si mode=before. Sinon, la premiA~Xre ligne trouvA~Xe A~
       partir de cette position correspondant A~  l’expression rationnelle
       donnA~Xe par le champ boundary est recherchA~Xe et l’addendum est
       insA~XrA~X juste aprA~Xs 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 posA~Xes. En fait,
       la plupart d’entre elles sont des questions de design du projet. Si
       vous pensez que po4a n’est pas la bonne rA~Xponse au problA~Xme 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 intA~Xresse.

   Pourquoi traduire chaque paragraphe sA~XparA~Xment ?
       En effet, avec po4a, tous les paragraphes sont traduits sA~XparA~Xment
       (en fait, c’est au choix de chaque module, mais tous les modules
       existants font ainsi, et les vA~Xtres devraient A~Xgalement). Il y a
       deux avantages principaux A~  cette approche :

       · Quand les parties techniques du document sont masquA~Xes, le
         traducteur ne peut pas faire de bA~Xtises avec. Moins nous
         prA~Xsentons de marqueurs au traducteur, moins il pourra faire
         d’erreurs.

       · DA~Xcouper le document aide A~  isoler les changements apparaissant
         dans le document original. Lorsque l’original est modifiA~X, la mise
         A~  jour des parties modifiA~Xes est plus facile.

       MA~Xme avec ces avantages, certains n’aiment pas l’idA~Xe de traduire
       chaque paragraphe sA~XparA~Xment. Voici quelques rA~Xponses A~  leurs
       inquiA~Xtudes :

       · Cette approche a A~XtA~X couronnA~Xe de succA~Xs dans le cadre du
         projet KDE et a permis de produire la plus grosse documentation
         traduite et mise A~  jour A~  notre connaissance.

       · Les traducteurs peuvent toujours utiliser le contexte pour traduire,
         puisque les chaA~Xnes du fichier po se trouvent dans le mA~Xme ordre
         que dans le document original. La traduction sA~Xquentielle est donc
         relativement comparable qu’elle soit faite avec ou sans po4a. Et dans
         tous les cas, la meilleure faA~Xon reste de convertir le document
         dans un format imprimable puisque les indications de formatage ne
         sont pas vraiment lisibles.

       · C’est l’approche utilisA~Xe par les traducteurs professionnels.
         MA~Xme si je l’admets, leurs buts peuvent A~Xtre diffA~Xrents des
         traducteurs de logiciels A~  source ouvert. La maintenance A~Xtant
         par exemple souvent moins critique puisque le contenu change
         rarement.

   Pourquoi ne pas dA~Xcouper au niveau des phrases (ou A~  un niveau plus
       petit) ?
       Les outils des traducteurs professionnels dA~Xcoupent parfois les
       documents au niveau des phrases, de faA~Xon A~  maximiser la
       rA~Xutilisation de traductions prA~XcA~Xdentes et A~  accA~XlA~Xrer
       leur travail. Le problA~Xme est qu’une mA~Xme phrase peut avoir
       plusieurs traductions en fonction du contexte.

       Les paragraphes sont par dA~Xfinition plus longs que les phrases. Cela
       permet la plupart du temps d’assurer que deux paragraphes dans deux
       documents diffA~Xrents auront le mA~Xme sens (et la mA~Xme traduction),
       indA~Xpendamment du contexte.

       Un dA~Xcoupage A~  un niveau encore plus petit qu’une phrase pourrait
       A~Xtre trA~Xs gA~Xnant. Ce serait un peu long d’expliquer pourquoi ici,
       mais les lecteurs intA~XressA~Xs 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
       rA~Xgles syntaxiques, et il n’y a aucun moyen de construire des phrases
       A~  partir de morceaux de phrases pour toutes les langues existantes
       (ou pour les 5 A~  10 langues les plus parlA~Xes, et mA~Xme moins).

   Pourquoi ne pas mettre la version originelle en commentaire avec la
       traduction ?
       A~X premiA~Xre vue, gettext ne semble pas adaptA~X A~  tous les types
       de traduction. Par exemple, il ne semblait pas adaptA~X A~  debconf,
       l’interface que tous les paquets Debian utilisent pour l’interaction
       avec l’utilisateur pendant l’installation. Dans ce cas, les textes A~
       traduire A~Xtaient assez courts (une dizaine de lignes pour chaque
       fichier), et il A~Xtait difficile de placer la traduction dans un
       fichier sA~XparA~X parce qu’il doit A~Xtre disponible avant
       l’installation du paquet.

       C’est pourquoi les concepteurs de debconf ont dA~XcidA~X
       d’implA~Xmenter une autre solution, plaA~Xant les traductions dans le
       mA~Xme fichier que l’original. C’est une solution plutA~Xt
       sA~Xduisante. Certains voudront A~Xgalement faire ainsi pour les
       fichiers xml, par exemple. Voici A~  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 A~XtA~X si problA~Xmatique que l’approche basA~Xe
       sur po est dA~Xsormais utilisA~Xe. Seul l’original peut A~Xtre
       A~XditA~X dans le fichier, et les traductions sont placA~Xes dans des
       fichiers po gA~XnA~XrA~Xs A~  partir du modA~Xle maA~Xtre (et
       replacA~Xs au cours de la compilation). L’ancien systA~Xme a A~XtA~X
       abandonnA~X A~  cause de plusieurs problA~Xmes :

       ·   problA~Xmes de maintenance

           Si plusieurs traducteurs fournissent une rustine (patch) au mA~Xme
           moment, il est difficile de les appliquer ensemble.

           Comment dA~Xtecter les modifications dans l’original qui doivent
           A~Xtre appliquA~Xes A~  une traduction ? Pour pouvoir utiliser
           diff, il faut noter la version du document original traduit.
           C’est-A~ -dire qu’il faut un fichier po dans le fichier ;)

       ·   problA~Xmes d’encodage

           Cette solution n’est envisageable que quand seules des langues
           europA~Xennes sont impliquA~Xes, mais la traduction pour le
           corA~Xen, le russe ou l’arabe peuvent compliquer la situation. UTF
           peut A~Xtre une solution, mais il y a A~Xgalement des problA~Xmes
           avec.

           De plus, ces problA~Xmes sont difficiles A~  dA~Xtecter (c.-A~ -d.
           que seules les personnes capables de lire le corA~Xen pourront
           s’apercevoir que l’encodage pour le corA~Xen est dA~Xfectueux [ce
           qui aurait A~XtA~X causA~X par un traducteur russe]).

       gettext rA~Xsout tous ces problA~Xmes.

   Mais gettext nâ€â€™a pas A~XtA~X conA~Xu pour faire A~Xa !
       C’est vrai, mais A~  ce jour, personne n’a apportA~X de meilleure
       solution. La seule solution alternative est la traduction manuelle,
       avec tous les problA~Xmes de maintenance qu’elle comporte.

   Quant 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 dA~XveloppA~X au sein du projet KDE pour gA~Xrer les
           XML DocBook. C’est A~  notre connaissance le premier programme qui
           a extrait des chaA~Xnes A~  traduire d’une documentation pour les
           mettre dans un fichier po, et les rA~Xinjecter ensuite dans le
           document aprA~Xs la traduction.

           Il ne peut gA~Xrer que le format XML, avec un DTD particulier. Je
           n’aime pas beaucoup la faA~Xon dont les listes sont gA~XrA~Xes :
           elles sont rassemblA~Xes en un seul gros msgid. Lorsque la liste
           est de taille importante, les A~XlA~Xments sont assez durs A~
           gA~Xrer.

       po-debiandoc
           Ce programme A~Xcrit par Denis Barbier est un prA~Xcurseur du
           module sgml de po4a, qui le remplace plus ou moins. Comme son nom
           l’indique, il ne gA~Xre que le DTD debiandoc, qui est en voie
           d’extinction.

       Le principal avantage de po4a par rapport A~  eux est la facilitA~X
       d’ajouter du contenu additionnel (ce qui est encore plus difficile avec
       ces outils) et la possibilitA~X de faire une gettextization.

   A~Xduquer les dA~Xveloppeurs au problA~Xme des traductions
       Lors de la traduction de documentations ou de programmes, trois types
       de difficultA~Xs sont rencontrA~Xs ; des problA~Xmes linguistiques
       (tout le monde ne parle pas deux langues), des problA~Xmes techniques
       (la raison d’A~Xtre de po4a) et des problA~Xmes de type relationnel et
       humain. Tous les dA~Xveloppeurs ne voient pas la nA~XcessitA~X de
       rA~Xaliser des traductions. MA~Xme avec la meilleure volontA~X, ils
       peuvent aussi ignorer comment faciliter le travail des traducteurs.
       C’est pour cela que po4a fournit une bonne quantitA~X 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 dA~Xveloppeurs inondA~Xs de tonnes de
       fichiers contenant les traductions pour des langues qu’ils ne parlent
       quasiment pas, et qui devrait les aider A~  gA~Xrer 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 A~Xtre dA~Xroutant. C’est pourquoi tous les fichiers
       contiennent un en-tA~Xte similaire A~  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 mA~Xme faA~Xon, les fichiers po usuels n’ont qu’A~  A~Xtre
       copiA~Xs dans le rA~Xpertoire po/. Mais ce nâ€â€™est pas le cas de ceux
       manipulA~Xs par po4a. Le principal risque A~Xtant que le dA~Xveloppeur
       A~Xcrase la traduction existante de son programme avec la traduction de
       sa documentation. (Les deux ne peuvent pas A~Xtre stockA~Xes dans le
       mA~Xme 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 crA~XA~Xs par le module po-debiandoc contient l’en-tA~Xte 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
        #

   RA~XSUMA~X des avantages de lâ€â€™approche basA~Xe sur gettext
       · Les traductions ne sont pas stockA~Xes indA~Xpendamment de
         l’original, ce qui rend possible la dA~Xtection des parties A~
         mettre A~  jour.

       · Les traductions sont stockA~Xes dans des fichiers diffA~Xrents pour
         chaque langue, ce qui A~Xvite les interfA~Xrences entre traducteurs.
         Que ce soit pour la soumission de rustines ou pour le choix d’un
         encodage.

       · En interne, tout est basA~X sur "gettext" (mais "po4a" offre une
         interface simple qui ne nA~Xcessite pas de comprendre comment A~Xa
         marche en interne pour pouvoir l’utiliser). Ce qui permet de ne pas
         rA~Xinventer la roue, et du fait de leur utilisation importante, nous
         pouvons supposer qu’ils ont peu ou pas de bogue.

       · Pour l’utilisateur final, rien ne change (A~  part que les
         documentations seront probablement mieux maintenues :). La
         documentation distribuA~Xe reste la mA~Xme.

       · Il n’est pas nA~Xcessaire pour les traducteurs d’apprendre une
         nouvelle syntaxe et leur A~Xditeur de fichier po prA~XfA~XrA~X (qui
         peut A~Xtre le mode po d’emacs, kbabel ou gtranslator) sera parfait.

       · Gettext permet d’obtenir facilement des statistiques sur ce qui a
         A~XtA~X fait, ce qui doit A~Xtre revu et mis A~  jour, et sur ce
         qu’il reste A~  faire. Vous trouverez des exemples A~  ces adresses :

          - http://kbabel.kde.org/img/previewKonq.png
          - http://www.debian.org/intl/l10n/

       Mais tout n’est pas rose, et cette approche a aussi quelques
       dA~Xsavantages que nous devons gA~Xrer.

       · Les addenda sont ... surprenants au premier abord.

       · Il n’est pas possible d’adapter le texte traduit A~  votre goA~Xt,
         comme de dA~Xcomposer ou recomposer des paragraphes. Mais d’un autre
         cA~XtA~X, s’il s’agit d’un problA~Xme dans le document original,
         celui-ci doit A~Xtre signalA~X de toute faA~Xon.

       · MA~Xme s’il a une interface simple, il reste un nouvel outil qu’il
         faudra apprendre A~  maA~Xtriser.

         Un de mes rA~Xves serait d’intA~Xgrer po4a A~  gtranslator ou kbabel.
         Lorsqu’un fichier serait ouvert, ses chaA~Xnes seraient extraites
         automatiquement. Lors de l’enregistrement, le fichier sgml traduit
         serait A~Xcrit sur le disque. Si nous arrivons A~  faire un module
         pour MS Word (TM) (ou au moins pour le format RTF), des traducteurs
         professionnels pourraient mA~Xme l’utiliser.

Bogues connus et demandes dâ€â€™A~Xvolutions
       Le plus gros problA~Xme (A~  part les modules manquants) est la gestion
       de l’encodage. Ajouter un pragma perl UTF8, puis recoder les chaA~Xnes
       en sortie est le chemin envisagA~X, mais ce n’est pas encore fait.

       Nous aimerions A~Xgalement factoriser certaines parties de code
       (concernant l’injection de fichier) du module sgml dans le TransTractor
       de faA~Xon A~  ce que tous les modules puissent en profiter. Mais ceci
       n’est pas visible pour les utilisateurs.

AUTEURS

        Denis Barbier <barbier,linuxfr.org>
        Martin Quinson (mquinson#debian.org)

TRADUCTION

        Martin Quinson (mquinson#debian.org)