Internationalisierung in WordPress

Ich habe mir vor einigen Monaten – als ich mich noch nicht so gut mit WordPress auskannte – ein WordPress Plugin runtergeladen, das es möglich machen soll einzelne Seiten und Einträge mit individualisierten Headern zu versehen. Mir fiel auf, dass die Optionen auf Englisch dargestellt waren, und da ich das Plugin für die Webseite eines Bekannten installiert habe, wollte ich eben noch die Englischen Beschreibungen übersetzen – nur zu seinen Komfort. Leider wurde das Plugin von einem ignoranten kurzsichtigen Amerikaner geschrieben und so habe ich alle hart gecodeten Textpassagen selbst internationalisierungsfähig machen müssen und übersetzt. Ein paar Tage später kam eine neue Version heraus mit einigen kleineren Änderungen – ich hab es upgedated – und alle meine Änderungen wurden überschrieben. Grrr!

In den darauffolgenden Tagen habe ich mich dann weiter mit den Internationalisierungs­möglich­kei­ten von WordPress auseinandergesetzt (und mit dem Programmierer) und möchte euch nun kurz einen Überblick über die wich­tigs­ten Funktionen geben:

Generell ist es immer hilfreich sich im WordPress Codex zu informieren, da man dort immer schon eine Menge Informationen abrufen kann.

Alle Übersetzungs-Funktionen findet man in seiner WordPress Installation unter: wp-includes/l10n.php.
Starten wir mit den Funktionen

__( 'string', 'domain' );
_e( 'string', 'domain' );

Bei beiden Versionen ist der zu übersetzende String der erste Übergabewert und der Name der Domain (des Themes oder Plugins) der zweite. Der Unterschied besteht darin, dass während __() den übersetzten String nur zurückgibt, gibt _e() den übersetzten String mit echo wieder.

Wenn ihr euch von mir geschriebene Plugins oder Themes anschaut, wird euch auffallen, dass ich den 'domain'-Teil immer mit definierter Konstante löse, so muss ich die Domain nur einmal ändern, falls das mal von Nöten sein sollte.
UPDATE: Textdomains als Konstante zu verwenden ist kein WordPress Best Practice! Bitte verwendet Strings und keine Variablen oder Konstanten.

Man kann den Übersetzern auch noch Informationen über den Kontext anhängen, wenn man das für nötig erachtet:

_c( 'string|beschreibung', 'domain' );

Hierbei splittet WordPress den Übergabestring beim '|' und übersetzt nur den ersten Teil, der Übersetzer sieht aber auch die Beschreibung. Seit der Version 2.8.x ist das auch mit

_x( 'string', 'beschreibung', 'domain' );

möglich, wobei hier der Kontext gesondert übergeben wird.

Als letzte Funktion mit einem Buchstaben haben wir noch:

_n( 'singular', 'plural', 'anzahl', 'domain' );

Wie sich unschwer erkennen lässt also eine Funktion, die die übergebene Anzahl überprüft und dann den richtigen, übersetzten String zurückgibt.

Viele dieser Funktionen gibt es noch zusammen mit esc_attr() und esc_html() sowie mit _noop Zusatz. Da dieser Artikel aber nur einen Überblick geben sollte gehe ich hier nicht weiter darauf ein, ausser es wird gewünscht. Mal sehen, vielleicht war das auch nur der erste Teil einer i18n-Serie…

Ein Gedanke zu „Internationalisierung in WordPress

  1. Nice article. Bu is there a possibility to get all strings wich are used in the plugin and generate a .po file to make it translatable for poEdit? What is if I write the plugin default in german language, but when someone wants to translate it to spanisch, must he translate from german to spanisch or can he also translate from english to spanisch if there is already a translated english version? thanks!

Kommentare sind geschlossen.