Adventskalender Tag 20 – Wie bringe ich einem WordPress-Theme Sprachen bei?

Adventskalender Tag 20 – Wie bringe ich einem WordPress-Theme Sprachen bei? 1

In diesem Beitrag möchte ich aufzeigen, wie ein WordPress Theme auch international genutzt werden kann. Besonders im Hinblick auf mehrsprachige Webseiten, macht es Sinn das eigene Theme in mehreren Sprachen zu übersetzen.

In meinen Schulungen kommt häufig die Frage auf, wie man bestehende Themes oder auch wie man selbsterstellte WordPress Themes für die Lokalisierung vorbereitet. WordPress bietet uns optimale Bedingungen Themes zu übersetzen, ohne das man für jede weitere Sprache noch mal an den Quellcode ran muss.

Überblick der Schritte

  • Laden der Textdomain
  • Textbausteine in WordPress-Funktionen
  • Sprachdateien erstellen
  • Übersetzen
  • Testen

Laden der Textdomain

Zuerst müssen wir WordPress mitteilen, dass unser Theme übersetzbar ist.

Wir fügen folgendes in die functions.php ein:
load_theme_textdomain('mp_theme_textdomain', get_template_directory() . '/languages');

„mp_theme_textdomain“ ist hier unsere Textdomain, die einzigartig sein sollte. Am besten eignet sich hier der Theme-Name als Identifikator. Das zweite Argument in der Funktion definiert den Ordner, wo die Sprachdateien abgelegt werden. Damit die Textdomain auch für das Theme geladen wird, müssen wir diese in der Setup-Funktion aufrufen.

add_action('after_setup_theme', 'marketpress_theme_setup');
function marketpress_theme_setup(){
    load_theme_textdomain('mp_theme_textdomain', get_template_directory() . '/languages');
}

„marketpress_theme_setup“ ist hier exemplarisch für die Setup-Funktion. Bei einem bestehenden Theme, kann die Bezeichnung abweichen.

Textbausteine in WordPress-Funktionen

Als nächsten Schritt definieren wir die Textbausteine, die WordPress dann später laden soll. Außerhalb von PHP Funktionen nutzen wir _e($text_message); und innerhalb von PHP Funktionen __(&text_message);. Findet WordPress keine Übersetzung für $text_message wird der Original Textbaustein ausgegeben.

echo 'Hello user';

wird zu

 _e('Hello user','mp_theme_textdomain');

Die zweite Variante findet Verwendung innerhalb von Funktionen.

the_content( 'Read more' );

wird zu

the_content( __('Read more','mp_theme_textdomain') );

Manchmal enthalten Textbausteine dynamische Daten wie bspw. eine Ziffer oder Begriffe. In diesem Fall bedienen wir uns der sprintf PHP Funktion um die endgültige Ausgabe des Textbausteins zu steuern.

$results_found = 12;
$message = sprintf( __('%s results found' , 'mp_theme_textdomain') , $results_found );

Singular und Plural

WordPress ermöglicht uns auch Textbausteine in Einzahl oder Mehrzahl auszugeben. Dies ist häufig erforderlich, wenn Ergebnisse ausgegeben werden wie beispielsweise bei Suchergebnissen.

if($results_found == 1)
    $message = __('1 result found' , 'mp_theme_textdomain');
else
    $message = sprintf( __('%s results found' , 'mp_theme_textdomain') , $results_found );

Sprachdateien erstellen

Damit WordPress weiß, welcher Textbaustein wie übersetzt dargestellt werden soll, müssen wir eine Liste erstellen. Es gibt drei Dateiformen.

  • Die .POT Datei enthält alle übersetzbare Textbausteine
  • Die .PO Datei enthält alle übersetzbare und übersetzte Textbausteine
  • Die .MO Datei ist eine binäre Datei mit gleichem Inhalt wie die .po, die nur von WordPress gelesen werden kann

Als ersten Schritt erstellen wir die Katalog-Datei .POT mit dem Programm Poedit.

1. Öffne Poedit und erstelle einen neuen Katalog

2. Fülle die Informationen zum Übersetzungsprojekt aus

3. Im Tab „Pfade“ wird dem Programm aufgezeigt, wo gesucht werden soll. Diese Ordner verhalten sich relativ zum Ordner /languages/ innerhalb des Theme-Ordners

4. Im Tab „Schlüsselworte“ geben wir die Funktionsaufrufe __ und _e ohne Klammern ein.

5. lassen wir Poedit nach den definierten Textbausteinen suchen und erhalten eine Liste, die wir dann übersetzen können.

6. Die .pot Datei wird dem Theme-Namen entsprechend im Ordner /mytheme/languages/ gespeichert.

Diese Datei wird zwar nicht von WordPress benötigt, dient aber als Katalog für weitere Übersetzungen.

Übersetzen

Jetzt geht es ans fröhliche Übersetzen. Sobald alle Textbausteine übersetzt sind, müssen wir das als de_DE.po im Ordner /languages/ im Theme-Ordner abspeichern. Poedit generiert automatisch eine .mo Datei, die von WordPress benötigt wird.

Testen

Sobald die Sprachdateien im Theme-Ordner abgelegt wurden, können wir das im Frontend testen. Sofern in der wp-config.php auch die Sprache mit de_DE definiert wurde.

Zusammenfassung

Wir haben nun mit einfachen Schritten unser Theme für die Lokalisierung vorbereitet. Dies bringt einen deutlichen Mehrwert für das eigene Projekt, sowie für andere WordPress Nutzer, die dein Theme gerne nutzen möchten.

Nachtrag
Torsten hat in seinem Kommentar noch die Slides von Samuel „Otto“ Wood als weitere Referenzquelle empfohlen. Für alle, die sich ausführlich mit der Thematik beschäftigen möchten.

Newsletter abonnieren

Das könnte dich auch interessieren

WooCommerce-Bestellwert erhöhen

Die Umsätze in WooCommerce erhöhen, ohne mehr Pakete zu versenden? Ist das Zauberei? Nein, das geht ganz ohne Hokuspokus – und zwar mit der Erhöhung d ...

Mehr erfahren

WooCommerce SEO - Produktbilder und Produktgalerie

Im letzten WooCommerce SEO Beitrag hier im MarketPress-Blog ging es um Produktseiten, Produktbeschreibungen und Produktkategorien. Heute sind die Produktbi ...

Mehr erfahren

WooCommerce SEO - Produktseiten, Produktbeschreibungen & Produktkategorien

Mit der Suchmaschinenoptimierung für WooCommerce kann man gar nicht früh genug anfangen. Startvorteile im Rennen um die besten Plätze sichert sich, wer ...

Mehr erfahren

Kommentare

6 Kommentare

  1. Sehr schöne Einführung, Birgit!

    Wer danach noch mehr wissen möchte, dem empfehle ich die Slides von Sam ‘Otto’ Wood vom WordCamp Europe zum Weiterlesen:
    http://wceu2013.ottopress.com

  2. Danke dir Torsten 🙂

    Ja, die Slides von Samuel sind wirklich eine gute Ergänzung.

  3. Danke Birgit, das versteht selbst der größte DAU! 🙂

    PS: Da ist ein kleiner Verwechsel im Text. Der Satz muss so lauten:
    “Außerhalb von PHP Funktionen nutzen wir _e($text_message); und innerhalb von PHP Funktionen __(&text_message);.”

  4. Singular und Plural

    Hierfür bietet der Core noch weitere nützliche Funktionen an: _n( $single, $plural, $number, $domain )

    Auf das Beispiel angewendet:

    _n( '1 result found', '%d results found', $results_found, 'mp_theme_textdomain' );
    
  5. @Heiko: danke für den Hinweis. Ist geändert.

    @Dominik: genau für solche Abkürzungen liebe ich WordPress. 🙂

  6. Hallo! Ich habe ein benutzerfreundliche, webbasierte Lokalisierungstool um WordPress Themen zu übersetzen gefunden – https://poeditor.com/ Es gibt sogar ein Plugin, das integriert die POEditor API in Ihre WordPress – http://wordpress.org/extend/plugins/poeditor/ Ich empfehle es.

Schreibe eine Antwort an Heiko Mamerow Antwort abbrechen

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

Du kannst folgende HTML Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>