Wie erstelle ich ein sprachunabhängiges WordPress-Theme (2: übersetzen) - Guru 2.0
Wie erstelle ich ein sprachunabhängiges WordPress-Theme (2: übersetzen)

Wie erstelle ich ein sprachunabhängiges WordPress-Theme (2: übersetzen)

Der Herbst im Jardin du Luxembourg in Paris, Bild: microble.eu

Der Herbst im Jardin du Luxembourg in Paris, Bild: microble.eu

Im 1. Teil der Artikelserie haben wir ja erfahren wie wir die statischen HTML-Texte automatisch übersetzen lassen können. Heute kümmern wir uns um die Ausgaben von PHP.
Zuerst müssen wir wieder alle Dateien unseres Themes durchforsten. Diesmal suchen wir aber nach den Befehlen echo, printf() oder sprintf(). Hier müssen wir die Text ebenfalls durch die passende Übersetzungsfunktion von WordPress laufen lassen.

Der echo-Befehl

Dieser ist einfach zu internationalisieren. Schauen wir uns auch diesen Code an einem Beispiel an. wir sehen hier die typische Ausgabe mit echo-Befehlen.

In der Folge müssen wir den Befehl mit der Funktion _e($text) ersetzen. Erinnerst Du dich, dass diese Funktion von WordPress, den im Parameter übergebenen Text ersetzt und gleich ausgibt? Ja, klar! Damit ist Dir auch klar was wir machen müssen und warum der folgende SourceCode in den Zeile #3 und #5 so verändert wurde.

Ich bevorzuge es, wenn es irgendwie geht, keine HTML-Tags direkt in den zu übersetzenden Texten zu haben. Daher würde ich den Code mit der Funktion __($text) ergänzen und den echo-Befehl weiter verwenden. Dadurch habe ich wirklich reinen Text der übersetzt wird.

Die Übersetzung von Texten mit Parametern

Hier kommen die beiden Befehle printf() und sprintf() ins Spiel. Sie unterscheiden sich nur durch die direkte Ausgabe oder durch die Rückgabe des Textes als formatierten String. Eine Eselbrücke ist das s am Anfang des Befehls. Du kannst es Dir als silent oder still merken. Damit hast Du eine Idee, was der Befehl tut. Er gibt den formatierten String als Variable zurück.

Vorhandene php-Befehle ergänzen

Wenn Du einen Ausgabe-Befehl findest, musst Du eigentlich nur den ersten Parameter (den Text) der beiden Befehle mit der __($text) Funktion klammern. Das wars dann auch schon. In einem Beispiel sieht das so aus.

Und hier der überarbeitete Code

Variablen Text neu erstellen

Leider wirst Du im Theme aber auch Code-Passagen entdecken, die nicht so einfach zu behandeln sind. Da werden mit dem echo-Befehl Ausgabestrings zusammengestellt, die für sich alleine einfach nicht sauber zu übersetzen sind. Denk immer daran, dass Du irgendwann eine Liste der Texte einem Native-Speaker zur Übersetzung geben sollst. Wie soll der aus einzelnen Worten einen sinnvollen Text zusammenbasteln? Daher werden wir das ganze einfach umbauen und uns das Leben leichert machen. Ich probiere auch, so viele gleiche Texte zu verwenden wie möglich. Dann muss nicht jeder Satz neu übersetzt werden, sondern es können viele Dinge einfach wiederverwendet werden. Schauen wir uns den folgenden Code an. Hier wird einfach ein Satz, welcher mit Variablen ergänzt wird, ausgeben.

Nun müssen wir den ganzen Text zerlegen und mit einer neuen Funktion ausgeben. Erstens ist es kein guter Stil, wenn HTML-Tags innerhalb von php vorkommen. Diese werden wir also ausgliedern. Und als nächstes benötigen wir die Ausgabe eines formatierten Strings. Dazu haben wir ja den Ausgabebefehl printf($formatString, $Param1, ..., $Param#) von php. Dieser Befehl hat als ersten Parameter einen String, welcher Text und Platzhalter für die folgenden Parameter enthält. Für uns reichen wahrscheinlich zwei Typen von Platzhalten. Entweder ist es %s für einen String oder %d für eine Dezimalzahl. Diese Platzhalten werden dann von links nach rechts, durch die angegeben Parameter der Funktion ersetzt. In der Folge wird der formatierte String ausgegeben oder für die Weiterverwendung zurückgegeben. Schauen wir uns das Beispiel im neuen Gewand an.

Du siehst, zuerst wurden die notwendigen ShortTags zur Trennung von HTML und php eingeführt. Nun kommt die printf()-Funktion ins Spiel. Der übergebene Text wird sofort mit einer __() übersetzt. Der erste Parameter %d wird durch den Wert der Variablen $postPublished und der zweite Parameter durch den Wert von $postFuture ersetzt.

Damit haben wir auch diesen Teil geschafft.

Sonstige Texte übersetzen

Da wir gerade beim durchackern des SourceCodes sind, können wir auch noch die restlichen Werte übersetzen. Gerne werden Text einer Variablen zugewiesen. Im folgenden Beispiel ist es ein Array. Aber es können auch einzelne Variablen sein. Wenn Du darauf stosst, kannst Du diese Texte auch sofort mit der __()-Funktion behandeln.

Nachdem Du die Übersetzungsfunktion angewendet hast, sollte Dein Code so aussehen.

Immer denselben Text neu übersetzen?

Das ist wirklich nicht sinnvoll! Denn besonders die Beschriftung von Knöpfen oder Feldnamen in Formularen wiederholt sich immer wieder. Dazu können wir einen kleinen Trick anwenden, denn php kennt sogenannte Konstanten. Dazu legen wir uns im Verzeichnis des aktiven Themas eine Datei mit dem Namen language.php an. In der ersten Zeile schreiben wir, wie immer, <?php und in der letzten Zeile ?>. Damit kann der WebServer die Datei sauber verarbeiten. Als nächstes müssen wir die Datei auch verwenden. Dazu öffnen wir unsere Funktionen-Sammlung, functions.php. Gleich am Anfang, entweder in der Zeile nach <?php oder nach den Kommentarzeilen, binden wir unsere “Sprachdatei” mit folgenden Befehl ein:

Nun können wir in der Datei language.php die neuen Konstanten definieren und verwenden. Nehmen wir an, wir brauchen Übersetzungen für Speichern, Abbrechen, Absenden und Suchen, dann sieht das ganze wie folgt aus. Natürlich kannst Du auch noch weitere Konstanten definieren. Wichtig ist, dass Du den Namen der Konstante in Großbuchstaben schreibst (dies ist einfach eine Programmiererübereinkunft) und dass Du denn Wert der Konstantenn sofort mit __() übersetzen lässt.

Wenn Du die Konstanten dann in Dein Theme einbauen willst, kann das so aussehen.

Damit haben wir einen langen 2. Teil für die sprachunabhängigen Themes abgeschlossen. Im nächsten und dritten Teil, werden wir uns um die echte Übersetzung kümmern und wie WordPress erkennt, welche Sprache benötigt wird.

Es wurden 2 Kommentare zu diesem Beitrag geschrieben.

Blogheim.at Logo
Diese Website verwendet Cookies - nähere Informationen dazu finden Sie in unserer „Datenschutzerklärung“. Klicken Sie auf „Ich stimme zu“, um Cookies zu akzeptieren und unsere Webseite zu besuchen, oder klicken Sie auf „Cookie-Einstellungen“, um Ihre Cookies selbst zu verwalten.