Locale::Po4a::Sgml - konvertiert SGML-Dokumente von/in
PO-Dateien
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 onsgmls(1), 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.
- debug
- Durch Leerzeichen getrennte Liste von Schlüsselwörtern, die
angeben, welche Kategorie von zusätzlichen Fehlersuchmeldungen
angezeigt werden soll. Möglich Werte sind:
"entities",
"generic",
"onsgml",
"refs" und
"tag".
- 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, d.h.
die übersetzt werden sollten.
- 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. Dies wird die Einrückung des
Ergebnisdokuments betreffen.
- 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 nur mit ihrem Inhalt erzeugen würde (der
normalerweise kein ganzer Satz ist), 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>" ist, 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|bbb>lang" wählen, um
das Attribut "lang" nur zu
übersetzen, wenn es sich in der Markierung
"<aaa>" oder a
"<bbb>"befindet.
- qualify
- Eine durch Leerzeichen getrennte Liste von Attributen, für die die
Übersetzung über den Attributnamen qualifiziert werden muss,
d.h. der für die Übersetzung herausgelöste Text wird
sowohl die Attributnamen als auch seine Werte enthalten. Für eine
Markierung wie "<aaa
lang_en="foo">" wird Übersetzern
beispielsweise die Zeichenkette
"lang_en="foo"" angeboten.
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
onsgmls(1) 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
onsgmls(1) (intern benutzt) veranlassen, Markierungen
hinzuzufügen und das Ausgabedokument ungültig zu
berechnen.
Das Ergebnis ist perfekt, d.h. die erstellten Dokumente sind
identisch mit den ursprünglichen. Aber es gibt noch ein paar
Probleme:
- Die Fehlerausgabe von onsgmls(1) wird standardmäßig
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 onsgmls(1)
»schützen« muss. Andernfalls futtert
onsgmls(1) 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
ungültig sind (nicht in einer <p>-Markierung oder so).
Falls Sie die onsgmls(1)-Ausgabe sehen wollen,
fügen Sie einfach Folgendes zu Ihrer Befehlszeile (oder der
Po4a-Konfigurationszeile) hinzu:
-o debug=onsgmls
- 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 onsgmls(1)
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
onsgmls(1) 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.
Dieses Modul ist eine angepasste Version von Sgmlspl (SGML
postprocessor for the ONSGMLS parsers), für den galt:
Copyright © 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)
Copyright © 1995 David Megginson <dmeggins@aix1.uottawa.ca>.
Copyright © 2002-2005 SPI, Inc.
Dieses Programm ist freie Software; Sie können es unter den
Bedingungen der GPL v2.0 oder neuer (siehe die Datei COPYING) vertreiben
und/oder verändern.