DOKK / manpages / debian 12 / po4a / Locale::Po4a::Sgml.3pm.de
Locale::Po4a::Sgml(3pm) Po4a-Werkzeuge Locale::Po4a::Sgml(3pm)

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.

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.
mehr Informationen darüber ausgeben, was vorgeht
durch Leerzeichen getrennte Liste von zusätzlichen Markierungen (»Tags«) (neben denen von der DTD vorgegebenen), deren Inhalt eine zusätzliche »msgid« ergeben soll
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
durch Leerzeichen getrennte Liste von Markierungen (»Tags«), die die Einzugsstufe erhöhen
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.
Markierungen (»Tags«), die nicht geschlossen werden müssen
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.
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.
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.
fortfahren, selbst falls die DTD unbekannt ist oder falls Onsgmls Fehler in der Eingabedatei findet
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>&Aacute;</title>« enthält, selbst wenn ich daran zweifle, dass das jemals passieren wird …
Durch Leerzeichen getrennte Liste, die nicht eingefügt wird. Benutzen Sie diese Option mit Vorsicht: Sie könnte Onsgmls (intern benutzt) veranlassen, Markierungen hinzuzufügen und das Ausgabedokument ungültig zu berechnen.

Das Ergebnis ist perfekt, d.h. die erstellten Dokumente sind identisch. Aber es gibt noch ein paar Probleme:

  • Die Fehlerausgabe von Onsgmls 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 »schützen« muss. Andernfalls futtert Onsgmls 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-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 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 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 (siehe die Datei COPYING) vertreiben und/oder verändern.

2023-01-03 Po4a-Werkzeuge