Erfahren Sie alle Schritte zur Internationalisierung Ihres WordPress-Themes oder -Plugins, damit es für die Übersetzung in jede beliebige Sprache bereit ist.
Dieser Leitfaden richtet sich an Entwickler, die den Code schreiben. Wenn Sie bereits eine POT- oder PO-Datei haben und diese nur übersetzen müssen, können Sie dies in 3 einfachen Schritten mit PTC erledigen.
Was ist WordPress-Internationalisierung?
Internationalisierung (i18n) ist der Prozess der Vorbereitung Ihres Codes, damit dieser übersetzt werden kann. Es ist nicht der Prozess der Übersetzung selbst. Lokalisierung (l10n) ist der darauffolgende Schritt, bei dem Zeichenfolgen tatsächlich in spezifische Sprachen übersetzt werden.
Für WordPress-Themes und -Plugins bedeutet i18n:
- Einschließen aller benutzerseitigen Zeichenfolgen in gettext-Funktionen, damit WordPress diese austauschen kann
- Definieren einer Textdomain, die Ihre Übersetzungen mit Ihrem Projekt verknüpft
- Erzeugen einer POT-Datei, mit der Übersetzer (oder PTC) arbeiten können
Sobald dies erledigt ist, haben Sie alles, was Sie benötigen, um übersetzte PO-, MO- und JSON-Dateien für jede Sprache zu erstellen.
Vorbereitung Ihres WordPress-Themes oder -Plugins für die Übersetzung
Bevor Sie etwas übersetzen können, müssen Sie Ihren Code korrekt einrichten. Das bedeutet, eine Textdomain zu definieren, alle benutzerseitigen Zeichenfolgen in gettext-Funktionen einzuschließen und eine POT-Datei zu generieren.
Nichts davon ist kompliziert, aber die Details zählen. Eine nicht übereinstimmende Textdomain oder eine nicht eingeschlossene Zeichenfolge bedeutet, dass dieser Text niemals in Ihrer übersetzten Ausgabe erscheinen wird.
Schritt 1
Definieren Sie Ihre Textdomain und Ihren Domain-Pfad
Jedes Theme oder Plugin benötigt eine Textdomain. Es handelt sich um eine eindeutige Kennung, die WordPress mitteilt, welche Übersetzungsdateien zu Ihrem Projekt gehören, und sie sollte exakt mit Ihrem Plugin- oder Theme-Slug übereinstimmen.
Deklarieren Sie diese im Header der Hauptdatei Ihres Plugins:
/**
* Plugin Name: My Plugin
* Text Domain: my-plugin
* Domain Path: /languages
*/
Oder in der style.css Ihres Themes:
/*
Theme Name: My Theme
Text Domain: my-theme
Domain Path: /languages
*/
Der Domain-Pfad teilt WordPress mit, wo sich Ihre Übersetzungs Dateien relativ zum Plugin- oder Theme-Verzeichnis befinden. Das Verzeichnis /languages ist der Standard.
Schritt 2
Schließen Sie Ihre PHP-Strings in Gettext-Funktionen ein
Jede Zeichenfolge, die Sie übersetzbar machen möchten, muss in eine der gettext-Funktionen von WordPress eingeschlossen werden. Zur Laufzeit suchen diese Funktionen nach der korrekten Übersetzung und greifen auf die ursprüngliche Zeichenfolge zurück, falls keine Übersetzung gefunden wird.
Einfache Zeichenfolgen
Verwenden Sie __(), wenn Sie eine Zeichenfolge zurückgeben müssen. Für die HTML-Ausgabe (was fast immer der Fall ist), verwenden Sie die escaped Varianten:
// Return a translated string
$label = __( 'Settings', 'my-plugin' );
// Echo a translated string, escaped for HTML
echo esc_html__( 'Settings saved.', 'my-plugin' );Die WordPress-Codierungsstandards empfehlen echo esc_html__() gegenüber _e(), da es das Escaping der Ausgabe explizit macht. Es ist eine gute Angewohnheit, dies konsequent anzuwenden.
Zeichenfolgen mit Variablen
Wenn Sie eine Variable direkt in einen String verketten, sehen Übersetzer nur die Fragmente, nicht den vollständigen Satz. Das macht eine korrekte Übersetzung unmöglich, insbesondere in Sprachen mit abweichender Wortstellung. Verwenden Sie stattdessen printf() oder sprintf() mit einem Placeholder und fügen Sie einen Übersetzerkommentar hinzu, damit diese wissen, was %s darstellt:
printf(
/* translators: %s: the user's display name */
esc_html__( 'Welcome back, %s.', 'my-plugin' ),
esc_html( $display_name )
);Pluralformen
Im Englischen sind Pluralformen einfach: one comment, two comments. Andere Sprachen sind da nicht so unkompliziert. Einige haben je nach Zahl mehrere Pluralformen. Verwenden Sie _n(), um dies korrekt zu handhaben, egal in welche Sprache Ihr Plugin übersetzt wird:
printf(
esc_html( _n(
'%s comment',
'%s comments',
$count,
'my-plugin'
) ),
number_format_i18n( $count )
);Zeichenfolgen, die Kontext benötigen
Manche Wörter haben je nach Einsatzort unterschiedliche Bedeutungen. Verwenden Sie _x(), um Übersetzern den Kontext zu geben, den sie für eine korrekte Übersetzung benötigen:
// "Export" as a noun (the file) vs. a verb (the action)
echo esc_html_x( 'Export', 'button label', 'my-plugin' );Schritt 3
Internationalisieren Sie Ihre JavaScript-Strings
WordPress stellt das Paket wp-i18n zur Verfügung, damit Sie in JavaScript dieselben gettext-Funktionen wie in PHP verwenden können. Deklarieren Sie bei der Registrierung Ihres Skripts wp-i18n als Abhängigkeit:
wp_register_script(
'my-plugin-script',
plugins_url( 'js/app.js', __FILE__ ),
array( 'wp-i18n' ),
'1.0.0',
true
);Dann in Ihrer JavaScript-Datei:
const { __, _n, sprintf } = wp.i18n;
const message = __( 'Settings saved.', 'my-plugin' );Wenn Sie einen Bundler wie Webpack verwenden, nutzen Sie @wordpress/babel-plugin-makepot, um übersetzbare Zeichenfolgen als Teil Ihres Build-Prozesses aus Ihrem Bundle zu extrahieren.
Schritt 4
Generieren Sie Ihre POT-Datei
Sobald Sie Ihre Zeichenfolgen eingeschlossen haben, müssen Sie eine POT-Datei (Portable Object Template) generieren. Dies ist die Quelldatei, mit der PTC (oder jeder Übersetzer) arbeitet. Sie enthält alle Ihre übersetzbaren Zeichenfolgen, aber noch keine Übersetzungen.
Führen Sie diesen Befehl im Stammverzeichnis Ihres Plugins oder Themes aus:
wp i18n make-pot . languages/my-plugin.potWP-CLI scannt Ihre PHP-, JavaScript- und block.json-Dateien nach gettext-Aufrufen und kompiliert diese in eine einzige POT-Datei. Wenn Sie Composer verwenden, können Sie dies als Composer-Skript hinzufügen, damit der Befehl innerhalb Ihres Teams konsistent bleibt und keine globale WP-CLI-Installation erfordert.
Die vollständige wp i18n-Suite enthält alles Weitere, was Sie später im Workflow benötigen:
| Befehl | Funktion |
|---|---|
wp i18n make-pot |
Erzeugt eine POT-Datei aus der Quelle |
wp i18n update-po |
Synchronisiert bestehende PO-Dateien, wenn sich Ihre POT ändert |
wp i18n make-mo |
Kompiliert PO-Dateien in binäre MO-Dateien |
wp i18n make-json |
Extrahiert JS-Strings aus PO in JSON-Dateien |
wp i18n make-php |
Erzeugt l10n.php-Dateien (WordPress 6.5+) |
Übersetzen von POT-Dateien mit PTC
PTC ist eine Übersetzungsplattform, die speziell für WordPress-Entwickler entwickelt wurde. Sie beginnen mit einer POT-Datei und erhalten produktionsreife Übersetzungsdateien zurück, ohne manuelle Konvertierung Ihrerseits.
Wenn Sie PTC noch nicht genutzt haben, können Sie sich für eine kostenlose 30-tägige Testversion anmelden. Ihr erstes Projekt umfasst bis zu 20.000 Wörter in zwei Sprachen, sodass Sie ein echtes Plugin oder Theme übersetzen können, bevor Sie sich festlegen.
1
Einrichten Ihres ersten Übersetzungsprojekts
Um zu beginnen, laden Sie Ihre POT-Datei hoch und wählen Sie aus, welche Ausgabeformate Sie benötigen. PTC kann jede Kombination aus folgenden Formaten liefern:
- .
po-Dateien für jede Zielsprache .moDateien, kompiliert und versandfertig.jsonDateien für Ihre JavaScript-Strings.l10n.phpDateien für schnelleres Laden unter WordPress 6.5 und neuer
Es lohnt sich, das .l10n.php-Format für neue Projekte zu aktivieren. WordPress lädt es automatisch anstelle der MO-Datei, wenn beide vorhanden sind, und es ist schneller sowie speicherschonender.

Der Einrichtungs-Assistent bittet Sie außerdem, Ihr Theme oder Plugin zu beschreiben, damit PTC Übersetzungen mit dem richtigen Tonfall und Kontext für Ihr spezifisches Produkt generieren kann. In dieser Phase können Sie auch markenspezifische Begriffe zum Glossar hinzufügen, was sicherstellt, dass Namen, Funktionen und jegliche Terminologie konsistent in alle Sprachen übersetzt werden.
In der Anleitung für die ersten Schritte finden Sie einen vollständigen Durchgang dieser Schritte.
2
Umstieg auf kontinuierliche Lokalisierung
Sobald Ihre ersten Dateien übersetzt sind, können Sie PTC mit Ihrem GitHub-, GitLab– oder Bitbucket-Repository verbinden. Alternativ können Sie die Lokalisierung über die API in Ihre CI/CD-Pipeline integrieren.
Ab diesem Zeitpunkt müssen Sie Dateien nicht mehr manuell hochladen. Wenn sich Ihre POT-Datei ändert, erkennt PTC die neuen und aktualisierten Zeichenfolgen und liefert die übersetzten Dateien zurück: per Merge-Request für Git oder direkt über die API. Ihre Übersetzungen bleiben bei jedem Release mit Ihrem Code synchron.
Laden von Übersetzungen in WordPress
Sobald Sie Ihre übersetzten Dateien haben, müssen Sie diese am richtigen Ort platzieren und WordPress mitteilen, wo sie zu finden sind.
Bevor Sie eines von beidem tun, stellen Sie sicher, dass Ihre Dateinamen korrekt sind. WordPress sucht nach Übersetzungsdateien nach einem bestimmten Benennungsmuster, und ein Dateiname, der nicht übereinstimmt, führt dazu, dass die Datei schlichtweg nicht geladen wird.
Die richtigen Dateinamen wählen
Locale-Codes folgen dem language_COUNTRY Format: de_DE für Deutsch (Deutschland), fr_FR für Französisch (Frankreich), pt_BR für Portugiesisch (Brasilien). Die vollständige Liste der WordPress-Locale-Codes finden Sie auf translate.wordpress.org.
Der erwartete Dateiname hängt davon ab, wo Sie die Datei platzieren.
Innerhalb des /languages/-Ordners Ihres Plugins:
{text-domain}-{locale}.mo
my-plugin-de_DE.moInnerhalb des /languages/-Ordners Ihres Themes:
{locale}.mo
de_DE.mo
Im globalen WordPress-Sprachverzeichnis (/wp-content/languages/):
{text-domain}-{locale}.mo
my-plugin-de_DE.moBeachten Sie, dass Themes eine kürzere Benennungskonvention verwenden, wenn Dateien innerhalb des Themes selbst gebündelt sind. Wenn Sie Dateien im globalen Sprachverzeichnis ablegen, verwenden sowohl Plugins als auch Themes das Muster {text-domain}-{locale}.
Laden von Übersetzungen für Plugins (PHP)
Nachdem Ihre Übersetzungsdateien platziert sind, müssen Sie diese bei WordPress registrieren, damit das System weiß, welche Dateien zu Ihrem Plugin gehören und wo sie zu finden sind. Verwenden Sie load_plugin_textdomain(), eingehängt in init. Verwenden Sie nicht plugins_loaded. Dies löst in aktuellen WordPress-Versionen eine Deprecation-Warnung aus.
add_action( 'init', function () {
load_plugin_textdomain(
'my-plugin',
false,
dirname( plugin_basename( __FILE__ ) ) . '/languages/'
);
} );Laden von Übersetzungen für Themes (PHP)
Verwenden Sie für Themes load_theme_textdomain(), eingehängt in after_setup_theme. Dieser Hook wird während der Theme-Initialisierung ausgelöst, was der richtige Zeitpunkt für WordPress ist, um Ihre Übersetzungsdateien zu laden.
add_action( 'init', function () {
wp_set_script_translations(
'my-plugin-script',
'my-plugin',
plugin_dir_path( __FILE__ ) . 'languages'
);
} );
Übersetzen Ihrer README und Ihres WordPress.org-Eintrags
Ihre readme.txt ist keine Ressourcendatei, daher wird WP-CLI sie beim Generieren einer POT-Datei nicht erfassen. Um sie zu übersetzen, nutzen Sie die Funktion Paste to Translate von PTC: Fügen Sie den Inhalt ein, wählen Sie Ihre Zielsprachen und laden Sie das Ergebnis herunter.

Wenn Ihr Plugin oder Theme auf WordPress.org gelistet ist, erscheint die übersetzte Beschreibung auf dem Tab Details des Plugins in der Sprache des Nutzers. Um Ihre Übersetzungen dort live zu schalten, folgen Sie dem WordPress.org-Importprozess.
Häufig gestellte Fragen
Was ist der Unterschied zwischen POT-, PO-, MO- und l10n.php-Dateien?
Sie sind alle Teil derselben Übersetzungspipeline und dienen jeweils einem anderen Zweck:
- Eine POT-Datei (Portable Object Template) ist die Quelldatei, die Sie aus Ihrem Code generieren. Sie enthält alle Ihre übersetzbaren Zeichenfolgen in ihrer Originalsprache, aber keine Übersetzungen. Dies ist die Datei, die Sie an PTC übergeben.
- Eine PO-Datei (Portable Object) ist eine Kopie Ihrer POT-Datei, der Übersetzungen für eine bestimmte Sprache hinzugefügt wurden. Sie ist menschenlesbar, sodass Übersetzer direkt damit arbeiten können.
- Eine MO-Datei (Machine Object) ist eine kompilierte binäre Version einer PO-Datei. WordPress verwendet diese, um Übersetzungen in PHP zu laden, da sie schneller zu lesen ist als das reine Textformat der PO-Datei.
- JSON-Dateien dienen demselben Zweck wie MO-Dateien, jedoch für JavaScript-Strings. WordPress kann MO-Dateien nicht für JavaScript verwenden, daher werden Ihre JS-Übersetzungen extrahiert und separat im JSON-Format gespeichert.
- Eine l10n.php-Datei ist eine neuere Alternative zu MO-Dateien, die in WordPress 6.5 eingeführt wurde. Sie lädt schneller und verbraucht weniger Speicher; WordPress verwendet sie automatisch, wenn sie neben der MO-Datei verfügbar ist.
Kann ich mich auf die WordPress-Übersetzungs-Community verlassen, anstatt ein Übersetzungstool zu verwenden?
In den meisten Fällen nein. Die Community-Übersetzung auf WordPress.org basiert auf Freiwilligenarbeit. In der Praxis bedeutet dies, dass nur eine kleine Anzahl weit verbreiteter Plugins vollständige Übersetzungen in die wichtigsten europäischen Sprachen besitzt. Die meisten Plugins haben unvollständige Übersetzungen, und für weniger verbreitete Locales haben viele gar keine.
Wenn Sie möchten, dass Ihre Nutzer vom ersten Tag an ein vollständig übersetztes Erlebnis haben, ist das Warten auf die Community keine realistische Strategie. Übersetzungen können Monate oder Jahre dauern, falls sie überhaupt erscheinen. Die Verwendung eines Tools wie PTC bedeutet, dass Sie vollständige Übersetzungen zusammen mit Ihrer Quellsprache nach Ihrem eigenen Zeitplan ausliefern, ohne von Freiwilligen abhängig zu sein.
Eine Analyse von über 60.000 WordPress-Plugins und -Themes bestätigt dies: Die Community-Übersetzung deckt weniger als 5 % des Übersetzungsbedarfs in 40 Sprachen ab.
Wenn ich PTC verwende, brauche ich dann Poedit?
Nein. Alles in diesem Leitfaden funktioniert mit WP-CLI und PTC. WP-CLI generiert Ihre POT-Datei und kann bei Bedarf MO- und JSON-Dateien kompilieren. PTC übernimmt die Übersetzung und liefert alle Dateiformate zurück, die WordPress benötigt. Poedit ist ein nützlicher Desktop-Editor, wenn Sie lieber manuell übersetzen möchten, aber er ist nicht Teil dieses Workflows.
Muss ich etwas anders machen, damit mein Theme/Plugin RTL-Sprachen unterstützt?
Der Übersetzungsworkflow ist derselbe. Rechts-nach-links-Sprachen (RTL) verwenden dieselbe POT/PO/MO-Pipeline wie jede andere Sprache. Der zusätzliche Schritt besteht darin, sicherzustellen, dass Ihr Theme RTL-Styles unterstützt. WordPress lädt automatisch eine rtl.css-Datei, falls diese in Ihrem Theme-Verzeichnis existiert, und Sie können die Funktion is_rtl() verwenden, um bedingt RTL-spezifische Styles oder Skripte anzuwenden.
Wie stelle ich sicher, dass Daten und Zahlen für jedes Locale korrekt angezeigt werden?
Wenn Ihr Plugin oder Theme Daten oder Zahlen anzeigt, verwenden Sie die integrierten Formatierungsfunktionen von WordPress anstelle der nativen PHP-Funktionen. date_i18n() formatiert Daten entsprechend dem aktiven Locale, und number_format_i18n() übernimmt die Locale-bewusste Zahlenformatierung. Diese sind nicht Teil des Workflows der Übersetzungsdatei, aber sie sind wichtig für ein vollständig lokalisiertes Erlebnis.
Warum werden in meinem Theme oder Plugin keine Übersetzungen angezeigt?
Die häufigste Ursache ist eine nicht übereinstimmende Textdomain. Ihr Code, Ihre Dateinamen und Ihr load_plugin_textdomain()-Aufruf müssen alle exakt dieselbe Zeichenfolge verwenden. Community-Übersetzungen von WordPress.org können zudem Ihre mitgelieferten Dateien stillschweigend überschreiben. Weitere Informationen finden Sie im vollständigen Leitfaden zur Fehlerbehebung für spezifische Szenarien und Lösungen.

Bereit, vollständig übersetzte WordPress-Themes und -Plugins auszuliefern?
Melden Sie sich für eine kostenlose 30-tägige Testversion an und übersetzen Sie Ihr erstes Projekt in zwei Sprachen – bis zu 20.000 Wörter – völlig kostenlos.


Themes und Plugins mit PTC übersetzen
Erhalten Sie in wenigen Minuten präzise Übersetzungen
Laden Sie einzelne Dateien hoch oder automatisieren Sie den Vorgang über API- oder Git-Integration