Locale::Po4a::Sgml - Convertir des documents SGML 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::Sgml est un module qui permet d’aider la traduction de
documentations au format SGML vers d’autres langues.
Ce module utilise
onsgmls(1) pour analyser les fichiers SGML. Assurez
vous qu’il est bien installé et que la DTD des fichiers SGML est
bien installée sur le système.
- debug
- Liste de mots clefs séparés par des espaces
et indiquant quelles parties vous voulez déboguer. Les valeurs
possibles sont : tag, generic, entities et refs.
- verbose
- Donne plus d’informations sur ce qu’il se
passe.
- translate
- Liste de balises supplémentaires (en plus de celles
fournies par la DTD) séparées par des espaces dont le
contenu doit former des msgid additionnels.
- section
- Liste de balises supplémentaires (en plus de celles
fournies par la DTD) pouvant contenir d’autres balises, qui peuvent
être à traduire (catégorie translate).
- indent
- Liste de balises, séparées par des espaces,
qui augmentent le niveau d’indentation.
- verbatim
- Le formatage du texte contenu dans ces balises ne doit pas
être modifié. Aucun retour à la ligne n’est
ajouté dans les paragraphes et aucune espace pour
l’indentation ou nouvelle ligne n’est ajoutée pour
des raisons cosmétiques.
- empty
- Balises n’ayant pas besoin d’être
fermées.
- ignore
- Les balises ignorées et considérées
comme étant du texte brut par po4a. C’est-à-dire
qu’elles peuvent faire partie d’un msgid. Par exemple,
<b> est un bon candidat pour cette catégorie puisqu’en
les mettant dans la catégorie translate (à traduire), cela
aurait eu pour conséquence que des msgid n’auraient pas
été des phrases complètes, ce qui n’est pas
bien.
- attributes
- Une liste d’attributs de balises
(séparés par des espaces) que vous voulez traduire. Vous
pouvez spécifier les attributs par leur nom (par exemple,
« lang »), mais vous pouvez aussi les faire
précéder d’une hiérarchie de balises pour
indiquer que cet attribut ne sera traduit que quand il sera placé
à l’intérieur d’une balise. Par
exemple : <bbb><aaa>lang indique que l’attribut
lang ne sera traduit que s’il se trouve dans une balise
<aaa>, se trouvant elle-même dans une balise <bbb>. Le
nom des balises est en fait une expression rationnelle, ce qui vous permet
de spécifier <aaa|bbbb>lang si vous ne voulez traduire que
les attributs lang qui se trouvent dans une balise <aaa> ou
<bbb>.
- qualify
- Une liste d’attributs séparés par des
espaces pour lesquels la traduction doit être qualifiée par
le nom d’attribut. Notez que cette option ajoute aussi
automatiquement l’attribut donné à la liste
d’attributs.
- force
- Continue même si la DTD est inconnue ou si onsgmls
trouve des erreurs dans le document d’entrée.
- include-all
- Par défaut, les msgid qui ne contiennent
qu’une entité (comme « &version; ») sont
sautés pour le confort du traducteur. Activer cette option
arrête cette optimisation. Ceci peut être utile si le
document contient une construction telle que
« <titleÁ</title> »,>
même si je doute que ça puisse arriver...
- ignore-inclusion
- Liste d’entités, séparées par
des espaces, qui ne seront pas insérées. Utilisez cette
option avec précaution : elle peut forcer onsgmls (qui est
utilisé en interne) à ajouter des tags et rendre le document
généré non valable.
Le résultat est parfait. C’est-à-dire que les documents
générés sont rigoureusement identiques. Mais il y a
encore quelques problèmes :
- •
- Les messages d’erreur de onsgmls sont
redirigés vers /dev/null par défaut, ce qui n’est pas
bien, mais je ne sais pas comment éviter cela.
Le problème est que j’ai à
« protéger » les inclusions
conditionnées (c’est à dire
« "<!" [ %truc [ »
et « "]]>" machin ») de onsgmls.
Sinon, onsgmls les élimine, et je ne sais pas les rétablir
dans le document final. Pour empêcher cela, je les récris
dans "{PO4A-beg-truc}" et "{PO4A-end}".
Le problème avec cela est que les "{PO4A-end}" et autres
sont non valables dans le document (sauf dans une balise <p> ou
autre).
Si vous souhaitez afficher la sortie d’onsgmls, il suffit
d’ajouter ce qui suit à votre ligne de commande (ou à
la ligne de configuration po4a) :
-o debug=onsgmls
- •
- Cela ne marche qu’avec les DTD DebianDoc et DocBook.
L’ajout de prise en charge d’une nouvelle DTD doit
être très facile. Le mécanisme est le même
pour chaque DTD, vous n’avez qu’à donner la liste des
balises existantes et certaines de leurs caractéristiques.
Je comprend que cela nécessiterait plus de documentation, mais
c’est toujours considéré comme à
l’état bêta, et je déteste documenter ce qui
risque de/va changer.
- •
- Attention, la prise en charge des DTD est plutôt
expérimentale. Je n’ai lu aucun manuel de
référence pour trouver la définition de toutes ces
balises. J’ai ajouté des définitions de balises au
module jusqu’à ce que ça marche pour certains
documents trouvés sur Internet. Si votre document utilise plus de
balises que les miens, ça ne marchera pas. Mais, comme je
l’ai dit plus haut, corriger cela doit être assez facile.
J’ai testé le format DocBook avec le SAG (System Administrator
Guide -- Guide de l’Administrateur Système) uniquement, mais
comme ce document est assez important, il doit utiliser la plupart des
spécificités de DocBook.
Pour le format DebianDoc, je l’ai testé avec certains manuels
du DDP, mais pas encore avec tous.
- •
- En cas d’inclusion d’un fichier, les
références des messages du PO (c.-à-d., les lignes de
la forme "#: en/titletoc.sgml:9460") seront erronées.
Cela est dû au fait que j’applique un prétraitement au
fichier pour protéger les inclusions conditionnelles (utilisant
« "<!" [ %truc [ »
et « "]]>" machin ») et quelques
entités (comme &version;) de onsgmls parce que je les veux
telles quelles dans le document généré. Pour cela, je
fais une copie temporaire du fichier d’entrée et effectue
toutes les modifications que je veux lui appliquer avant de le passer
à onsgmls pour son analyse.
Pour que ça fonctionne, je remplace les entités demandant
l’inclusion d’un fichier par le contenu du fichier
donné (comme cela je peux également protéger ce qui
doit être dans le sous-fichier). Mais rien n’est fait
à présent pour corriger les références
(c.-à-d. les noms des fichiers et les numéros de ligne) par
la suite. Je ne sais pas ce qui est préférable.
Ce module est une adaptation de sgmlspl (postprocesseur SGML pour
l’analyseur ONSGMLS), qui était :
Copyright © 1995 David Megginson <[email protected]>
L’adaptation de po4a a été faite par :
Denis Barbier <[email protected]>
Martin Quinson (mquinson#debian.org)
Martin Quinson (mquinson#debian.org)
Copyright © 1995 David Megginson <[email protected]>
Copyright © 2002, 2003, 2004, 2005 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).