WordPress Plugin Header übersetzen

Unter Internationalisierung versteht man das Vorhaben, ein Plugin so vorzubereiten, dass es ohne größeren Aufwand in jede beliebige Sprache übersetzt werden kann. Als Standard definiert WordPress en_US. Das bedeutet: Alle Plugins sollten „in englisch“ programmiert und erst später in andere Sprachen übersetzt werden.
Schön ist, dass WordPress bereits viele Übersetzungsfunktionen mit an Board hat. Es ist also nicht sonderlich schwer, ein Plugin zu internationalisieren.
Als Programmierer müssen Sie lediglich einige Funktionen kennen, die Sie dann während der Programmierung sofort mit umsetzen können. Im Grunde gibt es zwei Möglichkeiten, eine Sprachdatei zu laden. Aber nur eine erlaubt auch die Übersetzung der Texte im Plugin-Header.

[toc]

Laden von Sprachdateien

Gehen wir davon aus, dass unser Plugin im Verzeichnis wpbuddy des Ordners /wp-content/plugins/ liegt.

Möglichkeit A) mit load_plugin_textdomain()

load_plugin_textdomain() wendet man z.B. in seiner eigenen Plugin-Datei wie folgt an:

<?php
load_plugin_textdomain( 'wpbuddy', false, dirname( __FILE__ ) . '/langs/' );
?>

Dabei wird davon ausgegangen, dass die Sprachdatei im Unterverzeichnis langs liegt. Also konkret im Verzeichnis /wp-content/plugins/wpbuddy/langs/.

Ist die aktuell gewählte Sprache de_DE, so sucht die Funktion im oben genannten Verzeichnis nach der Datei wpbuddy-de_DE.mo. Wenn sie gefunden wird, wird sie geladen.

Möglichkeit B) Laden “im Kopfbereich”

Ein Kopfbereich einer Plugin-Datei beinhaltet alle wichtigen Daten. Zumindest aber den Plugin-Namen. Er könnte z.B. wie folgt aussehen:

<?php
/*
Plugin Name: WP-Buddy ABC Test
Description: This is a ABC Plugin.
Author: WP-Buddy
*/
?>

Nun gibt es zusätzlich aber noch folgende Paramter, die Sie im Kopfbereich anhängen können:

Text Domain: wpbuddy
Domain Path: /langs/

Der gesamte Kopfbereich würde dann also so aussehen:

<?php
/*
Plugin Name: WP-Buddy ABC Test
Description: This is a ABC Plugin.
Author: WP-Buddy
Text Domain: wpbuddy
Domain Path: /langs/
*/
?>

Im übertragenen Sinne also:

WP-Plugin Header und load_plugin_textdomain()
Die Angabe der Text Domain und des Domain Path ersetzt die Funktion load_plugin_textdomain() komplett.

Die Angabe im Plugin-Header ersetzt den Aufruf von load_plugin_textdomain(). Jedoch nur im Backend-Bereich (siehe Laden der Sprachdatei im Frontend). Die Funktion wird stattdessen von WordPress intern aufgerufen (und zwar in der Funkion _get_plugin_data_markup_translate() der Datei /wp-admin/includes/plugin.php – ab Zeile 115).

WordPress Plugin Header übersetzen

Die selbe Funktion ( _get_plugin_data_markup_translate()) übernimmt auch sofort die Übersetzung des Plugin-Headers. Dazu sucht Gettext den Übersetzungsstring und übersetzt ihn.

In der .po Datei muss man dann lediglich 4 Zeilen zusätzlich hinzufügen:

msgid "This is a ABC Plugin."
msgstr "Dies ist ein ABC Plugin."

msgid "WP-Buddy ABC Test"
msgstr "WP-Buddy ABC Test"

Mit Programmen wie PoEdit kann man die .po-Datei dann in eine .mo-Datei umwandeln, die dann wiederum von WordPress ausgelesen werden kann.

Welche Header übersetzt werden können

Derzeit können folgende Header-Parameter übersetzt werden:

  • Name
  • Plugin URI (d.h. man kann für jede Sprache eine andere Landingpage auswählen)
  • Description
  • Author
  • Author URI (d.h. man kann für jede Sprache ein andere Landingpage auswählen)
  • Version

Laden der Sprachdatei im Frontend

Achtung: Möglichkeit B) funktioniert nur im Backend-Bereich von WordPress. Werden Übersetzungen auch im Frontend benötigt, muss nach wie vor die Funktion load_plugin_textdomain() aufgerufen werden:

<?php
if ( ! is_admin() ) {
	load_plugin_textdomain( 'mm', false, dirname( plugin_basename( __FILE__ ) ) . '/langs/' );
}
?>

 

Schreiben Sie einen Kommentar