WordPress PlugIn Localization

Hier beschreibe ich kurz, wie ich für das Chidoo Quizmaster Plugin Übersetzungsdateien generiere. Wie der Prozeß allgemein funktioniert und welche Tools es dafür gibt, ist im Plugin Develper Handbook ausführlich beschrieben. Dennoch blieben auch mir während der Plugin-Entwicklung einige Trial-and-Errors nicht erspart, um den optimalen Workflow zu finden.

In Kürze zusammengefasst, das generieren der Übersetzungen geschieht in 5 Schritten:

  1. Mit wp-cli i18n make-pot die POT-Datei erstellen
  2. Im Übersetzungs-Editor poedit die bestehende PO-Datei öffnen/ neu anlegen
  3. Generierte POT-Datei einlesen
  4. Gewünschte Übersetzungen eintragen
  5. MO-Datei erstellen

Hier nun die ausführliche Beschreibung des Prozesses

POT-Datei mit Hilfe von wp-cli generieren

Das Programm wp-cli ist das WordPress Command Line Interface. Hierüber lassen sich über die Kommandozeile viele Dinge in einer WordPress-Umgebung konfigurieren. [WPCLI]

Ein Kommando des wp-cli ist i18n, und dieses stellt das Unterkommando make-pot zum Generieren der POT-Datei aus WordPress-Dateien, in diesem Fall aus den Dateien des PlugIns, zur Verfügung.

In diesem Beispiel ist my-plugin der PlugIn-Ordner mit dem Unterordner languages, standardmäßig sind die Texte im PlugIn englischer Sprache hinterlegt, es sollen deutschsprachige Übersetzungsdateien erstellt werden:

# cd my-plugin
# wp-cli.phar i18n make-pot . languages/my-plugin-de_DE.pot --skip-js

Das Programm durchsucht die PlugIn-Ordnerstruktur und extrahiert übersetzungsfähige Strings aus dem Quellcode. Hieraus entsteht zur weiteren Verarbeitung die POT-Datei my-plugin-de_DE.pot.

Ich habe im Fall des PugIns Chidoo Quizmaster dem Programm die Option –skip-js aus zwei Gründen mitgegeben: Erstens befinden sich in einem Unterordner meines PlugIns komprimierte min.js-Dateien, in denen es nichts zu übersetzen gibt. Außerdem kam meine Version des wp-cli anscheinend nicht so richtig damit klar und lief eine Ewigkeit.

Zweitens sind in dem PlugIn in keinen, also auch unkomprimierten Javascript-Dateien zu übersetzende Texte hinterlegt. Diese werden per Objekt mittels wp_localize_script an das Sktipt übergeben [LSJS]. Ab WordPress 5.0 gibt es eine weitere Möglichkeit, in Javascript-Dateien Texte zu übersetzen [IWP5]. Für das Chidoo Quizmaster Plugin ist die Verwendung von wp_localize_script hinreichend und hat den Vorteil, dass ich auf das Differenzieren zwischen min.js-Dateien und unkomprimierten JS-Dateien im Übersetzungsprozess verzichten kann.

Der Übersetzungs-Editor

Das Programm poedit ist für alle größeren Plattformen verfügbar. Hiermit lassen sich PO-Dateien und MO-Dateien generieren. Um den Workflow rund zu machen, musste ich allerdings erst einiges ausprobieren, ganz intuitiv war das nicht.

Mit der Übersetzung initial beginnen

Gibt es nämlich noch keine Übersetzungs-Datei (PO-Datei) dann muss zunächst ein neues, zunächst leeres „Projekt“ erstellt werden. Dies geschieht mit „Datei“ →“Neu“ oder „Datei“ → „Neu aus POT-/ PO-Datei“. Im zweiten Fall kann man direkt die generierten Strings aus der POT-Datei einlesen und mit dem Übersetzen beginnen.

PO-Datei speichern

Wenn alle Übersetzungen gemacht sind, lässt sich die Datei mittels „Datei“ → „Speichern“ oder „speichern unter…“ als PO-Datei speichern.

Im Anschluss kann über „Datei“ → „MO-Datei erstellen…“ die zugehörige MO-Datei exportiert werden.

Weitere Übersetzungen einpflegen

Natürlich wird jedes PlugIn weiterentwickelt und neue zu übersetzende Strings kommen hinzu.

Zunächst habe ich wieder mit wp-cli die POT-Datei mit allen Änderungen generiert. Wenn man diese in poedit öffnet, legt der Editor ein neues Projekt an und es sind dann natürlich keine Übersetzungen mehr vorhanden.

Also muss stattdessen die zuvor generierte PO-Datei geöffnet werden, hier sind alle bereits gemachten Übersetzungen drin. Bleibt die Frage, wie die neu hinzugekommenen Strings aus der POT-Datei in die PO-Datei gemerged werden können.

Dies geschieht über den Menüpunkt „Katalog“ → „Aus POT-Datei aktualisieren…“. Im nächsten Dialog die neu generierte POT-Datei auswählen und schon tauchen die neuen Strings in der Liste auf und können übersetzt werden!

MO-Datei generieren

Sind alle Übersetzungen gemacht, bleibt als vorerst letzter Schritt, die MO-Datei zu generieren. Dies geschieht über den Menüeintrag „Datei“ → „MO-Datei erstellen…“.

Diese muss im languages-Ordner des PlugIns in dem von WordPress geforderten Dateinamens-Format, zum Beispiel plugin-slug-de-DE.mo abgelegt werden. [L10N]

Weiterführende Links

[WPCLI] Download und Installation von WP-CLI: https://make.wordpress.org/cli/handbook/guides/installing/

[LSJS] Using wp_localize_script for creating JS objects with translated strings.

[IWP5] https://pascalbirchler.com/internationalization-in-wordpress-5-0/

[L10N] https://developer.wordpress.org/plugins/internationalization/localization/