WordPress Internationalisierung: Wie man WordPress Themes und Plugins übersetzt

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.pot

WP-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
  • .mo Dateien, kompiliert und versandfertig
  • .json Dateien für Ihre JavaScript-Strings
  • .l10n.php Dateien 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.

Übersetzungsausgaben für POT-Dateien

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.mo

Innerhalb 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.mo

Beachten 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.

Funktion „Paste to Translate“

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

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


Nach oben scrollen