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 catégories de messages de débogage
supplémentaire devraient être affichées. Les valeurs
possibles sont "entities",
"generic",
"onsgml",
"refs" et
"tag".
- 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, c’est-à-dire pour être
traduites.
- 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. Ceci va impacter l’indentation du
document résultant.
- 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 de créer des msgid avec
seulement son contenu (en général, pas 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|bbb>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, c’est à dire le texte extrait pour la
traduction qui inclura aussi bien le nom de l’attribut et sa
valeur. Par exemple, dans le cas d’une balise comme
"<aaa lang_en="foo">",
la chaine affichée pour la traduction sera
"lang_en="foo"". Notez que
ceci ajoute également 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 des équipes de traduction. Activer
cette option arrête cette optimisation. Ceci peut être utile
si le document contient une construction telle que
"<title>Á</title>",
même s’il est peu probable que cela arrive...
- 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.
ÉTAT DE CE MODULE
Le résultat est parfait. C’est-à-dire que les
documents générés sont rigoureusement identiques aux
originaux. Mais il reste 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 <dmeggins@aix1.uottawa.ca>
L’adaptation de po4a a été faite par :
Denis Barbier <barbier@linuxfr.org>
Martin Quinson (mquinson#debian.org)
Martin Quinson (mquinson#debian.org)
Copyright © 1995 David Megginson <dmeggins@aix1.uottawa.ca>
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 v2.0 ou suivante (voir le
fichier COPYING).