Man page - po4a(7)
Packages contains this manual
Available languages:
en fr pt_BR es it nl ja uk ru sr sr_Cyrl deManual
PO4A.7
NOMIntroduction
Pourquoi po4a ?
Formats pris en charge
Utiliser po4a
Schéma détaillé du flux de travail de po4a
Commencer un nouveau projet de traduction
Mettre Ă jour les traductions et les documents
Utiliser les addendas pour ajouter du texte supplémentaire aux traductions
Comment ça marche ?
TransTractors et lâarchitecture du projet
Analyseurs spécifiques aux formats
Objets Po
Contribuer Ă po4a
Projets open-source utilisant po4a
FAQ
Comment prononcer po4a ?
Pourquoi les scripts individuels sont-ils obsolÚtes�
Quâen est-il des autres outils de traduction de documentation utilisantgettext ?
RĂSUMĂ des avantages de lâapproche basĂ©e sur gettext
VOIR AUSSI
AUTEURS
TRADUCTION
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 utilisantgettext ?
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)