Provided by: po4a_0.73-2ubuntu1_all bug

NOM

       po4a - Cadre de travail pour la traduction de documentations et autres documents

Introduction

       po4a (PO pour tout – PO for anything) facilite la maintenance de la traduction de la documentation en
       utilisant les outils classiques de gettext. La principale caractéristique de po4a est qu'il dissocie la
       traduction du contenu et la structure du document.

       Ce document sert d'introduction au projet po4a en mettant l'accent sur personnes qui envisagent
       éventuellement d'utiliser cet outil et qui sont simplement curieuses et souhaitent comprendre pourquoi
       les choses sont comme elles sont.

Pourquoi po4a ?

       La philosophie des logiciels libres est de rendre la technologie réellement disponible à tout le monde.
       Cependant, la licence n’est pas la seule préoccupation car un logiciel libre non traduit est inutilisable
       par des publics non anglophones. En conséquence, nous avons encore du travail pour rendre les logiciels
       globalement disponibles.

       Cette situation est bien comprise par la plupart des projets et tout le monde est désormais convaincu de
       la nécessité de tout traduire. Pourtant, les traductions représentent un effort énorme de nombreuses
       personnes, paralysées par de petites difficultés techniques.

       Heureusement, les logiciels libres sont réellement très bien traduits grâce à la suite d’outils gettext.
       Ces outils sont utilisés pour extraire les chaines traduisibles d’un programme et pour présenter ces dans
       un format standardisé (appelés fichiers PO, ou catalogue de traduction). Tout un écosystème d’outils a
       émergé pour aider les équipes de traduction à traduire ces fichiers PO. Le résultat est alors utilisé par
       gettext à l'exécution du logiciel pour afficher les messages traduits dans l’interface d’utilisation.

       En ce qui concerne la documentation, cependant, la situation est quelque peu décevante. Au début, la
       traduction de la documentation peut sembler plus facile que la traduction d'un programme, car il
       semblerait que vous deviez simplement copier le fichier source de la documentation et commencer à
       traduire le contenu. Cependant, lorsque la documentation originale est modifiée, le suivi des
       modifications se transforme rapidement en cauchemar pour les équipes de traduction. Si elle est effectuée
       manuellement, cette tâche est désagréable et sujette aux erreurs.

       Les traductions obsolètes sont souvent pires qu’une absence de traduction. Une documentation qui décrit
       un comportement désormais obsolète du programme sera trompeuse. De plus, la prise de contact avec les
       responsables du logiciels est impossible à cause de la barrière de la langue. De plus, les responsables
       ne peuvent pas forcément résoudre les problèmes sans une connaissance de toutes les langues dans
       lesquelles la documentation est traduite. Ces difficultés, souvent causées par un mauvais outillage,
       peuvent miner la motivation des équipes de traduction, aggravant encore les problèmes.

       Le but du projet po4a est de faciliter le travail de traduction de la documentation. En particulier, il
       facilite la maintenance des traductions de documentation.

       L'idée est de réutiliser et d'adapter l'approche gettext à ce domaine. Comme pour gettext, les textes
       sont extraits de leur emplacement d'origine et présentés aux équipes de traduction sous forme de
       catalogues de traduction PO. Les équipes de traduction peuvent utiliser les outils classiques de gettext
       pour suivre le travail à faire, collaborer et s'organiser. po4a injecte ensuite les traductions
       directement dans la structure de la documentation pour produire des fichiers traduits qui peuvent être
       traités et distribués comme les fichiers anglais. Tout paragraphe qui n'est pas traduit est laissé en
       anglais dans le document résultant, garantissant que des traductions obsolètes ne voient jamais le jour.

       Ceci automatise la plupart des gros travaux de maintenance de la traduction. La découverte des
       paragraphes nécessitant une mise à jour devient très facile et le processus est complètement automatisé
       lorsque les éléments sont réorganisés sans autre modification. Une vérification spécifique peut également
       être utilisée pour réduire le risque d'erreurs de formatage qui entraineraient un document altéré.

       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 (analyseur stable)
           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) prend également en charge le format mdoc, utilisé par les  pages  de
           manuel BSD (ils sont également assez courants sous Linux).

       AsciiDoc (analyseur stable)
           Ce  format  est  un format de balisage léger destiné à faciliter la création de documentation. Il est
           par exemple utilisé pour documenter le système git. Ces pages de manuel sont traduites  à  l'aide  de
           po4a.

           Voir Locale::Po4a::AsciiDoc pour en savoir plus.

       pod (analyseur stable)
           C’est  le  format pour la documentation en ligne de Perl (« Perl Online Documentation> »). Le langage
           et ses documentations sont documentés en utilisant ce format en plus de la majorité 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  des  équipes
           de traduction jusqu'à ce que vous utilisiez po4a.

           Voir Locale::Po4a::Pod pour en savoir plus.

       sgml (analyseur stable)
           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 même de faire des livres  complets.  Des
           documents  aussi  longs  peuvent  être  vraiment complexes à traduire. diff 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 DTD DebianDoc et DocBook sont prises en charge, mais l’ajout d’une nouvelle
           DTD est très facile. Il est même possible d’utiliser po4a avec une DTD SGML inconnue sans modifier le
           code  en  fournissant  les  informations  nécessaires   sur   la   ligne   de   commande.   Consultez
           Locale::Po4a::Sgml(3pm) pour en savoir plus.

       TeX / LaTeX (analyseur stable)
           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.

       text (analyseur stable)
           Le format Text est le format de base pour de nombreux formats qui incluent de longs blocs de texte, y
           compris Markdown, fortunes, sections préliminaires YAML, debian/changelog et debian/control.

           Ceci  prend en charge le format commun utilisé dans les générateurs de sites statiques, les README et
           d'autres systèmes de documentation. Voir Locale::Po4a::Text(3pm) pour en savoir plus.

       xml and XHMTL (analyseur probablement stable)
           Le format XML est à la base de beaucoup de formats pour la documentation.

           À ce jour, la DTD DocBook et XHTML sont pris en charge par po4a. Consultez Locale::Po4a::Docbook(3pm)
           pour en savoir plus.

       BibTex (analyseur probablement stable)
           Le format BibTex est utilisé conjointement avec LaTeX pour la mise en forme des listes de  références
           (bibliographies).

           Voir Locale::Po4a::BibTex pour en savoir plus.

       DocBook (analyseur probablement stable)
           Un langage de balisage basé sur XML qui utilise des balises sémantiques pour décrire des documents.

           Voir Locale::Po4a:Docbook pour en savoir plus.

       Guide XML (analyseur probablement stable)
           Un  format  de  documentation  XML.  Ce module a été développé spécifiquement pour aider à prendre en
           charge et à maintenir les traductions de la documentation de Gentoo Linux jusqu'à au moins mars  2016
           (basé sur la Wayback Machine). Gentoo est depuis passé au format DevBook XML.

           Voir Locale::Po4a:Guide pour en savoir plus.

       Wml (analyseur probablement stable)
           Le  Web Markup Language, ne pas confondre le WML avec le WAP utilisé sur les téléphones portables. Ce
           module s'appuie sur le module Xhtml, qui lui-même s'appuie sur le module XmL.

           Voir Locale::Po4a::Wml pour en savoir plus.

       Yaml (analyseur probablement stable)
           Un surensemble strict de JSON. YAML est souvent utilisé comme systèmes ou projets  de  configuration.
           YAML est au cœur d’Ansible de Red Hat.

           Voir Locale::Po4a::Yaml pour en savoir plus.

       RubyDoc (analyseur probablement stable)
           Le  format  Ruby  Document  (RD),  à l'origine le format de documentation par défaut pour Ruby et les
           projets Ruby avant d'être la conversion à RDoc en 2002. Bien qu'apparemment la version  japonaise  du
           Manuel de Référence Ruby utilise toujours le RD.

           Voir Locale::Po4a::RubyDoc pour en savoir plus.

       Halibut (analyseur très expérimental)
           Un  système  de  production  de  documentation,  avec  des éléments similaires à TeX, debiandoc-sgml,
           TeXinfo, et autres, développé par Simon Tatham, le développeur de PuTTY.

           Voir Locale::Po4a:Halibut pour en savoir plus.

       Ini (analyseur très expérimental)
           Format de fichier de configuration popularisé par MS-DOS.

           Voir Locale::Po4a::Ini pour en savoir plus.

       texinfo (analyseur très expérimental)
           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). La prise en charge pour Locale::Po4a::Texinfo(3pm)
           dans po4a en est encore à ses débuts. N’hésitez pas à nous envoyer  des  rapports  de  bogue  ou  des
           demandes de nouvelle fonctionnalité.

       gemtext (analyseur très expérimental)
           Le  format  texte natif du protocole Gemini. L’extension « .gmi » est généralement utilisée. La prise
           en charge de ce module dans po4a en est encore à ses débuts. Si vous trouvez des problèmes, n’hésitez
           pas à faire un rapport de bogue ou à demander des améliorations.

       Autres formats supportés
           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 Linux 2.4+ (Locale::Po4a::KernelHelp) ou les
           diagrammes produits par l’outil dia (Locale::Po4a:Dia). L’ajout d’un nouveau format est souvent  très
           simple,  et  consiste  principalement  à  fournir  un  interpréteur  pour  le format voulu. Consulter
           Locale::Po4a::TransTractor(3pm) pour en savoir plus.

       Formats non supportés
           Malheureusement, po4a soufre d’un manque de prise en  charge  de  divers  formats  de  documentation.
           Beaucoup  d’entre  eux  seraient simples à prendre en charge dans po4a. Cela inclut des formats étant
           utilisés pour plus que de la documentation, tels que les descriptions de paquets (deb  et  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.

Utiliser po4a

       La manière la plus simple d'utiliser cet outil dans votre projet est d'écrire un fichier de configuration
       pour le programme po4a, et de n'interagir qu'avec ce programme. Référez-vous  à  sa  documentation,  dans
       po4a(1).  Le  reste  de  cette  section  fournit  plus  de  détails  pour  une utilisation avancée et une
       compréhension approfondie de po4a.

   Schéma détaillé du flux de travail de po4a
       Assurez-vous d'avoir lu po4a(1) avant d'aborder cette section  trop  détaillée  afin  d'obtenir  une  vue
       d'ensemble  simplifiée  du  flux  de  travail  de  po4a.  Revenez  ici  pour  obtenir l'image complète et
       effrayante, avec presque tous les détails.

       Le schéma suivant, chapi.doc est un exemple de nom pour la documentation à traduire ; XX.doc est le  même
       document  traduit  dans  la  langue XX tandis que doc.XX.po est le catalogue de traduction de ce document
       dans la langue XX. Les responsables de la documentation auront principalement la charge de chapi.doc (qui
       peut être une page de manuel, un document XML, un fichier AsciiDoc, etc.) ;  les  équipes  de  traduction
       seront principalement concernées par le fichier PO, tandis que seul le fichier XX.doc sera publié.

       Les  transitions  entre crochets telles que "[po4a met à jour le po]" représentent l'exécution d'un outil
       po4a, tandis que les transitions entre accolades telles que "{mise à jour de chapi.doc}" représentent une
       modification manuelle des fichiers du projet.

                                          chapi.doc
                                              |
                                              V
            +<----------+<--------------------+----------------------->+
            :           |                     |                        :
       {traduction}     |       { mise à jour de chapi.doc }           :
            :           |                     |                        :
         XX.doc         |                     V                        V
       (optionnel)      |                 chapi.doc ------------------>+
            :           |                 (nouveau)                    |
            V           V                     |                        |
         [po4a-gettextize]  doc.XX.po --->+   |                        |
                |            (vieux)      |   |                        |
                |               ^         V   V                        |
                |               |  [po4a met à jour le po]             |
                V               |           |                          |
         traduction.pot         |           V                          |
                |               |       doc.XX.po                      |
                |               |    (correspondances)                 |
                |               |           |                          |
          {traduction}          |           |                          |
                |               |           V                          |
                |               |  {modifications manuelles}           |
                |               |           |                          |
                V               |           V                          V
            doc.XX.po --------->+<------- doc.XX.po   addendum     chapi.doc
            (initial)                     (à jour)   (optionnel)    (à jour)
                :                           |            |             |
                :                           V            |             |
                +-------------------------> +            |             |
                                            |            |             |
                                            V            V             V
                                            +----------->+<------------+
                                                         |
                                                         V
                                         [po4a met à jour les traductions]
                                                         |
                                                         V
                                                       XX.doc
                                                      (à jour)

       Là encore, ce schéma est particulièrement compliqué. Consultez po4a(1) pour un aperçu simplifié.

       La partie à gauche montre comment po4a-gettextize(1) peut  être  utilisé  pour  convertir  un  projet  de
       traduction  existant  en  infrastructure  po4a.  Ce  script  prend un document original et son équivalent
       traduit, et essaie de créer le fichier PO correspondant. Une telle conversion manuelle est  assez  lourde
       (voir  la  documentation po4a-gettextize(1) pour en savoir plus), mais elle n'est nécessaire qu'une seule
       fois pour convertir vos traductions existantes. Si vous n'avez aucune traduction à convertir, vous pouvez
       oublier cela et vous concentrer sur la partie droite du schéma.

       En haut à droite est décrit ce qui relève de l’auteur du  document  d’origine,  la  mise  à  jour  de  la
       documentation.  Au  milieu à droite sont décrites les mises à jour automatisées des fichiers à traduire :
       les nouvelles chaines sont extraites et comparées avec la traduction existante. La  traduction  existante
       est  utilisée  pour les parties n’ayant pas changé, alors que celles qui ont été en partie modifiées sont
       également associées à leur ancienne  traduction,  mais  avec  un  marquage  « fuzzy »  indiquant  que  la
       traduction doit être mise à jour. Un contenu nouveau ou fortement modifié est laissé non traduit.

       Ensuite,  le  bloc  modifications  manuelles  décrit l'action des équipes de traduction qui modifient les
       fichiers PO pour fournir des traductions à chaque chaine et paragraphe d'origine. Cela peut être fait  en
       utilisant  un  éditeur  spécifique  tel  que  GNOME  Translation Editor, Lokalize de KDE ou poedit, ou en
       utilisant une plateforme de localisation en ligne  telle  que  weblate  ou  pootle.  Le  résultat  de  la
       traduction est un ensemble de fichiers PO, un par langue. Référez-vous à la documentation de gettext pour
       en savoir plus.

       La  partie  inférieure  de  la  figure  montre  comment  po4a crée un document source traduit à partir du
       document original chapi.doc et du catalogue de traduction  doc.XX.po  mis  à  jour  par  les  équipes  de
       traduction.  La structure du document est réutilisée, tandis que le contenu original est remplacé par son
       équivalent traduit. En option, un addendum peut être utilisé pour ajouter du texte  supplémentaire  à  la
       traduction.  Ceci  est  souvent  utilisé  pour  ajouter  le  nom des membres des équipes de traduction au
       document final. Voir ci-dessous pour en savoir plus.

       L'appel à po4a met à jour automatiquement aussi bien les fichiers à traduire que les fichiers traduits.

   Commencer un nouveau projet de traduction
       Si vous partez de zéro, il vous suffit d'écrire un fichier de configuration pour po4a pour commencer. Des
       modèles appropriés sont créés pour les fichiers manquants, ce qui permet à vos contributeurs de  traduire
       votre  projet  dans  leur langue. Consultez po4a(1) pour un tutoriel de démarrage rapide et pour tous les
       détails.

       Si vous disposez d'une traduction existante, c'est-à-dire d'un fichier de documentation qui a été traduit
       manuellement,  vous  pouvez  intégrer  son  contenu  dans  votre  flux  de  travail  po4a  en   utilisant
       po4a-gettextize.  Cette  tâche  est un peu lourde (comme décrit dans la page de man de l'outil), mais une
       fois que  votre  projet  est  mis  en  adaptation  au  flux  de  travail  po4a,  tout  sera  mis  à  jour
       automatiquement.

   Mettre à jour les traductions et les documents
       Une  fois configuré, il suffit d'invoquer po4a pour mettre à jour à la fois les fichiers PO de traduction
       et les documents traduits. Vous pouvez passer l'argument "--no-translations" à po4a pour ne pas mettre  à
       jour  les  traductions  (et donc juste mettre à jour les fichiers PO) ou l'argument "--no-update" pour ne
       pas mettre à jour les fichiers PO (et donc juste mettre à jour les traductions). Cela  correspond  à  peu
       près  aux  scripts  individuels  po4a-updatepo  et  po4a-translate  qui  sont  maintenant obsolètes (voir
       «Pourquoi les scripts individuels sont-ils obsolètes» dans la FAQ ci-dessous).

   Utiliser les addendas pour ajouter du texte supplémentaire aux traductions
       Ajouter un nouveau texte à la traduction est probablement la seule chose qui  soit  plus  facile  à  long
       terme lorsque vous traduisez des fichiers manuellement :). Cela se produit lorsque vous souhaitez ajouter
       une  section  supplémentaire au document traduit, ne correspondant à aucun contenu du document d'origine.
       Le cas d'usage classique consiste à mentionner l'équipe de traduction et à indiquer comment signaler  les
       problèmes spécifiques à la traduction.

       Avec po4a, vous devez spécifier les fichiers addendum, qui peuvent être conceptuellement considérés comme
       des  correctifs appliqués au document localisé après traitement. Chaque addendum doit être fourni dans un
       fichier séparé, dont le format est cependant très différent des correctifs classiques. La première  ligne
       est une ligne d'en-tête, définissant le point d'insertion de l'addendum (avec une syntaxe malheureusement
       obscure  -  voir  ci-dessous)  tandis  que  le  reste  du  fichier est ajouté textuellement à la position
       déterminée.

       La ligne d'entête doit commencer par la chaine PO4A-HEADER:, suivie  d'une  liste  de  champs  clé=valeur
       séparés par des points-virgules.

       Par exemple, l'entête suivant déclare un addendum qui doit être placé à la toute fin de la traduction.

        PO4A-HEADER: mode=eof

       Les  choses  sont plus complexes lorsque vous souhaitez ajouter votre contenu supplémentaire au milieu du
       document. L'entête suivant déclare un addendum qui doit être placé après  la  section  XML  contenant  la
       chaine "À propos de ce document" en traduction.

        PO4A-HEADER: position=À propos de ce document; mode=after; endboundary=</section>

       En  pratique,  en  essayant  d'appliquer  un  addendum,  po4a recherche la première ligne correspondant à
       l'argument "position" (cela peut être une expression régulière regexp). N'oubliez pas que po4a  considère
       ici  le  document  traduit.  Cette documentation est en anglais, mais votre ligne devrait probablement se
       lire comme suit si vous souhaitez que votre addendum s'applique à la traduction française du document.

        PO4A-HEADER: position=À propos de ce document; mode=after; endboundary=</section>

       Une fois que la "position" est trouvée dans le document cible, po4a recherche la ligne suivante après  la
       "position"  qui  correspond  au  "endboundary" fourni. L'addendum est ajouté juste après cette ligne (car
       nous avons fourni un endboundary, c'est-à-dire une limite terminant la section courante).

       Le même effet pourrait être obtenu avec l'entête suivant, qui est équivalent :

        PO4A-HEADER: position=À propos de ce document; mode=after; beginboundary=<section>

       Ici, po4a recherche la première ligne correspondant à "<section>"  après  la  ligne  correspondant  à  "À
       propos  de  ce  document"  dans  la traduction, et ajoute l'addendum avant cette ligne puisque nous avons
       fourni un beginboundary, c'est-à-dire une limite marquant le début de la section  suivante.  Donc,  cette
       ligne  d'entête  impose  de  placer  l'addendum  après la section contenant "À propos de ce document", et
       d'informer po4a qu'une section commence par une ligne contenant la balise "<section>". C'est équivalent à
       l'exemple précédent, car ce que vous voulez vraiment, c'est ajouter cet addendum soit après  "</section>"
       soit avant "<section.".

       Vous  pouvez  également définir le mode insertion sur la valeur "before", avec une sémantique similaire :
       combiner "mode=before" avec un "endboundary" mettra l'addendum juste après la limite correspondante,  qui
       est  la  dernière  limite  potentielle  avant  la  "position".  La  combinaison  de "mode=before" avec un
       "beginboundary" placera l'addendum juste avant la limite correspondante, c'est-à-dire la dernière  limite
       potentielle avant la "position".

         Mode   | Type de limite |     Limite utilisée      | Point d'insertion par rapport à la limite
        ========|===============|========================|=========================================
        'before'| 'endboundary' | dernière avant la 'position' | Juste après la limite
        'before'|'beginboundary'| dernière avant la 'position' | Juste avant la limite
        'after' | 'endboundary' | première après la 'position' | Juste après la limite
        'after' |'beginboundary'| première après la 'position' | Juste avant la limite
        'eof'   |   (rien)      |  sans objet             | Fin de fichier

       Trucs et astuces sur les addendas

       •   Gardez  à l’esprit que ce sont des expressions rationnelles. Par exemple, si vous voulez correspondre
           à la fin d’une section nroff terminant par la ligne ".fi", n’utilisez pas  ".fi"  comme  valeur  pour
           endboundary,  parce  que cala correspondra également à "ce[ fi]chier", ce qui n’est évidemment pas ce
           que vous voulez. La valeur du champ endboundary dans ce cas est "^\.fi$".

       •   Les espaces SONT importants dans le contenu de la "position" et des limites.  Donc  les  deux  lignes
           suivantes sont différentes. La seconde ne sera trouvé que s'il y a suffisamment d'espaces de fin dans
           le document traduit.

            PO4A-HEADER: position=À propos de ce document; mode=after; beginboundary=</section>
            PO4A-HEADER: position=À propos de ce document; mode=after; beginboundary=<section>

       •   Bien  que cette recherche contextuelle puisse être considérée comme opérant à peu près sur toutes les
           lignes du document traduit, elle opère en fait sur la chaîne de caractères  des  données  internes  à
           po4a. Cette chaîne de caractères des données internes peut être aussi bien un texte s'étendant sur un
           paragraphe  et  contenant  plusieurs  lignes,  ou  bien  peut  être  un  marqueur XML isolé. Le point
           d'insertion exact de l'addendum doit donc être placé avant ou après cette chaîne  de  caractères  des
           données internes et ne peut pas être à l'intérieur de celle-ci.

       •   Passez  l'argument "-vv" à po4a pour comprendre comment les addendas sont ajoutés à la traduction. Il
           peut également être utile d'exécuter po4a en mode débogage pour voir la  chaîne  de  données  interne
           réelle lorsque votre addendum ne s'applique pas.

       Exemples d'addenda

       •   Si vous voulez ajouter quelque chose après la section nroff suivante :

             .SH "AUTEURS"

           Vous  devez  sélectionner  une approche en deux étapes en définissant mode=after. D'abord, vous devez
           restreindre la recherche à la ligne après AUTHORS avec l'argument de position.  Ensuite,  vous  devez
           faire  correspondre  le  début  de  la  section  suivante  (c'est-à-dire,  ^\.SH)  avec l'argument de
           beginboundary. C'est-à-dire :

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

       •   Si vous voulez ajouter quelque chose juste après une ligne donnée  (par  exemple  après  «  Copyright
           Bidule  »),  utilisez  une position correspondant à cette ligne, un mode=after et renseignez 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 chaîne simple, comme "EOF", mais préférez-en une qui a une chance
           moindre de se trouver dans votre document.

            PO4A-HEADER:mode=after;position=À propos de ce document;beginboundary=FausseLimitePo4a

       Exemple plus détaillé

       Document original (au format POD :

        |=head1 NOM
        |
        |bêta - un programme un peu bêta
        |
        |=head1 AUTEUR
        |
        |moi

       Voici maintenant un addendum qui s’assure qu’une section est ajoutée à la fin du fichier pour indiquer le
       nom des membres des équipes de traduction.

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

       Pour placer l’addendum avant l’AUTEUR  (section  nommée  AUTHOR  dans  le  document  original),  utilisez
       l’en-tête suivant :

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

       Ceci fonctionne parce que la première ligne correspondant à l’expression rationnelle donnée dans le champ
       beginboundary  "/^=head1/" après la section « NOM » (correspondant à la section « NAME » dans le document
       original), est celle indiquant les auteurs. De cette façon, l’addendum est placé entre les deux sections.
       Notez que si une autre section est ajoutée entre NOM et AUTEUR, po4a ajoutera l’addendum par erreur avant
       la nouvelle section.

       Pour éviter cela, vous pouvez utiliser mode=before :

        PO4A-HEADER:mode=before;position=^=head1 AUTEUR

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.

   TransTractors et l'architecture du projet
       Au cœur du projet po4a se trouve la classe Locale::Po4a::TransTractor(3pm) qui  est  l’ancêtre  commun  à
       tous  les  analyseurs  de  po4a.  Ce  nom  étrange  provient  du fait qu'elle est à la fois chargée de la
       traduction et de l’extraction des chaînes du document.

       Plus formellement, il prend un document à traduire et un fichier PO contenant les traductions  en  entrée
       et  produit en sortie deux autres fichiers : un autre fichier PO (résultant de l’extraction des chaînes à
       traduire du document d’entrée), et un document traduit (avec la même structure que le document  d’entrée,
       mais  dont  toutes les chaînes à traduire ont été remplacées par leur traduction donnée par le PO fournit
       en entrée). Voici une représentation graphique de tout ceci :

          document en entrée --\                             /---> document en sortie
                             \      TransTractor::       /       (traduit)
                              +-->--   parse()  --------+
                             /                           \
       PO en entrée --------/                             \---> PO en sortie
                                                                 (extrait)

       Cette forme d’os est le cœur de l’architecture de po4a. Si  vous  fournissez  l'entrée  mais  ignorez  la
       sortie  PO,  vous  obtenez  po4a-translate.  Si  vous ignorez la sortie document à la place, vous obtenez
       po4a-updatepo. <po4a> utilise un premier TransTractor pour obtenir un fichier de sortie POT  mis  à  jour
       (en  ignorant  les  documents  en  sortie),  appelle  msgmerge  -U  pour mettre à jour les fichiers PO de
       traduction sur le disque et crée un second TransTractor à l'aide de ces  fichiers  PO  mis  à  jour  pour
       mettre  à  jour  les  documents  de  sortie. En d'autres termes, po4a vous offre une solution unique pour
       mettre à jour ce qui doit l'être, à l'aide d'un seul fichier de configuration.

       po4a-gettextize utilise également  deux  TransTractors,  mais  d'une  autre  manière :  il  construit  un
       TransTractor  par  langue,  puis  construit  un  nouveau  fichier  PO en utilisant les msgids du document
       originel en tant que msgids, et les msgids du document traduit en tant que msgstrs. Il  faut  faire  très
       attention  à  ce  que  les chaînes qui sont ainsi mises en correspondance correspondent réellement, comme
       indiqué dans po4a-gettextize(1).

   Analyseurs spécifiques aux formats
       Tous les analyseurs de format sont implémentés au-dessus de TransTractor.  Certains  sont  très  simples,
       comme  les  analyseurs  Text,  Markdown  et  AsciiDoc.  Ils  chargent les lignes une par une en utilisant
       TransTractor::shiftline() et accumulent le contenu des paragraphes ou autre. Une fois qu'une  chaîne  est
       complètement  analysée,  l'analyseur  utilise  TransTractor::translate() pour (1) ajouter cette chaîne au
       fichier PO de sortie et (2) obtenir la traduction du fichier PO d'entrée. L'analyseur pousse  ensuite  le
       résultat vers le fichier de sortie à l'aide de TransTractor::pushline().

       D'autres  analyseurs  sont  plus  complexes, car ils s'appuient sur un analyseur externe pour analyser le
       document d'entrée. Les analyseurs Xml, HTML, SGML et Pod sont construits  sur  les  analyseurs  SAX.  Ils
       déclarent  des  rappels à des événements tels que "J'ai trouvé un nouveau titre dont le contenu est ceci"
       pour mettre à jour le document de sortie et les fichiers POT de sortie en fonction du contenu d'entrée en
       utilisant TransTractor::translate() et TransTractor::pushline(). L'analyseur  Yaml  est  similaire,  mais
       différent :  il sérialise une structure de données produite par l'analyseur YAML::Tiny. C'est pourquoi le
       module Yaml de po4a ne parvient pas à déclarer les lignes de référence : l'emplacement de  chaque  chaîne
       dans  le  fichier  d'entrée  n'est pas conservé par l'analyseur, de sorte que nous ne pouvons fournir que
       "$filename:1" comme emplacement de la chaîne. Les  analyseurs  orientés  SAX  utilisent  des  globaux  et
       d'autres astuces pour enregistrer le nom de fichier et les numéros de ligne des références.

       Un  problème  spécifique  est  lié à l'encodage des fichiers et aux marqueurs BOM. Les analyseurs simples
       peuvent ignorer ce point qui est géré par TransTractor::read()  (utilisé  en  interne  pour  obtenir  les
       lignes  d'un  document  d'entrée),  mais  les  modules  qui  s'appuient  sur un analyseur externe doivent
       s'assurer que tous les fichiers sont lus avec une couche de décodage PerlIO appropriée.  Le  plus  simple
       est  d'ouvrir  le  fichier vous-même, et de fournir un identificateur de fichier ou directement la chaine
       complète à votre analyseur externe. Consultez Pod::read() et Pod::parse() pour un exemple. Le contenu  lu
       par  le  TransTractor  est  ignoré,  mais  un nouvel identificateur de fichier est transmis à l'analyseur
       externe. La partie importante est le mode "<"<:encoding($charset)""> qui est transmis à la fonction  perl
       open().

   Objets Po
       La  classe Locale::Po4a::Po(3pm) a la tâche de charger et d'utiliser les fichiers PO et POT. En principe,
       vous pouvez lire un fichier, ajouter des entrées, obtenir des traductions avec la méthode gettext(), puis
       écrire le PO dans un fichier. Les fonctions plus avancées telles que la fusion d'un fichier  PO  avec  un
       fichier POT ou la validation d'un fichier sont respectivement déléguées à msgmerge et msgfmt.

   Contribuer à po4a
       Même  si  vous n'avez jamais contribué à un projet libre, bienvenue ! Nous sommes prêts à vous aider et à
       vous encadrer. po4a est aujourd'hui mieux maintenu par sa communauté. Comme nous  manquons  d'aide,  nous
       essayons de rendre le projet accueillant en améliorant la documentation et les tests automatiques afin de
       vous  rendre  la  contribution au projet plus facile. Consultez le fichier CONTRIBUTING.md pour en savoir
       plus.

Projets open-source utilisant po4a

       Voici une liste très partielle des projets qui utilisent po4a en production pour leur  documentation.  Si
       vous  souhaitez  ajouter  votre  projet  à la liste, envoyez-nous simplement un e-mail (ou une demande de
       fusion (Merge Request)).

       •   adduser (man) : outil de gestion des utilisateurs et des groupes.

       •   apt (man, docbook) : Gestionnaire de paquets Debian.

       •   aptitude (docbook, svg) : gestionnaire de paquets en mode commande pour Debian

       •   site internet F-Droid <https://gitlab.com/fdroid/fdroid-website> (markdown) : catalogue de  logiciels
           libres pour la plateforme Android.

       •   git  <https://github.com/jnavila/git-manpages-l10n>  (asciidoc)  :  système  de  contrôle  de version
           distribué pour suivre les modifications du code source.

       •   manuel Linux <https://salsa.debian.org/manpages-l10n-team/manpages-l10n> (man)

           Ce projet fournit une infrastructure pour traduire de nombreuses  pages  de  manuel  dans  différents
           langages, prête à être intégrée dans plusieurs distributions majeures (Arch Linux, Debian et dérivés,
           Fedora).

       •   Stellarium  <https://github.com/Stellarium/stellarium>  (HTML)  :  un planétarium open source gratuit
           pour votre ordinateur. po4a est utilisé pour traduire les descriptions des objets célestes.

       •   Jamulus <https://jamulus.io/> (markdown, yaml, HTML) : une application FOSS  pour  le  brouillage  en
           ligne  en  temps  réel.  La  documentation du site web est maintenue en plusieurs langues à l'aide de
           po4a.

       •   Autres       éléments       à       trier        :        <https://gitlab.com/fdroid/fdroid-website/>
           <https://github.com/fsfe/reuse-docs/pull/61>

FAQ

   Comment prononcer po4a ?
       Personnellement,   je  le  prononce  comme  pouah  <https://en.wiktionary.org/wiki/pouah>,  qui  est  une
       interjection française équivalente à l'anglais yuck :) J'ai peut-être un étrange sens de l'humour :)

   Pourquoi les scripts individuels sont-ils obsolètes ?
       En effet, po4a-updatepo et po4a-translate sont dépréciés au profit de po4a. La raison en  est  que,  bien
       que  po4a  puisse  être  utilisé  comme  un  remplacement  direct de ces scripts, on y trouve beaucoup de
       duplication de code. Les scripts individuels font environ 150 lignes de code alors que le programme  po4a
       en  fait  1200, ils font donc beaucoup de choses en plus des éléments internes communs. La duplication du
       code entraîne l'apparition de bogues dans les deux versions et nécessite des corrections doubles. On peut
       voir une telle duplication dans les bogues #1022216 de Debian et le problème #442 sur GitHub qui  avaient
       exactement la même correction, avec une dans po4a et l'autre dans po4a-updatepo.

       À  long  terme,  j'aimerais abandonner les scripts individuels et ne maintenir qu'une seule version de ce
       code. Ce qui est sûr, c'est que les scripts individuels ne  seront  plus  améliorés,  et  que  seul  po4a
       bénéficiera de nouvelles fonctionnalités. Ceci étant dit, la dépréciation n'est pas immédiate. Je prévois
       de  conserver les scripts individuels aussi longtemps que possible, et au moins jusqu'en 2030. Cependant,
       si votre projet utilise encore po4a-updatepo et po4a-translate à  cette  date,  vous  pourriez  avoir  un
       problème.

       Nous  pourrions  également  annuler  la  dépréciation de ces scripts à un moment donné, si une réécriture
       élimine la duplication du code. Si vous avez des idées (ou mieux :  un  correctif),  votre  aide  est  la
       bienvenue.

   Qu’en est-il des autres outils de traduction de documentation utilisant gettext ?
       Il  y  en  a  quelques-uns.  Voici  une  liste  potentiellement incomplète, et d’autres outils arrivent à
       l’horizon.

       poxml
           C’est l’outil développé au sein du projet KDE pour gérer les XML DocBook. C’est à notre  connaissance
           le premier programme qui a extrait des chaînes à traduire d’une documentation pour les mettre dans un
           fichier PO, et les réinjecter ensuite dans le document après la traduction.

           Il  ne  peut gérer que le format XML, avec une DTD particulière. Je n’aime pas beaucoup la façon dont
           les listes sont gérées, elles sont rassemblées en un seul gros msgid. Lorsque la liste est de  taille
           importante, les éléments sont assez durs à gérer.

       po-debiandoc
           Ce  programme  écrit par Denis Barbier est un précurseur du module SGML de po4a, qui le remplace plus
           ou moins. Comme son nom l’indique, il ne gère que la DTD DebianDoc, qui est en voie d’extinction.

       xml2po.py
           Utilisé par l'équipe de documentation de GIMP depuis 2004, il fonctionne assez bien  même  si,  comme
           son  nom l'indique, il ne fonctionne qu'avec des fichiers XML et nécessite des makefiles spécialement
           configurés.

       Sphinx
           Le projet de documentation Sphinx utilise également gettext  de  manière  intensive  pour  gérer  ses
           traductions.  Malheureusement, il ne fonctionne que pour quelques formats de texte, rest et markdown,
           bien qu'il soit peut-être le seul outil à faire cela en gérant l'ensemble du processus de traduction.

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

   RÉSUMÉ des avantages de l’approche basée sur gettext
       • Les  traductions  ne  sont pas stockées indépendamment de l’original, ce qui rend possible la détection
         des parties à mettre à jour.

       • Les traductions sont stockées dans des fichiers  différents  pour  chaque  langue,  ce  qui  évite  les
         interférences  entre équipes de traduction. Que ce soit pour la soumission de rustines ou pour le choix
         d’un encodage.

       • En interne, tout est basé sur gettext (mais po4a offre une interface simple qui  ne  nécessite  pas  de
         comprendre  comment tout 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.

       • Pour  l’utilisation  finale,  rien  ne  change (à part que les documentations seront probablement mieux
         maintenues :). La documentation distribuée reste la même.

       • Il n’est pas nécessaire pour les membres des équipes de traduction d’apprendre une nouvelle syntaxe  et
         leur  éditeur  de  fichier  PO préféré (qui peut être le mode PO d’Emacs, Lokalize ou Gtranslator) sera
         parfait.

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

          - https://docs.kde.org/stable5/en/kdesdk/lokalize/project-view.html
         - 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.

       • Les addendas sont surprenants au premier abord.

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

       • 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 de documentation
         serait ouvert, ses chaînes seraient extraites automatiquement. Lors  de  l’enregistrement,  le  fichier
         traduit + un fichier po seraient écrits sur le disque. Si nous arrivions à faire un module pour MS Word
         (TM) (ou au moins pour le format RTF), po4a pourrait même être utilisés dans le milieu de la traduction
         professionnelle.

VOIR AUSSI

       •   La documentation de l'outil tout-en-un que vous devriez utiliser : po4a(1).

       •   La    documentation    des   scripts   po4a   individuels :   po4a-gettextize(1),   po4a-updatepo(1),
           po4a-translate(1), po4a-normalize(1).

       •   Les scripts d'assistance supplémentaires : msguntypot(1), po4a-display-man(1), po4a-display-pod(1).

       •   Les parsers de chaque format, en particulier pour consulter les options acceptées par chacun  d'entre
           eux :       Locale::Po4a::AsciiDoc(3pm)       Locale::Po4a::Dia(3pm),       Locale::Po4a::Guide(3pm),
           Locale::Po4a::Ini(3pm),            Locale::Po4a::KernelHelp(3pm),             Locale::Po4a::Man(3pm),
           Locale::Po4a::RubyDoc(3pm),            Locale::Po4a::Texinfo(3pm),           Locale::Po4a::Text(3pm),
           Locale::Po4a::Xhtml(3pm),             Locale::Po4a::Yaml(3pm),             Locale::Po4a::BibTeX(3pm),
           Locale::Po4a::Docbook(3pm),           Locale::Po4a::Halibut(3pm),           Locale::Po4a::LaTeX(3pm),
           Locale::Po4a::Pod(3pm),  Locale::Po4a::Sgml(3pm),   Locale::Po4a::TeX(3pm),   Locale::Po4a::Wml(3pm),
           Locale::Po4a::Xml(3pm).

       •   La  mise  en  œuvre  de  l'infrastructure de base : Locale::Po4a::TransTractor(3pm) (particulièrement
           important pour comprendre l'organisation du code), Locale::Po4a::Chooser(3pm), Locale::Po4a::Po(3pm),
           Locale::Po4a::Common(3pm). Consultez également le fichier  CONTRIBUTING.md  dans  l'arborescence  des
           sources.

AUTEURS

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

TRADUCTION

        Martin Quinson (mquinson#debian.org)

perl v5.38.2                                       2024-08-28                                          PO4A.7(1)