Der vierte Adventskalender-Beitrag beschreibt und bewertet 5 Möglichkeiten, WordPress-Plugins und -Themes zu lokalisieren.


Als WordPress-Entwickler weißt du wahrscheinlich, wie du Plugin- und Theme-Strings für die Übersetzung mit einer der localization-Funktionen (__(), esc_html__() etc.) vorbereitest. Dies wird als internationalization bezeichnet. Wenn du mit diesem Thema noch nicht vertraut bist, schau dir die dazugehörigen Handbücher für Themes und Plugins an.

Leider ist die offizielle Dokumentation zur Lokalisierung für Packages, die nicht im WordPress-Repository gehostet werden, veraltet und umständlich. Nachdem du also die Handbuchseiten zur Internationalisierung gelesen hast, solltest du unbedingt hierher zurückkommen. Aber was ist denn nun Lokalisierung, fragst du dich? Nun, lies weiter!

WordPress-Themes und -Plugins lokalisieren – Was ist das?

Wenn du mit der Internationalisierung deines Codes (siehe oben) fertig bist, musst du (oder jemand anderes) ihn lokalisieren. Dies ist der Prozess der Übersetzung aller Strings deines Packages. Je nachdem, wo du deinen Code verwenden und verteilen möchtest, wirst du wahrscheinlich sogenannte “Sprachdateien” erhalten. Dies sind im Grunde genommen Dateien mit den folgenden Erweiterungen: .pot, .po und .mo.

In diesem Beitrag werden wir nicht darauf eingehen, wie Sprachdateien strukturiert sind oder wie sie funktionieren. Dies wurde bereits mehrfach und sehr detailreich beantwortet (die oben genannten Handbücher sind ein guter Anfang). Stattdessen werden wir verschiedene Möglichkeiten zur Erstellung von Sprachdateien untersuchen, d. h. wie man sie (automatisch) aus dem Quellcode extrahiert.

1. GlotPress – Kostenlose Packages online übersetzen

Wenn du vorhast, dein (kostenloses) Package in den offiziellen Theme– oder Plugin-Repositories zu hosten (oder es bereits tust), wirst du mit ziemlicher Sicherheit nur mit GlotPress arbeiten. Verfügbar unter https://translate.wordpress.org, erlaubt es dir, Übersetzungen für jedes WordPress-Theme, -Plugin oder sogar den WordPress-Core selbst vorzuschlagen, einzureichen oder zu ändern.

Es funktioniert, indem es übersetzbare Strings aus dem PHP-Quellcode des Packages extrahiert (und bald auch vom JavaScript-Code) und eine Oberfläche bereitstellt, um sie einfach zu übersetzen.

Mit anderen Worten: Du musst die Sprachdateien nicht manuell mit deinem Package verteilen, weil WordPress die Quelldateien analysiert, die Dateien erstellt und zum Download auf seinen Servern bereitstellt.

GlotPress ist ein leistungsstarkes Tool, das die Lokalisierung deines Packages erleichtert, aber wie bei jedem Tool hat es einige Nachteile: Erstens gibt es keine Versionierung von Sprachdateien. Das bedeutet, dass WordPress immer das neueste Übersetzungsupdate herunterlädt.

Stell dir vor, du arbeitest an einem Projekt, das ein Plugin aus dem WordPress-Repository verwendet. Nun vergisst ein unerfahrener Übersetzer, Platzhalter zu einem String hinzuzufügen und erstellt damit eine fehlerhafte Übersetzung. Da es keine Möglichkeit gibt, die Übersetzung an einem bestimmten Status (Version) “einzufrieren”, läuft sie auf deinem Server durch sprintf(), nachdem du die Übersetzungen aktualisiert hast. Und da Platzhalter fehlen, löst die PHP-Engine eine Warnung aus. Wenn der (Produktions-)Server falsch konfiguriert ist, wird die Warnung angezeigt, die zumindest dein Design verhaut oder im schlimmsten Fall deine gesamte Website lahmlegt, ohne dass es deine Schuld ist.

Ein weiterer Nachteil liegt direkt in der fehlenden Versionierung: Wenn du  Composer verwendest, um eine WordPress Projekte einzurichten (und das solltest du!) und die Dateibearbeitung deaktivierst, gibt es derzeit keine “gute” Möglichkeit, Sprachdateien zu verwalten (herunterzuladen). Obwohl einige Packages verfügbar sind, erfordert die Suche nach Übersetzungsaktualisierungen und das Herunterladen derselben mehrere Requests, die sich negativ auf die Deploy-Dauer auswirken.

VorteileNachteile
Keine manuelle Pflege/Aktualisierung/Verteilung von Sprachdateien erforderlichKeine Versionierung
Saubere VCS, keine “Übersetungs-Commits”Keine Composer-Unterstützung
Jeder kann Übersetzungen einbringen, auch parallel!Zeitaufwendig, falsche Übersetzungen von Sprachen zu korrigieren, bei denen du kein Project Translation Editor bist
Für Pakete ist ein Übersetzungsfortschritt von 95%* erforderlich, bevor GlotPress Sprachdateien generiert und bereitstellt.

*weitere Informationen

2. Loco Translate – Private (Kunden-)Packages übersetzen

Nachdem wir uns GlotPress angesehen haben und wie es Package-Autoren und Freiwilligen hilft, Übersetzungen für freie Packages einfach zu verwalten und einzureichen, gehen wir nun zu einem weiteren hilfreichen Lokalisierungs-Tool über: Loco Translate.

Auf den ersten Blick könnte man denken, dass es sich um eine lokal laufende Version von GlotPress handelt. Obwohl teilweise wahr, ermöglicht die Tatsache, dass es auf deiner lokalen Entwicklermaschine läuft, die Lokalisierung von Packages, die nicht für die Öffentlichkeit bestimmt sind. Wenn man in einer Agentur mit Kunden arbeitet, sind die meisten Packages (Plugins) maßgeschneidert und werden niemals im WordPress-Repository veröffentlicht. An dieser Stelle kommt Loco Translate ins Spiel. Es bietet eine ähnliche Benutzeroberfläche wie GlotPress und da es in WordPress läuft, können alle Benutzer, die Zugriff haben, Übersetzungen beitragen.

Außerdem kümmert es sich um die Benennung und Speicherung von Sprachdateien, damit sie von WordPress definitiv erkannt werden (vorausgesetzt, du hast deine Packages korrekt internationalisiert). Wenn keine Übersetzungen verwendet werden, bietet Loco Translate verschiedene Debugging-Tools und -Informationen, um Fehler in deiner Internationalisierungskonfiguration leicht zu erkennen.

VorteileNachteile
Keine manuelle Pflege/Aktualisierung von Sprachdateien notwendigÄnderungen von Übersetzungen "stopfen" den VCS-Verlauf voll
All deine WordPres-Benutzer können an der Übersetzung teilnehmen Keine parallele Übersetzung von zwei oder mehr Benutzern

3. Loco Translate – Korrigiere Premium-Package-Übersetzungen

Wie wir alle wissen, werden benutzerdefinierte Dateiänderungen überschrieben, wenn das Package aktualisiert wird. Aber was tun, wenn du ein bezahltes Plugin verwenden musst, das (noch) nicht in deine Sprache übersetzt wurde? Was tun, wenn die Übersetzung falsch ist? Natürlich kannst du das Plugin mit Loco Translate wie im vorherigen Abschnitt beschrieben lokalisieren. Um die Änderungen “dauerhaft” zu machen, könntest du die Sprachdateien an den Plugin-Autor senden, in der Hoffnung, dass er deine Nachricht bemerkt und die Dateien in das nächste Plugin-Update aufnimmt. Meistens musst du sie per E-Mail versenden, da es kein öffentliches GitHub-Repository gibt, in dem du einen PR machen könntest. Und wenn der Autor vergisst, deine Übersetzungsdateien aufzunehmen, verlieren du deine gesamte Arbeit. Insgesamt ist dieser Prozess sehr fehleranfällig und mühsam.

Es muss einen besseren Weg geben – und zum Glück gibt es einen: Loco Translate hilft wieder einmal! Zusätzlich zur Lokalisierung privater Packages kann das Plugin Übersetzungen von (kostenpflichtigen) Plugins “dauerhaft” hinzufügen oder ändern. Es funktioniert (einfach ausgedrückt), indem ein Verzeichnis names loco/ im Standardordner der WordPress-Sprachdateien (wp-content/languages/) hinzufügt wird. Dann lädt es zusätzlich Übersetzungen aus diesem Ordner.

Das ist genau das, was du brauchst. Wenn du dem offiziellen Tutorial für individuelle Übersetzungen folgst, erstellt Loco Translate eine Kopie der vorhandenen Sprachdateien (oder erstellt eine neue Sprache) und speichert sie im genannten Ordner. Auf diese Weise verlierst du deine benutzerdefinierten Übersetzungen nicht, wenn das Plugin aktualisiert wird. Dieser Ansatz hat jedoch einen Nachteil: Standardmäßig ignorieren Composer-basierte WordPress Projekte alles in wp-content/. Das bedeutet, dass du den Ordner nun manuell zum Hauptprojekt-Repository hinzufügen müssen, was den VCS-Verlauf ziemlich “vollstopft”. Du könntest für den Ordner einen Symlink erstellen, aber das kann zeitaufwendig werden.

VorteileNachteile
Schnelle und einfache Korrektur bestehender Übersetzungen kostenpflichtiger PackagesDu musst immer noch Übersetzungen an den Plugin-Autor senden, wenn du es richtig machen willst
Update-sicherÄnderungen von Übersetzungen "stopfen" den VCS-Verlauf voll
Das Plugin muss aktiviert sein, damit benutzerdefinierte Übersetzungen funktionieren

4. Traduttore – Das agenturweite GlotPress für private Packages

Traduttore (italienisch für “Übersetzer”) ist “der Neue”. Es wurde 2017 veröffentlicht und ist “ein WordPress-Plugin, mit dem du deine eigene WordPress.org-ähnliche Übersetzungs-API für deine WordPress-Projekte hosten kannst”. Einfach ausgedrückt, ist es ein selbstgehostete GlotPress, das alle Vorteile des “offiziellen” GlotPress für deine privaten Packages bereitstellt. Denke darüber nach: Alle Vorteile von GlotPress und die Benutzerfreundlichkeit von Loco Translate kombiniert für den ultimativen Übersetzungsworkflow!

Da Traduttore ein WordPress-Plugin ist, das in einer Standard-WordPress-Installation läuft, kannst du sogar deinen Kunden die Übersetzung ihrer String überlassen. Vorbei sind die Zeiten, in denen Entwickler Strings per E-Mail oder in einem Ticket an den Kunden senden und Übersetzungen manuell eingeben mussten.

Traduttore erfordert einen gewissen Anfangsaufwand bei der Einrichtung. Zusätzlich zum Hosting des Plugins selbst musst du auch deinen Übersetzungs-API-Endpunkt in jedem Paket “registrieren”, das du übersetzen möchtest. Um diesen Beitrag kurz zu halten, werden wir nicht die Schritte beschreiben, die notwendig sind, um loszulegen, zumal es bereits eine großartige offizielle Dokumentation gibt.

VorteileNachteile
Keine manuelle Pflege/Aktualisierung/Verteilung von Sprachdateien erforderlichKeine Versionierung
Saubere VCS, keine “Übersetungs-Commits”Keine Composer-Unterstützung
Jeder, der Zugriff auf das WordPress hat, in dem Traduttore läuft, kann an der Übersetzung teilnehmen, auch parallel, und sogar Kunden.

5. PoEdit – Der alte Workflow

Zu schlechter Letzt gibt es noch PoEdit, eine eigenständige App, die für alle Betriebssysteme verfügbar ist. Während sie sicherlich für allgemeine Lokalisierungsaufgaben nützlich ist, ist die Übersetzung von WordPress-spezifischen Packages umständlich und ein sehr manueller Prozess. Du musst nicht nur eine App installiert haben (und aktualisiert halten), sondern benötigst auch die Pro-Version für WordPress-Unterstützung.

Nachdem du es installiert hast, funktioniert es sehr ähnlich wie GlotPress und Loco Translate: Es scannt (PHP-)Quellcode-Dateien und bietet eine Oberfläche, um die Strings einzeln zu übersetzen.

Im Vergleich zu anderen in diesem Beitrag genannten Tools gibt es einen zusätzlichen Schritt, wenn du mit dem Übersetzen fertig bist. Du musst die Sprachdateien richtig benennen und an der richtigen Stelle speichern. Da die Namenskonvention bei Plugins und Themes unterschiedlich ist, kann es leicht zu Verwechslungen kommen ({package}-{locale}.mo für Plugins und {locale}.mo für Themes).

Kurz gesagt: Verwende PoEdit nur, wenn du dein Package nicht im WordPress-Repository veröffentlichst. Und du kannst es auch nutzen, wenn du Loco Translate aus irgendeinem Grund nicht lokal installieren/nutzen kannst.

VorteileNachteile
Online Übersetzungsvorschläge, Crowd-basiertManuelle Benennung und Verteilung von Sprachdateien
Maschinelle ÜbersetzungÄnderungen von Übersetzungen "stopfen" den VCS-Verlauf voll
Nicht web-basiert, kostenpflichtige App notwendig

Zusammenfassung

In diesem Beitrag haben wir 5 Möglichkeiten und 4 Tools aufgelistet, die dir helfen, deinen Code oder Code von anderen zu lokalisieren. Abhängig von deinem Arbeitsablauf hast du nun eine gute Grundlage, um zu entscheiden, welches Werkzeug für dich das beste ist.

Bei Inpsyde glauben wir, dass Traduttore der richtige Weg für eine professionelle WordPress-Entwicklung auf Agenur-Level ist.

Kennst du andere Möglichkeiten, um WordPress-Packages zu übersetzen? Was denkst du über Traduttore? Findest du auch, dass es das beste Werkzeug für Kunden-Packages ist? Oder bist du mit unserer Bewertung nicht einverstanden? Zögere nicht, einen Kommentar zu hinterlassen!

Antwort abgeben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.