Inhaltsverzeichnis
Welcompose nutzt in Bereichen, die nicht vom Anwender ohne weiteres editiert werden können, Englisch für Beschriftungen und Systemmeldungen. Diese können allerdings ohne Weiteres lokalisiert werden. Lokalisierbar ist der Administrationsbereich sowie Teile des öffentlichen Bereichs (z.B. Formular-Beschriftungen und -Fehlermeldungen beim Seitentyp Simple Form), nicht aber Fehlermeldungen vom System, die beispielsweise von Validierungsfunktionen stammen.
Die Lokalisierung erfolgt mit GNU gettext, das beispielsweise auch von anderen Projekten wie KDE verwendet wird. GNU gettext steht in Welcompose einerseits nativ über die gettext-Erweiterung von PHP bereit und andererseits in Form von Smarty-Plugins, die die gettext-Funktionen innerhalb der Vorlagen zur Verfügung stellen.
Eine gute Einführung zum Thema GNU gettext mit PHP bietet der Artikel Gettext von Joao Prado Maia.
Um Welcompose zu lokalisieren, benötigen Sie folgende Werkzeuge:
Sie brauchen SmartyGettext, respektive die Datei
xgettext.php aus dem Paket, um die
zu übersetzenden Zeichenketten aus den Vorlagen und den
PHP-Scripts zu extrahieren. Sie erhalten SmartyGettext von
http://downloads.welcompose.de/misc/SmartyGettext/xgettext.phps.
Speichern Sie die Datei mit dem Suffix .php lokal
und kopieren Sie xgettext.php dann nach
/usr/local/bin oder fügen Sie
den Pfad zur Datei in $PATH ein, damit Sie sie als
xgettext.php auf der Kommando-Zeile
ansprechen können.
GNU gettext ist Bestandteil der meisten
Linux-Distributionen und MacOS X. Ist es nicht
vorhanden, kann es über den jeweiligen Paket-Manager
nachinstalliert werden. In Windows ist eine
Installation und Nutzung von GNU gettext über Cygwin
möglich. Nach der Installation von GNU gettext sollten
die Werkzeuge msginit,
msgfmt und
msgmerge vorhanden sein.
Eine CLI-Version von PHP 5.0.3 (oder neuer). Ob eine
CLI-Version von PHP vorhanden ist, können Sie mit
php -v herausfinden.
Beispielausgabe: PHP 5.2.0 (cli)
(built: Dec 17 2006 11:27:03).
|
Warnung |
|---|---|
|
Die Code-Beispiele gehen davon aus, dass alle Programme in $PATH installiert sind und daher direkt angesprochen werden können. Ist dem nicht der Fall, passen Sie die Pfade zu den Programmen den aktuellen Gegebenheiten an. |
Bevor die Zeichenketten übersetzt werden können, müssen Sie aus
den Vorlagen und PHP-Scripts extrahiert werden. Verwenden Sie dazu
das Programm xgettext.php.
|
Warnung |
|---|---|
|
Es existiert auch ein Programm namens
|
$ php xgettext.php \
--charset=utf-8 \
--directory=welcompose/welcompose/trunk/welcompose \
--scan-hidden=false \
--delimiter="{ }" \
--suffix=.html \
--suffix=.php
Mit dem Argument --directory wird das Verzeichnis,
angegeben, von dem aus xgettext.php alle Dateien
nach Zeichenketten zum Übersetzen durchsuchen soll. Der Pfad sollte auf
das Verzeichnis zeigen, indem sich die Software mit den Unterordnern
admin, core usw. befindet.
Das Argument --suffix definiert, welche Dateitypen
(nach Endung) nach Zeichenketten zum Übersetzen durchsucht werden
sollen.
|
Tipp |
|---|---|
|
Um eine Liste aller Optionen von xgettext.php zu erhalten, geben Sie xgettext.php --help ein. Dort wird auch ihre Anwendung erklärt. |
Wenn Sie xgettext.php aufrufen, durchsucht
es gemäss der Konfiguration den jeweiligen Zielordner und alle
Unterordner nach Zeichenketten zum Übersetzen. Die gefundenen
Zeichenketten werden in eine Datei mit dem Namen
messages.pot geschrieben.
Um die Übersetzung in eine bestimmte Sprache zu beginnen
(beispielsweise Deutsch), benötigen Sie das Programm
msginit und die Datei
messages.pot, die Sie in
Abschnitt 15.1.2, „Zeichenketten extrahieren“
erstellt haben.
$ msginit --locale=de --input=messages.pot
msginit ist ein interaktives Programm, dass
Ihnen einige Fragen zur Lokalisierung stellt und die Datei
messages.pot auf die Übersetzung vorbereitet.
Die Sprache, in die Sie Welcompose übersetzen wollen, wird mit dem
Kommandozeilen-Argument --locale bestimmt:
de steht beispielsweise für Deutsch,
es für Spanisch. Sie erhalten eine Datei
mit dem Namen messages.po.
Die PO-Dateien können mit jedem Texteditor übersetzt werden, sofern er die richtigen Zeichensätze unterstützt. Jede zu übersetzende Zeichenkette umfasst drei Zeilen:
#: blog_tag.html:120 blog_tag.html:26 blog_tag.html:110 msgid "Postings tagged with »%tmp_current_tag_word«" msgstr ""
Die erste Zeile listet die Referenzen, also die Dateien und Zeilennummern, wo die Zeichenkette überall gefunden wurde. Dies ist hilfreich bei kontextsensitiver Übersetzung. Die msgid bezeichnet die Zeichenkette im Quellcode, msgstr nimmt den übersetzten Text auf. Beispiel:
#: blog_tag.html:120 blog_tag.html:26 blog_tag.html:110 msgid "Postings tagged with »%tmp_current_tag_word«" msgstr "Beiträge zum Stichwort »%tmp_current_tag_word«"
|
Warnung |
|---|---|
|
Editieren Sie auf keinen Fall die msgid. Sonst ist GNU gettext nicht der Lage, der ursprünglichen Zeichenkette die Übersetzung zuzuordnen. |
Platzhalter können an einem vorgestellten Prozentzeichen (%) identifiziert werden. Sie sind 1:1 vom Original zu übernehmen und an der passenden Stelle in der Übersetzung zu platzieren (s. Beispiel über diesem Abschnitt).
Zeichenketten, die sowohl im Original als auch in der Übersetzung gleich lauten (z.B. bei Eigennamen wie IBM), ist das Original in die Übersetzung zu übernehmen:
#: blog_tag.html:140 blog_index.html:138 blog_tag.html:130 blog_index.html:128 msgid "Permalink" msgstr "Permalink"
Nachdem Sie alle Zeichenketten übersetzt haben, reichen Sie die Übersetzung bitte ein oder fügen Sie sie selber der Versionskontrolle, wenn Sie das können.
|
Anmerkung |
|---|---|
|
GNU gettext ist nicht in der Lage, die PO-Dateien für die
Übersetzung der Zeichenketten zu verwenden. Diese müssen
dazu vorher in das binäre MO-Format überführt werden.
Die erfolgt mit dem Programm
Sie brauchen dies als Übersetzer aber nur zu tun, wenn Sie
die |
|
Warnung |
|---|---|
|
Löschen Sie die PO-Dateien auf keinen Fall! Sie benötigen sie bei Aktualisierungen, um nicht mehr alle Zeichenketten von neuem ändern zu müssen. |
Wurde die Software aktualisiert, d.h. Zeichenketten geändert
und hinzugefügt, ist es nötig, ein weiteres Mal sämtliche
Zeichenketten zu extrahieren und eine POT-Datei zu erstellen
(siehe Abschnitt 15.1.2, „Zeichenketten extrahieren“).
Damit aber nicht wieder sämtliche Zeichenketten übersetzt
werden müssen, kann man mit Hilfe eines weiteren Werkzeugs
einen Abgleich der alten messages.po
und der neuen messages.po ausführen.
$ mv messages.po old.po
$ php xgettext.php \
--charset=utf-8 \
--directory=welcompose/welcompose/trunk/welcompose \
--scan-hidden=false \
--delimiter="{ }" \
--suffix=.html \
--suffix=.php
$ mv messages.po new.po
$ msgmerge old.po new.po --output-file=messages.po
Die resultierende messages.po enthält
bereits die – sofern noch gültigen – alten
Übersetzungen und am Ende der Datei die gegebenenfalls neu
hinzugekommenen oder modifizierten Zeichenketten. Gelöschte
Zeichenketten sind auskommentiert am Ende der Datei zu
finden:
#~ msgid "VORSCHAU - KOMMENTARE NICHT VERFÜGBAR!" #~ msgstr "PREVIEW - COMMENTS NOT AVAILABLE"
Die auskommentierten Zeichenketten können bei Bedarf
automatisch mit Hilfe von awk entfernt
werden:
awk'{if (/^#~/) exit; elseprint}' messages.po > messages_sauber.po