NAME¶
Locale::Po4a::Sgml - konvertiert SGML-Dokumente von/in PO-Dateien
BESCHREIBUNG¶
Das Projektziel von Po4a (PO für alles) ist es, die Übersetzung (und
interessanter, die Wartung der Übersetzung) zu vereinfachen, indem die
Gettext-Werkzeuge auch für Gebiete verwendet werden, wo diese nicht
erwartet werden, wie Dokumentation.
Locale::Po4a::Sgml ist ein Modul, um bei der Übersetzung von Dokumentation
im SGML-Format in andere [natürliche] Sprachen zu helfen.
Dieses Module verwendet
nsgmls, um SGML-Dateien auszuwerten. Stellen Sie
daher sicher, dass es installiert ist. Stellen Sie auch sicher, dass die DTD-
der SGML-Dateien im System installiert sind.
VON DIESEM MODUL AKZEPTIERTE OPTIONEN¶
- debug
- Durch Leerzeichen getrennte Liste von
Schlüsselwörtern, die angeben, welchen Teil Sie auf Fehler
prüfen wollen. Mögliche Werte sind: tag, generic, entities und
refs.
- verbose
- mehr Informationen darüber ausgeben, was vorgeht
- translate
- durch Leerzeichen getrennte Liste von zusätzlichen
Markierungen (»Tags«) (neben denen von der DTD vorgegebenen),
deren Inhalt eine zusätzliche »msgid« ergeben soll
- section
- durch Leerzeichen getrennte Liste von zusätzlichen
Markierungen (»Tags«) (neben denen von der DTD vorgegebenen),
die andere Markierungen enthalten, wobei einige in die Kategorie
translate fallen
- indent
- durch Leerzeichen getrennte Liste von Markierungen
(»Tags«), die die Einzugsstufe erhöhen
- verbatim
- Das Layout innerhalb dieser Markierungen (»Tags«)
sollte nicht geändert werden. Der Absatz erfährt keinen
Zeilenumbruch und keine zusätzliche Einrückung und keine
zusätzliche Zeilen werden für kosmetische Zwecke
eingefügt.
- empty
- Markierungen (»Tags«), die nicht geschlossen
werden müssen
- ignore
- Markierungen (»Tags«), die von Po4a ignoriert und
als reine Zeichendaten betrachtet werden. Das bedeutet, dass sie Teil
einer Msgid sein können. Beispielsweise ist <b> ein guter
Kandidat für diese Kategorie, da das Hinzufügen in den Abschnitt
»translate« Msgids erzeugen würde, die keine kompletten
Sätze sind, was nicht gut wäre.
- attributes
- Eine durch Leerzeichen getrennte Liste von Attributen, die
nicht übersetzt werden müssen. Sie können die Attribute mit
ihrem Namen (beispielsweise »lang«) angeben, aber Sie
können ihnen auch eine Markierungs- (»Tag«-)Hierarchie
voranstellen, um anzugeben, dass dieses Attribut nur übersetzt wird,
wenn es Teil der angegebenen Markierung ist. Beispielsweise spezifiziert
<bbb><aaa>lang, dass das Attribut »lang« nur
übersetzt werden soll, wenn es Teil der Markierung <aaa>, die
wiederum Teil der Markierung <bbb> ist. Die Namen der Markierungen
sind eigentlich reguläre Ausdrücke, daher können Sie auch
Formulierungen wie <aaa|bbbb>lang wählen, um das Attribut
»lang« nur zu übersetzen, wenn es sich in der Markierung
<aaa> oder <bbb> befindet.
- qualify
- Eine durch Leerzeichen getrennte Liste von Attributen,
für die die Übersetzung über den Attributnamen qualifiziert
werden muss. Beachten Sie, dass diese Einstellung das angegebene Attribut
auch automatisch zu der Liste »attributes« hinzufügt.
- force
- fortfahren, selbst falls die DTD unbekannt ist oder falls
Nsgmls Fehler in der Eingabedatei findet
- include-all
- Standardmäßig werden Msgids, die nur eine
Entität enthalten (wie »&version;«) für
angenehmeres Übersetzen übersprungen. Durch Aktivierung dieser
Option wird diese Optimierung vermieden. Dies könnte nützlich
sein, falls das Dokumente Konstrukte wie
»<title>Á</title>« enthält, selbst
wenn ich daran zweifle, dass das jemals passieren wird …
- ignore-inclusion
- Durch Leerzeichen getrennte Liste, die nicht eingefügt
wird. Benutzen Sie diese Option mit Vorsicht: Sie könnte nsgmls
(intern benutzt) veranlassen, Markierungen hinzuzufügen und das
Ausgabedokument ungültig zu berechnen.
STATUS DIESES MODULS¶
Das Ergebnis ist perfekt, d.h. die erstellten Dokumente sind identisch. Aber es
gibt noch ein paar Probleme:
- •
- Die Fehlerausgabe von Nsgmls wird nach /dev/null
umgeleitet. Dies ist eindeutig schlecht. Ich weiß nicht, wie ich das
vermeiden kann.
Das Problem liegt darin, dass ich die bedingte Einbindung (d.h. das Zeug
"<! [ %foo [" und "]]>") vor Nsgmls
»schützen« muss. Andernfalls futtert Nsgmls das auf und ich
weiß nicht, wie ich das im letztendlichen Dokument wieder herstellen
kann. Um das zu vermeiden, schreibe ich sie in "{PO4A-beg-foo}"
und "{PO4A-end}" um.
Das Problem dabei ist, dass "{PO4A-end}" und so etwas im Dokument
gültig sind (nicht in einer <p>-Markierung oder so).
Alles funktioniert auf diese Weise, wenn Nsgmls Ausgabe entsprechend
umgeleitet wird, aber es verhindert auch die Erkennung von fehlerhafter
Formatierung im Dokument.
- •
- Es funktioniert nur mit der DebianDoc- und DocBook-DTD.
Hinzunahme der Unterstützung für eine neue DTD sollte sehr
leicht sein. Der Mechanismus ist für alle DTD identisch, Sie
müssen nur eine Liste der existierenden Markierungen und einige ihrer
Charakteristika angeben.
Ich stimme zu, dass dies weitere Dokumentation benötigt, aber es wird
immer noch als Beta betrachtet und ich hasse es, Zeug zu dokumentieren,
dass sich noch ändern kann oder wird.
- •
- Warnung: Die Unterstützung für DTDs ist noch
recht experimentell. Ich habe kein Referenzhandbuch gelesen, um die
Definition jeder Markierung herauszufinden. Ich habe die
Makierungsdefinitionen zum Modul hinzugefügt, bis es für einige
Dokumente funktionierte, die ich im Netz fand. Falls Ihr Dokument mehr
Markierungen verwendet als meins, wird es nicht funktionieren. Aber wie
oben geschrieben, sollte das leicht zu beheben sein.
Ich habe DocBook nur mit der SAG (System Administrator Guide) getestet,
allerdings ist dieses Dokument sehr groß und sollte den Großteil
der DocBook-Spezialitäten verwenden.
Für DebianDoc habe ich einige der Handbücher vom DDP getestet,
aber noch nicht alle.
- •
- Im Falle von Dateieinbindungen werden
Zeichenkettenreferenzen von Meldungen in PO-Dateien (d.h. Zeilen der Art
"#: en/titletoc.sgml:9460") falsch sein.
Dies rührt daher, dass die Datei vorbearbeitet wird, um die bedingten
Einbindungen (d.h. das "<! [ %foo [" und "]]>"
Zeug) und einige Entitäten (wie &version) vor Nsgmls zu
schützen, da ich sie unverändert im automatisch erstellten
Dokument bekommen möchte. Daher wird eine temporäre Kopie der
Eingabedatei angelegt und alle Änderungen werden daran vorgenommen,
bevor sie an Nsgmls zur Auswertung übergeben wird.
Damit dies funktioniert, werden die Entitäten, die eine Dateieinbindung
durch den Inhalt der angegebenen Datei erbitten, ersetzt (so dass auch
geschützt werden kann, was in einer Unterdatei ist). Allerdings
erfolgt derzeit anschließend nichts, um die Referenzen zu
schützen (d.h. Dateiname und Zeilennummer). Mir ist nicht klar, was
hier das beste Vorgehen ist.
AUTOREN¶
Dieses Modul ist eine angepasste Version von Sgmlspl (SGML postprocessor for the
SGMLS and NSGMLS parsers), für den galt:
Copyright (c) 1995 David Megginson <dmeggins@aix1.uottawa.ca>
Die Anpassung für Po4a wurde erledigt durch:
Denis Barbier <barbier@linuxfr.org>
Martin Quinson (mquinson#debian.org)
URHEBERRECHT UND LIZENZ¶
Copyright (c) 1995 David Megginson <dmeggins@aix1.uottawa.ca>
Copyright 2002, 2003, 2004, 2005 SPI, inc.
Dieses Programm ist freie Software; Sie können es unter den Bedingungen der
GPL (siehe die Datei COPYING) vertreiben und/oder verändern.