Locale::Po4a::Man(3pm) | Outils po4a | Locale::Po4a::Man(3pm) |
Locale::Po4a::Man - Convertir des pages de manuel depuis ou vers des fichiers PO
L’objectif du projet po4a [PO for anything — PO pour tout] est de simplifier la traduction (et de façon plus intéressante, la maintenance des traductions) en utilisant les outils gettext dans des domaines pour lesquels ils n’étaient pas destinés, comme la documentation.
Locale::Po4a::Man est un module qui permet d’aider la traduction de documentations écrites au format nroff (utilisé pour les pages de manuel) vers d’autres langues.
Ce module essaie autant que possible de faciliter le travail des traducteurs. Dans ce but, il ne présente pas le texte tel qu’il se trouve dans la page de manuel, mais cache les parties au format nroff les plus brutes, de façon à ce que les traducteurs ne puissent pas y mettre la pagaille.
Les paragraphes non indentés sont automatiquement remis en forme pour les traducteurs. Ceci peut générer de légères différences dans le document généré parce que les règles de remise en forme utilisées par groff ne sont pas des plus claires. Par exemple, deux espaces après une parenthèse peuvent être conservés.
De toute façon, la seule différence concernera l’emplacement d’espaces additionnelles dans des paragraphes remis en forme, et je pense que ça vaut le coût.
La première modification concerne les demandes de changement de police. Dans nroff, il y a plusieurs façons d’indiquer qu’un mot doit être affiché avec une police plus petite, en gras ou en italique. Dans le texte à traduire, il n’y a qu’une façon, empruntée au format POD (Perl Online Documentation) :
Remarque : La police CW n’est pas disponible pour tous les formats de sortie de groff. Il n’est pas recommandé de l’utiliser, mais elle est fournie pour vous rendre service.
Po4a modifie automatiquement certains caractères afin de faciliter la traduction ou la revue de la traduction. Voici la liste de ces modifications :
Les traducteurs peuvent forcer l’utilisation d’un trait d’union en utilisant le caractère roff « \[hy] » dans leurs traductions.
Pour éviter ces modifications, les traducteurs peuvent insérer une espace roff de taille nulle (c’est-à-dire en utilisant respectivement `\&` ou '\&').
Puisque ces caractères sont utilisés pour délimiter les changements de police, vous ne pouvez pas les utiliser tels quels. Utilisez E<lt> et E<gt> à la place (comme pour le format POD, encore une fois).
Voici les options particulières à ce module :
Elle permet de sélectionner une gestion du format mdoc plus stricte, en demandant à po4a de ne pas traduire la section « NAME ». En effet, les pages mdoc dont la section « NAME » est traduite n’auront ni en-tête ni pied de page.
D’après la page de manuel groff_mdoc, les sections NAME, SYNOPSIS et DESCRIPTION sont obligatoires. Aucun symptôme n’est connu pour les sections SYNOPSIS ou DESCRIPTION traduites, mais vous pouvez les indiquer de cette façon : -o mdoc=NAME,SYNOPSIS,DESCRIPTION
Ce problème avec les pages mdoc peut aussi être
résolu avec un addendum du même type que le
suivant :
PO4A-HEADER:mode=before;position=^.Dd
.TH DOCUMENT_TITLE 1 "Month day, year" OS "Section
Name"
Les options suivantes permettent de spécifier le comportement d’une nouvelle macro (définie par une requête .de), ou d’une macro non supportée par po4a. Elles prennent en paramètre une liste de macros séparées par des virgules. Par exemple :
-o noarg=FO,OB,AR -o translate_joined=BA,ZQ,UX
Note : si une macro n’est pas supportée par po4a, et si vous considérez qu’il s’agit d’une macro roff standard, vous devriez la soumettre à l’équipe de développement de po4a.
Note : aucun test n’est effectué pour s’assurer que la commande fin correspond à sa commande début. Toute commande de fin finit le mode d’absence de mise en forme. Si vous avez une macro début (respectivement fin), vous pouvez spécifier une fin existante (comme fi), ou un début existant (comme nf) en contrepartie. Ces macros (et leurs paramètres) ne seront pas traduites.
Ce module est encore très limité, et le sera probablement toujours, parce qu’il n’est pas un véritable interpréteur nroff. Il devrait être possible de faire un vrai interpréteur nroff, qui permettrait aux auteurs d’utiliser toutes les macros existantes ou même d’en définir de nouvelle dans leurs pages, mais nous n’en avons pas envie. Ce serait trop difficile, et nous ne pensons pas que cela soit nécessaire. Nous pensons que si les auteurs de pages de manuel veulent voir leurs travaux traduits, ils doivent s’adapter pour faciliter le travail des traducteurs.
Il y a donc des limitations connues de l’analyseur de pages de manuel implémenté dans po4a, que nous ne sommes pas prêts à corriger, et qui resteront des difficultés qu’il vous faudra éviter si vous voulez que des traducteurs s’occupent de votre documentation.
nroff est un langage de programmation complet, avec des définitions de macros, des opérations conditionnées, etc. Comme cet analyseur n’est pas un analyseur complet pour nroff, il ne pourra pas gérer les pages utilisant ces possibilités (il y en a environ 200 sur ma machine).
Il y a encore quelques macros qui ne sont pas supportées par po4a::man. La raison à cela est que nous n’arrivons pas à trouver leur documentation. Voici la liste des macros non supportées mais tout de même utilisées sur ma machine. Notez que cette liste n’est pas exhaustive puisque le programme échoue lorsque la première macro non supportée est rencontrée. Si vous trouvez des informations à propos de ces macros, nous ajouterons leur support avec plaisir. Ces macros rendent environ 250 pages non utilisables avec po4a::man.
.. ." .AT .b .bank .BE ..br .Bu .BUGS .BY .ce .dbmmanage .do .En .EP .EX .Fi .hw .i .Id .l .LO .mf .N .na .NF .nh .nl .Nm .ns .NXR .OPTIONS .PB .pp .PR .PRE .PU .REq .RH .rn .S< .sh .SI .splitfont .Sx .T .TF .The .TT .UC .ul .Vb .zZ
Parfois, un auteur sait que certaines parties ne peuvent pas être traduite, et ne doivent pas être extraites par po4a. Par exemple, une option peut recevoir un paramètre other, qui ne doit pas être traduit et other est également le dernier élément d’une liste. Dans le premier cas, other ne doit pas être traduit et dans le second, il doit être traduit.
Dans ce cas, l’auteur peut éviter l’extraction de certaines chaînes par po4a en utilisant une construction groff particulière :
.if !'po4a'hide' .B other
(nécessite l’option -o groff_code=verbatim)
on peut aussi définir une nouvelle macro pour automatiser
ceci :
.de IR_untranslated
. IR \\$@
..
.IR_untranslated \-q ", " \-\-quiet
(nécessitera les options -o groff_code=verbatim et -o untranslated=IR_untranslated ; avec cette construction, la condition .if !'po4a'hide' n’est pas strictement nécessaire puisque po4a n’analysera pas le contenu de la définition de la macro)
ou en utilisant un alias :
.als IR_untranslated IR
.IR_untranslated \-q ", " \-\-quiet
Cela nécessitera l’option -o untranslated=als,IR_untranslated.
Pour résumer cette section, faites simple et n’essayez pas d’être trop astucieux lors de l’écriture de vos pages de manuel. Beaucoup de choses sont possibles en nroff et ne sont pas supportées par cet analyseur. Par exemple, n’essayez pas de jouer avec des \c pour interrompre le traitement du texte (c’est le cas de 40 pages sur ma machine). Aussi, assurez-vous de spécifier les paramètres des macros sur la même ligne que la macro. Même si c’est valable en nroff, cela compliquerait trop l’analyseur pour être géré.
Bien sûr, une autre possibilité est d’utiliser un autre format, plus pratique pour les traducteurs (comme POD en utilisant po4a::pod ou un format de la famille XML comme le SGML), mais grâce à po4a::man, ce n’est plus nécessaire. Cela étant dit, si la documentation provient d’une source au format POD ou XML, il serait préférable de traduire le format source et non pas celui généré. Dans la plupart des cas, po4a::man détectera les pages de manuel générées et affichera un avertissement. Il refusera même de traiter les pages générées depuis un format POD, parce que ces pages sont parfaitement traitées par po4a::pod et parce que leur contrepartie nroff définit beaucoup de nouvelles macros pour lesquelles je ne veux pas écrire de support. Sur ma machine, 1432 des 4323 pages sont générées depuis le format POD et seront ignorées par po4a::man.
Dans la plupart des cas, po4a::man détectera le problème et refusera de traiter la page, en affichant un message d’avertissement. Dans quelques rares cas, le programme se terminera sans avertissement, mais la sortie sera erronée. Ces cas sont des « bogues » ;) Si vous rencontrez un de ces cas, assurez-vous de le signaler, avec un correctif si possible…
Ce module peut être utilisé avec presque toutes les pages de manuel existantes.
Des tests sont régulièrement effectués sur une machine Linux :
Locale::Po4a::Pod(3pm), Locale::Po4a::TransTractor(3pm), po4a(7)
Denis Barbier <barbier@linuxfr.org> Nicolas François <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
Martin Quinson (mquinson#debian.org)
Copyright © 2002-2008 SPI, Inc.
Ce programme est un logiciel libre ; vous pouvez le copier et / ou le modifier sous les termes de la GPL (voir le fichier COPYING).
2018-12-09 | Outils po4a |