PO4A(1p) | Po4a-Werkzeuge | PO4A(1p) |
po4a - PO-Dateien und übersetzte Dokumente auf einen Rutsch aktualisieren
po4a [Optionen] Konfig_Datei
Po4a (PO für alles) erleichtert die Pflege von Dokumentationsübersetzungen mittels der klassischen Gettext-Werkzeuge. Die Hauptfunktionalität von Po4a besteht darin, dass sie die Übersetzung des Dokumenteninhaltes von der Dokumentenstruktur entkoppelt. Bitte schauen Sie in die Seite po4a(7) für eine schonende Einführung in dieses Projekt.
Wenn Sie das Programm po4a erstmalig mit nur einer Konfigurationsdatei und den zu übersetzenden Dokumenten (genannt Master-Dokumenten) ausführen, wird ein POT-Datei (auch Übersetzungsvorlage genannt) erstellt, die alle übersetzbaren Zeichenketten in dem Dokument in einem Format, das die Arbeit der Übersetzer erleichtert, erstellt.
Diese POT-Dateien können dann entweder mit einem dedizierten Editor wie dem GNOME-Übersetzungs-Editor, KDEs Lokalize oder poedit übersetzt werden oder sie können in eine Online-Lokalisierungsplattform wie weblate oder pootle integriert werden. Das Ergebnis der Übersetzung ist eine Reihe von PO-Dateien, eine pro Sprache.
Wenn Sie das Programm po4a sowohl mit dem Master-Dokument als auch den PO-Dateien ausführen, werden die übersetzten Dokumente erstellt, indem der Inhalt der Übersetzung (wie er sich in den PO-Dateien befindet) in die Struktur des ursprünglichen Master-Dokumentes eingespeist wird.
Falls sich das Master-Dokument zwischenzeitlich geändert hat, wird Po4a die PO- und POT-Dateien entsprechend aktualisieren, so dass die Übersetzer leicht die Änderungen erkennen und ihre Arbeit aktualisieren können. Abhängig von Ihren Einstellungen wird Po4a die teilweise übersetzten Dokumente verwerfen oder Dokumente erzeugen, die Englisch (für die neuen oder veränderten Absätze) und die Zielsprache (für die Absätze, für die Übersetzungen bereits in der PO-Datei waren) mischt.
Standardmäßig werden die übersetzten Dokumente erstellt, wenn mindestens 80% ihres Inhaltes übersetzt ist (siehe die nachfolgende Option --keep). Verwerfen von Übersetzungen, sobald sie nicht mehr zu 100% erfüllt sind, kann für die Übersetzer entmutigend sein, während die Erstellung von »Übersetzungen«, die zu unvollständig sind, bei Endbenutzer zu Verdruß führen kann.
Masterdokumente ---+---->-------->------>------>----+ (Dokumentenerstellung) | | V (Po4a-Ausführung) >-----+--> Übersetzungen | | | bestehende PO-Dateien ->---> aktualisierte PO-Dateien >-+ | ^ | | | V | +----------<----------<---------+ ^ (manueller Übersetzungsprozess) | | Addendum -->--------------------------------------------+
Die Master-Dokumente werden von den Dokumentenautoren geschrieben. Alle Änderungen werden durch Po4a automatisch in den PO-Dateien wiedergegeben, die dann durch die Übersetzer aktualisiert werden. Alle Änderungen an den PO-Dateien (entwender manuell oder durch Po4a) werden in den übersetzten Dokumenten wiedergespiegelt. Sie können dieses Verhalten mittels der Skripte po4a-updatepo(1) und po4a-translate(1) in Make-Steuerdateien nachahmen, aber dies wird schnell nervend und wiederholend (siehe po4a(7)). Wir legen Ihnen die Verwendung des Programms po4a zum Einsatz in Ihrem Bauprogramm ans Herz.
Das Standardverhalten (wenn --force nicht angegeben ist) ist wie folgt:
Eine Übersetzung wird auch nur neu erstellt, falls das Master-Dokument, die PO-Datei, einer ihrer Addenda oder die Konfigurationsdatei neuer ist. Um zu vermeiden, dass die Erstellung von Übersetzungen, die die Schwellwertbarriere nicht erreichen, versucht wird (siehe --keep), kann eine Datei mit der Erweiterung .po4a-stamp erstellt werden (siehe --stamp).
Falls ein Master-Dokument Dateien einbindet, soillten Sie den Schalter --force verwenden, da der Änderungszeitpunkt dieser eingebundenen Dateien nicht mit betrachtet wird.
Die PO-Dateien werden basierend auf der POT-Datei mittels msgmerge -U neu erstellt.
Hinweis: Dies aktiviert nur die Erstellung der .po4a-stamp-Dateien. Die Stempeldateien werden immer benutzt, falls sie existieren, und sie werden mit --rm-translations oder wenn die Datei schließlich übersetzt ist entfernt.
WARNUNG: Dieser Schalter ändert das Verhalten von Po4a ziemlich drastisch: Ihre übersetzten Dateien werden überhaupt nicht aktualisiert, bis die Übersetzung verbessert wird. Verwenden Sie diesen Schalter nur, falls Sie die Auslieferung von veralteter Dokumentation gegenüber einer akuraten nicht übersetzten Dokumentation bevorzugen.
Falls sowohl ZIELVERZ als auch QUELLVERZ festgelegt sind, wird in den folgenden Verzeichnissen, in dieser Reihenfolge, nach Eingabedateien gesucht: ZIELVERZ, das aktuelle Verzeichnis und QUELLVERZ. Ausgabedateien werden in das ZIELVERZ, falls angegeben, oder in das aktuelle Verzeichnis geschrieben.
Aus kosmetischen Gründen hat die Gettext-Programmsammlung PO-Dateien in der 77.Spalte umgebrochen. Diese Option legt das Verhalten von Po4a fest. Falls auf einen numerischen Wert gesetzt, wird Po4a die PO-Datei nach dieser Spalte und nach Zeilenumbrüchen im Inhalt umbrechen. Falls auf newlines gesetzt, wird Po4a die msgid und msgstr nur nach Zeilenumbrüchen im Inhalt auftrennen. Falls auf no gesetzt, wird Po4a die PO-Datei überhaupt nicht umbrechen. Die Referenzkommentare werden durch die von Po4a intern verwandten Gettext-Werkzeuge immer umgebrochen.
Beachten Sie, dass diese Option keine Auswirkung darauf hat, wie msgid und msgstr umgebrochen werden, d.h. wie Zeilenumbrüche zu dem Inhalt dieser Zeilen hinzugefügt werden.
Hinweis: $lang wird zur aktuellen Sprache erweitert.
Po4a erwartet eine Konfigurationsdatei als Argument. Diese Datei muss die folgenden Elemente enthalten:
Alle Zeilen enthalten einen Befehl zwischen eckigen Klammern, gefolgt von seinen Parametern. Kommentare beginnen mit dem Zeichen »#« und gehen bis zum Zeilenende. Sie können das Zeilenende maskieren, um einen Kommentar über mehrere Zeilen auszubreiten.
In dieser Seite werden einige vollständige Beispiele vorgestellt, andere Beispiele können im Verzeichnis "t/cfg" der Quelldistribution gefunden werden.
Die einfachste Lösung ist die explizite Angabe der Pfade zu den POT- und PO-Dateien, wie folgt:
[po4a_paths] man/po/project.pot de:man/po/de.po fr:man/po/fr.po
Die speziellen Pfade zu der POT-Datei zuerst, und dann die Pfade zu den deutschen und französischen PO-Dateien.
Die gleiche Information kann wie folgt geschrieben werden, um das Risko von Kopier-/Einfügefehlern zu vermeiden:
[po4a_langs] fr de [po4a_paths] man/po/project.pot $lang:man/po/$lang.po
Die Komponente $lang wird automatisch mittels der bereitgestellten Sprachliste ausgegeben, wodurch das Risiko von Kopieren-/Einfüge-Fehlern reduziert wird, wenn eine neue Sprache hinzugefügt wird.
Die gleiche Information kann noch kompakter geschrieben werden, indem Sie nur die Pfade zu dem Verzeichnis angeben, das Ihr Übersetzungsprojekt enthält, wie folgt:
[po_directory] man/po/
Das bereitgestellte Verzeichnis muss eine Gruppe von PO-Dateien enthalten, jede mit Namen XX.po, wobei "XX" der ISO 631-Code der in dieser Datei verwandten Sprache ist. Das Verzeichnis muss auch eine einzelne POT-Datei enthalten, die die Endung ".pot" trägt. Beim ersten Lauf kann diese Datei leer sein, sie muss aber existieren (Po4a kann den Namen, der vor der Erweiterung zu verwenden ist, nicht erraten).
Beachten Sie, dass Sie nur einen aus "po_directory" und "po4a_paths" auswählen dürfen. Ersterer ("po_directory") ist kompakter, reduziert das Risiko von Kopieren-/Einfügenfehlern weiter, erzwingt aber die Verwendung von einer erwarteten Projektstruktur und Dateinamen. Die zweite Möglichkeit ("po4a_paths") ist expliziter, wahrscheinlich lesbarer und wird empfohlen, wenn Sie Ihr erstes Projekt mit Po4a einrichten.
Zentralisierte oder getrennte PO-Dateien?
Standardmäßig erstellt Po4a eine einzelne PO-Datei pro Zielsprache, die den gesamten Inhalt Ihres Übersetzungsprojektes enthält. Mit dem Wachstum Ihres Projektes könnte die Größe der Dateien problematisch werden. Bei der Verwendung von Weblate ist es möglich, für jedes Übersetzungssegment (d.h., msgid) Prioritäten festzulegen, so dass wichtige zuerst übersetzt werden. Einige Übersetzungsteams bevorzugen es aber weiterhin, den Inhalt in mehrere Teile zu trennen.
Um eine PO-Datei pro Master-Datei zu erhalten, müssen Sie einfach die Zeichenkette $master im Namen Ihrer PO-Dateien auf der "[po4a_paths]"-Zeile wie folgt verwenden:
[po4a_paths] dok/$master/$master.pot $lang:dok/$master/$lang.po
Falls es Namenskonflikte gibt, da mehrere Dateien den gleichen Dateinamen haben, kann der Name der Masterdatei über das Hinzufügen der Option "master:file="Name festgelegt werden:
[po4a_langs] de fr ja [po4a_paths] l10n/po/$master.pot $lang:l10n/po/$master.$lang.po [type: xml] foo/gui.xml $lang:foo/gui.$lang.xml master:file=foo-gui [type: xml] bar/gui.xml $lang:bar/gui.$lang.xml master:file=bar-gui
Im getrennten Modus baut po4a während der PO-Aktualisierung ein temporäres Kompendium auf, um die Übersetzungen zwischen allen PO-Dateien gemeinsam zu benutzen. Falls zwei PO-Dateien eine verschiedene Übersetzung der gleichen Zeichenkette haben, wird po4a diese Zeichenkette mit »fuzzy« markieren und beide Übersetzungen in alle PO-Dateien einstellen, die diese Zeichenkette enthalten. Wenn der Übersetzer die Zeichenkette bereinigt, dann wird die Übersetzung automatisch in jede PO-Datei übernommen.
Sie müssen auch die zu übersetzenden Dokumente aufführen. Für jede Master-Datei müssen Sie den zu verwendenden Format-Auswerter, den Ort der zu erstellenden Dokumente und optional weitere Konfiguration festlegen. Beispiel:
[type: sgml] dok/mein_zeug.sgml fr:dok/fr/mon_truc.sgml \ de:dok/de/mein_kram.sgml [type: man] script fr:dok/fr/script.1 de:dok/de/script.1 [type: docbook] dok/script.xml fr:dok/fr/script.xml \ de:dok/de/script.xml
Aber diese drei komplexen Zeilen sind wieder schwer zu lesen und zu verändern, z.B. wenn neue Sprachen hinzugefügt werden. Es ist viel einfacher, die Dinge neu mittels der Vorlage $lang wie folgt zu organisieren:
[type: sgml] dok/mein_zeug.sgml $lang:dok/$lang/mein_zeug.sgml [type: man] script.1 $lang:po/$lang/script.1 [type: docbook] dok/script.xml $lang:dok/$lang/script.xml
Es gibt zwei Arten von Optionen: Po4a-Optionen sind Vorgabewerte für die Po4a-Befehlszeilenoptionen, während Formatoptionen zur Änderung des Verhaltens der Formatauswertprogramme verwandt werden. Als Po4a-Option könnten Sie beispielsweise in Ihrer Konfigurationsdatei festlegen, dass der Vorgabewert für den Befehlszeilenparameter von --keep 50% statt 80% beträgt. Formatoptionen sind in ihren speziellen Handbuchseiten für jedes Auswertmodul dokumentiert, z.B. Locale::Po4a::Xml(3pm). Sie könnten beispielsweise nostrip an das XML-Auswertprogramm übergeben, um die Leerzeichen rund um herausgelöste Zeichenketten nicht zu entfernen.
Sie können diese Optionen für eine bestimmte Masterdatei oder sogar für eine bestimmte Übersetzung dieser Datei mittels "opt:" und "opt_XX:" für die Sprache "XX" übergeben. Im nachfolgenden Beispiel wird die Option nostrip für den XML-Auswerter (für alle Sprachen) übergeben, während der Schwellwert für die französische Übersetzung auf 0% reduziert wird (diese wird daher immer beibehalten).
[type:xml] toto.xml $lang:toto.$lang.xml opt:"-o nostrip" opt_fr:"--keep 0"
Auf jeden Fall müssen diese Konfigurationsteile sich am Ende der Zeile befinden. Die Erklärung der Dateien muss zuerst kommen, dann das Addendum, falls vorhanden, (siehe unten) und dann nur die Optionen. Die Gruppierung der Konfigurationsteile ist nicht sehr wichtig, da die Elemente intern als Zeichenketten aneinandergehängt werden. Die folgenden Beispiele sind alle äquivalent:
[type:xml] toto.xml $lang:toto.$lang.xml opt:"--keep 20" opt:"-o nostrip" opt_fr:"--keep 0" [type:xml] toto.xml $lang:toto.$lang.xml opt:"--keep 20 -o nostrip" opt_fr:"--keep 0" [type:xml] toto.xml $lang:toto.$lang.xml opt:--keep opt:20 opt:-o opt:nostrip opt_fr:--keep opt_fr:0
Beachten Sie, dass beim Bau von POT-Dateien die sprachspezifischen Optionen nicht verwandt werden. Es ist beispielsweise unmöglich, nostrip nur an das Auswertprogramm zu übergeben, wenn die französische Übersetzung gebaut wird, da die gleiche POT-Datei zur Aktualisierung aller Sprachen verwandt wird. Daher sind die einzigen sprachspezifischen Optionen diejenigen, die bei der Erstellung der Übersetzung verwandt werden können, wie die Option "--keep".
Konfigurationsaliase
Um die gleiche Option an mehrere Dateien zu übergeben, ist es am besten, wie folgt einen Typ-Alias zu definieren. Im nächsten Beispiel wird "--keep 0" an jede italienische Übersetzung mittels dieses Typs "test" übergeben, der eine Erweiterung des Typs "man" ist.
[po4a_alias:test] man opt_it:"--keep 0" [type: test] man/page.1 $lang:man/$lang/page.1
Sie können auch einen bestehenden Typ wie folgt erweitern, um den gleichen Aliasnamen erneut zu benutzen. Dies wird nicht als fehlerhafte rekursive Definition interpretiert.
[po4a_alias:man] man opt_it:"--keep 0" [type: man] man/page.1 $lang:man/$lang/page.1
Globale Vorgabeoptionen
Sie können auch "[options]"-Zeilen verwenden, um Optionen zu definieren, die für alle Dateien, unabhängig von deren Typ, verwandt werden müssen.
[options] --keep 20 --option nostrip
Wie bei Befehlszeilenoptionen können Sie die in der Konfigurationsdatei übergebenen Parameter abkürzen:
[options] -k 20 -o nostrip
Optionsprioritäten
Die Optionen jeder Quelle werden aneinandergehängt, wodurch sichergestellt wird, dass die Vorgabewerte leicht durch speziellere Optionen außer Kraft gesetzt werden können. Die Reihenfolge ist wie folgt:
Beispiel
Hier ist ein Beispiel, das zeigt, wie Leer- und Anführungszeichen maskiert werden:
[po_directory] man/po/ [options] --master-charset UTF-8 [po4a_alias:man] man opt:"-o \"mdoc=NAME,SEE ALSO\"" [type:man] t-05-config/test02_man.1 $lang:tmp/test02_man.$lang.1 \ opt:"-k 75" opt_it:"-L UTF-8" opt_fr:--verbose
Falls Sie einen zusätzlichen Abschnitt zu der Übersetzung hinzufügen möchten, beispielsweise für Danksagungen an den Übersetzer, müssen Sie ein Addendum für die Zeile, die ihre Master-Datei definiert, hinzufügen. In der Handbuchseite po4a(7) finden Sie weitere Details zu der Syntax von Addendum-Dateien.
[type: pod] script fr:dok/fr/script.1 \ add_fr:dok/l10n/script.fr.add
Sie können wie folgt auch Sprachvorlagen verwenden:
[type: pod] Skript $lang:dok/$lang/script.1 \ add_$lang:dok/l10n/script.$lang.add
Falls ein Addendum nicht angewandt werden kann, wird die Übersetzung verworfen.
Attribute für die Addendum-Angabe
Addendum-Attribute können die Konfigurationsdatei in Fällen, in denen nicht alle Sprachen ein Addendum bereitstellen oder wenn sich Addenda von Sprache zu Sprache verändern, vereinfachen. Das Attribut ist ein einzelnes Zeichen, das sich vor dem Dateinamen befindet.
Folgendes Beispiel enthält ein Addendum für jede Sprache, aber nur, falls es existiert. Falls es nicht existiert, wird kein Fehler gemeldet.
[type: pod] script $lang:dok/$lang/script.1 add_$lang:?dok/l10n/script.$lang.add
Folgendes Beispiel enthält eine Liste von Addenda für jede Sprache:
[type: pod] script $lang:dok/$lang/script.1 add_$lang:@dok/l10n/script.$lang.add
Manchmal möchten Sie einige Zeichenketten vor dem Übersetzungsprozess verstecken. Um dies zu erreichen, können Sie einen "pot_in"-Parameter an Ihre Masterdatei übegeben, um den Namen der Datei festzulegen, die statt des echten Masters für den Bau der POT-Datei verwandt werden soll. Hier ist ein Beispiel:
[type:docbook] book.xml \ pot_in:book-filtered.xml \ $lang:book.$lang.xml
Mit dieser Einstellung werden die zu übersetzenden Zeichenketten aus book-filtered.xml herausgelöst (diese Datei muss vor dem Aufruf von po4a erstellt worden sein), während die übersetzten Dateien aus book.xml heraus gebaut werden. Damit wird jede Zeichenkette, die Teil von book.xml ist, aber nicht in book-filtered.xml vorkommt, nicht Teil der PO-Dateien sein und damit verhindert, dass die Übersetzer eine Übersetzung davon bereitstellen. Daher verbleiben diese Zeichenketten bei der Erstellung übersetzter Dokumente unverändert. Damit wird logischerweise der Anteil der Übersetzung reduziert und Sie könnten die Option "--keep" verwenden müssen, um sicherzustellen, dass das Dokument trotzdem erstellt wird.
TODO: Ist dieser Abschnitt wirklich nützlich?
Nehmen wir an, Sie betreuen ein Paket namens foo mit der Handbuchseite man/foo.1, die naturgemäß nur auf Englisch gewartet wird. Als (Distributions-)Betreuer wollen Sie jetzt Übersetzungen erstellen und betreuen. Zuerst müssen Sie die POT-Datei mittels po4a-gettextize(1) erstellen, die zum Senden an die Übersetzer notwendig ist.
In diesem Fall würde folgender Aufruf erfolgen:
cd man && po4a-gettextize -f man -m foo.1 -p foo.pot
Diese Datei schicken Sie dann an die entsprechenden Sprachlisten oder bieten sie auf Ihrer Website zum Herunterladen an.
Nehmen wir jetzt an, dass Sie drei Übersetzungen vor Ihrer nächsten Veröffentlichung erhalten haben: de.po (mit einem Addendum de.add), sv.po und pt.po. Da Sie Ihre Makefile(s) nicht ändern möchten, wenn eine neue Übersetzung eintrifft, können Sie po4a mit einer geeigneten Konfigurationsdatei (in diesem Beispiel po4a.cfg) in Ihrer Makefile aufrufen. In unserem Beispiel würde diese Konfigurationdatei dann wie folgt aussehen:
[po_directory] man/po4a/po/ [type: man] man/foo.1 $lang:man/translated/$lang/foo.1 \ add_$lang:?man/po4a/add_$lang/$lang.add opt:"-k 80" In diesem Beispiel wird angenommen, dass die erstellte Handbuchseite (und alle PO- und Addenda-Dateien) in F<man/translated/$lang/> (respektive F<man/po4a/po/> und F<man/po4a/add_$lang/>) unterhalb des aktuellen Verzeichnisses gespeichert werden. In diesem Beispiel würde dann das Verzeichnis F<man/po4a/po/> die Dateien F<de.po>, F<pt.po> und F<sv.po> enthalten und das Verzeichnis F<man/po4a/add_de/> die Datei F<de.add>.
Beachten Sie die Verwendung des Modifikators ?, da nur die deutsche Übersetzung (de.po) von einem Addendum begleitet wird.
Um dann die übersetzten Handbuchseiten tatsächlich zu bauen, würde (einmalig!) die folgende Zeile in das build-Ziel der entsprechenden Makefile eingebaut werden:
po4a po4a.cfg
Sobald dies eingerichtet ist, müssen Sie die Makefile nicht mehr anfassen, wenn eine neue Übersetzung eintrifft, d.h. falls das französische Team Ihnen fr.po und fr.add schickt, dann packen Sie diese einfach in man/po4a/po/ respektive man/po4a/add_fr/ und beim nächsten Mal, wenn das Programm gebaut wird, wird auch die französische Übersetzung automatisch in man/translated/fr/ gebaut.
Beachten Sie, dass Sie weiterhin ein geeignetes Ziel in der Makefile benötigen, um die übersetzten Handbuchseiten zusammen mit den englischen zu installieren.
Falls Sie die automatisch erstellten Dateien nicht in Ihrem
Versionskontrollsystem speichern wollen, benötigen Sie
schließlich noch eine Zeile zum Ziel clean:
-rm -rf man/translated
po4a-gettextize(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a(7).
Denis Barbier <barbier@linuxfr.org> Nicolas François <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
Copyright 2002-2020 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.
2020-12-09 | Po4a-Werkzeuge |