Tutorial: Wordpress mehrsprachig mit gettext

Dieses Tutorial hatte ich bereits auf meiner früheren Wordpress-basierten Homepage veröffentlicht. Angesichts der großen Anzahl derzeit vorhandener Wordpress-Installationen stelle ich es hier erneut ein.

Die ganze Sache basiert auf dem Wordpress-Plugin LanguageSwitcher. Über dessen Konfiguration existiert ein hervorragendes Tutorial in deutscher Sprache. Darum möchte ich hier mehr auf die Verwendung der gettext-Funktionen von PHP eingehen, da deren Kenntnis notwendig ist, um das verwendete Wordpress-Theme möglichst durchgängig mehrsprachig zu gestalten. Das Theme, das die Vorlage für meine alte Homepage war, erforderte einige Anpassung.

Das ganze funktioniert so wie hier beschrieben nur unter Linux, auch der Webserver muß unter Linux/Unix laufen, da gettext auf Funktionen in systemnahen C-Bibliotheken zurückgreift. Diese sind meines Wissens auf Windows-Systemen nicht vorhanden.

Nun aber zur praktischen Umsetzung. Zunächst benötigen wir das Paket gettext, das sich unter Debian folgendermaßen installieren läßt:

~$ apt-get install gettext

Nun müssen alle hartkodierten Strings, die irgendwie zur Ausgabe kommen, in allen PHP-Dateien des verwendeten Themes “gettexted” werden, soweit sie es nicht schon sind. Im Standardtheme “default” sind die meisten Strings bereits gettexted, aber bei Verwendung eines eigenen Themes werden wir wohl einiges anpassen müssen.

Strings, die als solche ausgegeben werden, gettexten wir auf diese Weise:

<?php _e('Hallo gettext!') ?>

Und Strings, die einer Methode als Argument übergeben werden, auf jene:

<?php comments_popup_link(_('dieses'), _('jenes')); ?>

Aber Achtung Fallstrick! xgettext, siehe unten, erkennt beim Parsen nämlich nur die zweite Variante als gettexte! Man sollte also erst alle Strings mit der zweiten Variante gettexten, dann den nächsten Schritt durchführen, und erst danach dort, wo nötig, die

_()

mit

_e()

ersetzen.

Im nächsten Schritt lassen wir xgettext die soeben geänderten (und getesteten!) PHP-Dateien parsen, um unsere Sprachdatei, die wir dann übersetzen wollen, zu erzeugen. Das geschieht etwa folgendermaßen:

~$ xgettext -o sprachdatei.po mehrsprachig.php

sprachdatei.po sieht dann so aus, wenn die beiden obigen Zeilen php-Code in mehrsprachig.php drinstanden:

#: mehrsprachig.php:1
msgid "Hallo gettext!"
msgstr ""
#: mehrsprachig.php:2
msgid "dieses"
msgstr ""
#: mehrsprachig.php:2
msgid "jenes"
msgstr ""

Wir übersetzen die Strings und speichern die Datei als cs.po:

#: mehrsprachig.php:1
msgid "Hallo gettext!"
msgstr "Ahoj gettext!"
#: mehrsprachig.php:2
msgid "dieses"
msgstr "tento"
#: mehrsprachig.php:2
msgid "jenes"
msgstr "tamto"

Das ist natürlich nur beispielhaft. Selbstverständlich sollte man alle zu übersetzenden Strings aus allen gettexteden PHP-Dateien in einer eigenen .po-Sprachdatei zusammenfassen, auch deswegen, weil diese Datei ebenfalls als Vorlage für alle anderen Übersetzungen in weitere Sprachen dient. Diese .po-Sprachdateien (portable object) werden in der gettext-Terminologie auch Kataloge genannt.

Alle Ergänzungen und individuellen Anpassungen, die wir auf diese Weise vorgenommen haben, führen wir nunmehr mit dem tschechischen Original-Sprachkatalog für Wordpress zusammen. Falls noch nicht vorhanden, gibt es diesen Katalog hier: cs_CZ.po für Wordpress

Wenn Wordpress für Sprachen mit unterschiedlichen diakritschen und Sonderzeichen sowie unterschiedlichen Schriften, wie etwa für Deutsch, Tschechisch und Russisch, fit gemacht werden soll, ist natürlich UTF-8 die Zeichenkodierung der Wahl. Wordpress muß dann bereits mit Unterstützung für UTF-8 installiert worden sein.

Daher muß darauf geachtet werden, daß im Header von cs_CZ.po diese Zeile steht:

"Content-Type: text/plain; charset=UTF-8\n"

Den Katalog übersetzen wir jetzt in das notwendige Binärformat (.mo für machine object):

~$ msgfmt cs_CZ.po -o cs.mo

Die entstandene binäre Sprachdatei cs.mo kopieren wir als letzten Schritt in das Verzeichnis wordpress/wp-includes/languages. Nun sollten bei korrekter Konfiguration des Webservers und installiertem LanguageSwitcher-Plugin beim Umschalten der Sprache mittels Klick auf die jeweiligen kleinen Landesflaggen die jeweiligen Sprachversionen zu sehen sein :)

Hier noch einige weiterführende Links:
Ein sehr interessanter Artikel zum Thema UTF-8 von meinem Vater
Übersetzers Liebling
Programme von Welt

Add post to: Delicious Reddit Slashdot Digg Technorati Google
(already: 6) Comment post

Comments

No comments for this post

Required. 30 chars of fewer.

Required.

captcha image Please, enter symbols, which you see on the image