Themes internationalisieren

Dieser Artikel behandelt das Internationalisieren von WordPress Themes mit Hilfe von gettext. Gettext wird in WordPress mitgeliefert und ist auch das OpenSource-Framework welches das WorPpress-Kernsystem mehrere Sprachen sprechen lässt. Als Theme Entwickler sollte man von vornherein darauf achten alle Benutzerausgaben durch die Übersetzungsfunktion laufen zu lassen um das Design später mit allen Sprachen benutzen zu…

Dieser Artikel behandelt das Internationalisieren von WordPress Themes mit Hilfe von gettext. Gettext wird in WordPress mitgeliefert und ist auch das OpenSource-Framework welches das WorPpress-Kernsystem mehrere Sprachen sprechen lässt.

Als Theme Entwickler sollte man von vornherein darauf achten alle Benutzerausgaben durch die Übersetzungsfunktion laufen zu lassen um das Design später mit allen Sprachen benutzen zu können.

Theme präparieren

Der erste Schritt beim Übersetzen eines Themes ist das „maskieren“ aller Ausgaben. Das bedeutet die zu übersetzenden Strings werden über eine Funktion umgeleitet. WP stellt hier die Funktionen __() und _e() zur Verfügung.

__( $text, $domain ) gibt eine ggf. vorhandene Übersetzung von $text im Namensraum $domain zurück. (Alias von translate().)

_e( $text, $domain ) ist eine Umschreibung für

Echo __( $text, $domain );

Beispiel

// Statische veraltete Version:
Echo "Sind sind auf der Startseite.";

// Neu und dynamisch:
_e ('You are on the start page.');
// Wird durch die Sprachdatei in die Zielsprache übersetzt.

Übersetzungen mit Parametern

Einige Übersetzungen enthalten zwangsläufig Parameter, zum Beispiel die Ausgabe der Anzahl der Kommentare eines Artikels. Diesem Problem wird man mit Hilfe der PHP Funktion printf() Herr.

Beispiel

// Statische veraltete Version:
Echo "Diese Seite enthält ".$x." Artikel.";

// Neu und dynamisch:
PrintF ( __('This page contains %d articles.'), $x );
// Wird durch die Sprachdatei in die Zielsprache übersetzt.

Domains / Namensräume

Domains sind Namensräume in denen die Übersetzungen verfügbar sind. Auf diese Weise können verschiedene Übersetzungen parallel geladen werden.

Für Theme-Entwickler ist das ganz einfach, die Funktion zum Laden der aktuellen Sprache heißt load_theme_textdomain( $domain, $path ). $domain ist ein frei wählbarer Bezeichner des zu erstellenden NameSpaces. $path ist optional und sollte auch leer bleiben, so lädt WP standardmäßig die passende .mo Datei zur aktuellen Einstellung WPLANG aus der wp-config.php.

Der Funktionsaufruf für load_theme_textdomain() sollte möglichst weit oben der functions.php Datei im Theme-Verzeichnis stehen.

Erstellen der Übersetzungsdatei (.mo / .po)

Die Übersetzungen der einzelnen Einheiten werden in einem eigenen Format gespeichert: Als .po Datei, der „Source“ der Übersetzungsdatei und die daraus kompilierte .mo Datei.

Zum Erstellen der Datei gibt es für die gängigen Plattformen frei verfügbare Werkzeuge. Eines der portabelsten ist PoEdit (für Windows, Mac OS X und Linux).

  1. Starten Sie PoEdit
  2. Klicken Sie Datei -> Neuer Katalog
  3. Tragen Sie einen Projektnamen und ggf. weitere Eigenschaften ein
  4. Wählen Sie den Reiter „Pfade“
  5. Klicken Sie auf „Neuer Eintrag“ (zweiter von links)
  6. Geben Sie den Pfad Ihres Theme-Verzeichnisses an (auch relative Pfadangaben möglich: bezogen auf den Ort der .po Datei.)
  7. Wählen Sie den Reiter „Schüsselwörter“
  8. Klicken Sie auf „Neuer Eintrag“ (zweiter von links)
  9. Tragen Sie die Namen der Funktionen ein, welche die zu übersetzenden Einheiten enthalten. Im Normalfall „__“ und „_e“.
  10. Nach einem Klick auf „OK“ erhalten Sie einen „Speichern unter“ Dialog. Haben Sie als Pfadangabe „.“ verwendet, speichern Sie die Datei im gleichen Verzeichnis wie die index.php Ihres Themes. Der Dateiname sollte der Sprache entsprechen in die übersetzt wird: Für Deutsch also „de_DE.po“.
  11. Sollten Sie zu übersetzende Inhalte am Theme verändern, so können Sie diese mit einem Klick auf „Katalog -> Aus Quelltext aktualisieren“ hinzufügen bzw. alte entfernen.

Nach dem das Theme internationalisiert, die .mo Datei unter dem richtigen Namen erstellt und alles übersetzt ist sollte sich die Seite in der richtigen Sprache zu Wort melden.