Tutorial: WordPress-Themes lokalisieren

Tutorial: WordPress-Themes lokalisieren

5. Februar 2009 in Tutorials, WordPress Funktionen 13 Kommentare

Die Lokalisierung / Übersetzung von WordPress-Themes ist eine von mir bisher sträflich wenig beachtete Funktion von WordPress. Dabei kann man mit einem relativ geringen Mehraufwand einen gehörigen Mehrwert in Sachen Interantionalisierung von Themes schaffen.

Warum lokalisieren?

Die Vorteile, den kleinen Mehraufwand bei der Erstellung eines WordPress-Themes in Kauf zu nehmen und dieses zu lokalisieren, liegen auf der Hand. Mit gesonderten Sprachdateien lässt sich das Theme unabhängig vom Quellcode, den man dafür dann nicht mehr anrühren muss, in beliebig viele Sprachen übersetzen.

Die WordPress-Installation selbst ist in Sachen Intarnationalisierung und Übersetzung schon weit gediehen und es gibt bereits unzählige Übersetzungen für den WordPress-Admin. Dann sollten wir beim Theme nicht aufhören.

WordPress verwendet GetText:

Um WordPress-Themes zu lokalisieren verwendet WordPress eine Übersetzungsanwendung namens GetText. Mit dieser Anwendung ist es relativ einfach, WordPress zusagen, was wo und womit übersetzt werden soll. Mehr dazu im Detail.

HTML-Strings übersetzbar machen:

Nehmen wir an, wir wollen in userem Theme einen Titel der Sidebar übersetzen. Dort steht im Quellcode folgendes:

<h4>Recent Articles</h4>

Um diesen HTML-String nun per GetText übersetzbar zu machen, müssen wir ihn in einen GetText-Call packen, den viele Theme-Designer von Euch sicherlich schon gesehen haben und der wie folgt aussieht:

<h4><?php _e('Recent Articles', my_theme_name); ?></h4>

Bemerkung:
Hiermit rufen wir die GetText-Funktion _e() auf und sagen ihr, was womit übersetzt werden soll und dass die Übersetzung an dieser Stelle ausgegeben werden soll (PHP: echo). Der erste Parameter in der Klammer sagt, was übersetzt werden soll und der zweite (my_theme_name) sagt WordPress, wo die Übersetzung zu finden ist (dazu später mehr),

GetText in WordPress-Funktionen:

Sicherlich sind Euch auch schon WordPress-Funktionen bekannt, in denen verschiedene Strings verarbeitet werden. Ein Beispiel ist der Aufruf der Anzahl der Kommentare:

<?php comments_number(__('No comments',my_theme_name), __('One comment',my_theme_name), __( '% comments',my_theme_name) );?>

Bemerkung:
In der Funktion comments_number() können wir drei Strings für drei mögliche Fälle übergeben (kein, 1 und x Kommentare). Wie ihr vielleicht seht, rufen wir jedoch jetzt die GetText-Funktion __() auf. Auch diese sagt WordPress was womit übersetzt werden soll, doch nun wird die Übersetzung an dieser Stelle nicht ausgegeben (PHP: kein echo), sondern kann als String von PHP weiterverarbeitet werden.

Text-Domains:

Der Name ist ein wenig irreführend. Es geht um den zweiten Parameter in den GetText-Calls (my_theme_name). Dieser ist optional und hilft WordPress die richtige Übersetzung zu finden. Es kann nämlich vorkommen, dass z. B. in einem Plugin, das wir verwenden, der gleiche String übersetzt werden soll. Mit unserer eindeutigen Text-Domain können wir klar bestimmen, welche Übersetzung gewählt werden soll. Die Text-Domain kann der Theme-Name sein, mit dem man auch den Theme-Ordner benannt hat (z. B. ‘decoder’ oder ‘my_theme_name’).

Vorbereiten und Erstellen der Sprachdatei:

Angenommen wir haben jetzt überall in unseren Theme diese zu übersetzenden Strings verteilt. Als nächstes wollen wir diese in einer Liste ausgeben, um sie weiterverarbeiten zu können.

PHP to .po extractor

PHP to .po extractor

Diese Liste, mit der wir auch die Übersetzung machen ist eine .po-Datei (Portable Object). Um nun aus den php-Dateien unseres Themes die Liste in der .po-Datei zu erstellen, gibt es PHP to .po extractor, mit denen wir einzelne Dateien aber auch Zip-Archive verarbeiten können. Dieser sucht alle Strings, die in _e() und __() Funktionen gepackt sind und gibt uns die .po-Datei zurück.

Übersetzen aller Strings in der .po-Datei:

Um .po-Dateien verarbeiten zu können, solltet Ihr Euch das Programm Poedit herunterladen. Mit diesem Programm lassen sich die Übersetzungen einfach und übersichtlich anfertigen. Beim Abspeichern unserer .po-Datei wird automatisch eine .mo-Datei erstellt, die letztlich die Sprachdatei ist, die WordPress benötigt. Die .po-Datei ist sozusagen nur die Bearabeitungsdatei.

Sprachdateien bearbeiten mit Poedit

Sprachdateien bearbeiten mit Poedit

Wichtig beim Erstellen der Sprachdateien sind noch die Sprach- und Ländercodes, mit denen wir die Sprachfiles benennen. Eine Sprachdatei für Deutsch aus Deutschland müsste also de_DE.po / de_DE.mo heißen. Für Schweizer Deutsch dementsprechend de_CH.po / de_CH.mo.

Laden der Text-Domain:

Wenn wir die .po/.mo-Dateien in unserem Theme-Ordner platziert haben, sagen wir WordPress, dass in unserem Theme eine Übersetzung geladen werden soll.

<?php load_theme_textdomain(my_theme_name); ?>

Bemerkung:
Diesen Aufruf platzieren wir am besten in der header.php, da diese bei jedem Seitenaufruf angesprochen wird.

Wenn WordPress nun das Sprachfile für die Sprache findet, die in der wp-config.php angegeben ist, wird das Theme mit allen Übersetzungen richtig angezeigt.

define ('WPLANG', 'de_DE');

// edit:

Alternative per Plugin:

Wenn einem das Installieren von Poedit und das externe Scannen der PHP-Dateien zum umständlich ist, kann man das Ganze auch WordPress-intern lösen. Das WordPress-Plugin Codestyling Localization scheint mir dafür eine starke Alternative zu sein. Ich habe es selbst noch nicht getestet, werde das aber auf jeden Fall nachholen.

Danke an sokai für den Tipp!

// end edit;

Fazit:

Die Lokalisierung von WordPress-Themes sollte für Theme-Autoren zum Standard gehören. Wenn man diese Routine einmal durchlaufen ist, hält sich der Mehraufwand tatsächlich in Grenzen und das Theme wird dem internationalen Charakter von WordPress gerecht.

Relevante Links:

, , ,

Simon [webdemar]

Moin, ich bin Simon und betreibe webdemar.com als meine ernstgemeinte Spielwiese für WordPress, Webdesign und so.

RSS abonnieren Twitter

12 Kommentare

  • FirstDayBlack
    5. Februar 2009

    Das ist ein Thema, mit dem ich mich auch in der nächsten Zeit näher beschäftigen wollte. Deshalb ist das für mich ein sehr hilfreicher Artikel.

    • Simon [webdemar]
      5. Februar 2009

      Hey Gerd,
      ich hoffe, es werden sich noch mehr Leute mit diesem Thema beschäftigen. Denn zum Teil sind nicht mal Premium Themes lokalisiert. Aber ich denke, da tut sich zur Zeit einiges.

  • FirstDayBlack
    5. Februar 2009

    Die Premium themes kommen fast alle aus Amiland und die scheren sich einen %&%$§ um andere Sprachen

  • Simon [webdemar]
    5. Februar 2009

    Da magst Du Recht haben. Aber auch die werden irgendwann merken, dass die Welt hinter der East und der West Coast weitergeht.

    In naher Zukunft gibt es von mir Premium Themes mit fertigen englischen, spanischen und deutschen Sprachfiles ;-)

  • sokai
    5. Februar 2009

    Schönes Tutorial! :)

    …um die ganze Sache mit den *.po/*.mo-Dateien bei der Lokalisierung jedoch einfacher zu gestalten, empfehle ich mal das Plugin “Codestyling Localization”. – Das kann sicher helfen… :)

    sofar|sokai

    • Simon [webdemar]
      5. Februar 2009

      Hi sokai,
      danke für den Tipp! Das werde ich mir mal genauer ansehen. War mir bisher unbekannt, da ich mich echt wenig mit dem Thema beschäftigt habe.

  • kaiser
    23. August 2009

    Hello. Netter Artikel. Schön wäre, wenn du ein wenig auf die Unterschiede zwischen __() und _e() (und es gibt noch zig andere “Modi” für alle smögliche) eingehen könntest. Die Textdomain musst Du übrigens nicht in den header setzen. Die ist in der Functions.php auch gut aufgehoben ;)

  • Christoph Taschler
    30. September 2009

    Hallo, habe mit großem Interesse Ihr Tutorial über die Lokalisierung von Wordpress gelesen. Können Sie mir sagen, wie man mit 3 Sprachen verfahren muss?
    Sie schreiben, dass man den String machen muss, damit übersetzt wird. Soweit alles klar.
    Wir mache ich das, wenn ich eine Übersetzung engl. / deutsch und eine Übersetzung Englisch / italienisch habe. Wie wird die richtige Datei ausgewählt und wie gebe ich die an?
    Würde mich sehr freunen, wenn Sie mir weiterhelfen könnten.

    Schönen Gruß aus Südtirol
    Christoph Taschler

    • Simon [webdemar]
      30. September 2009

      Hallo Christoph,
      wenn das Theme rightig vorbereitet ist, empfehle ich zur Erstellung neuer Übersetzungen das Plugin Codestyling Localization. Das Plugin legt alle nötigen Dateien an und Du kannst alle Sprachen übersichtlich verwalten.
      Viele Grüße aus Spanien,
      Simon [ThemeShift]

  • Christoph Taschler
    1. Oktober 2009

    Danke für die Nachricht.
    Wollte das Theme Modern Clix mit Codestyling Localization lokalisieren, anscheindend ist dies “hart” progammiert und das Plugin versagt den Dienst. Ich wäre als Anfänger auch damit zufrieden, die paar php-Dateien händisch durchzuarbeiten, denn das ist ja schnell geschehen. Praktisch hätte ich gerne bei folgendem String All rights reserved. wenn der Besucher der Webseite auf “deutsch” klickt, folgende Ausgabe auf der Webseite: “Alle Rechte vorbehalten”, wenn der Besucher auf italienisch klickt: “Tutti i diritti riservati”. Lässt sich sowas mit einem einfachen Code lösen?

  • Nils
    18. Januar 2010

    Ich verstehe das mit dem Laden der Sprachdatei noch nicht richtig. Probiere gerade ein freies WOO Theme aus, bei dem in einem Ordner languages bereits eine deutsche mo-Datei enthalten ist.
    Wo sollte diese Datei hinkopiert werden?
    Muss ich sie umbenennen?
    Beim Aufruf der Sprachdatei, muss dann in den Namen des Themes geändert werden, unverändert bleiben oder den kompletten Dateinamen inkl. der Dateiendung enthalten?

    Ist wahrscheinlich so simpel, dass ich es nirgendwo finden kann …

    Danke für Eure Hilfe

  • Nils
    19. Januar 2010

    Ich nochmal … hab mich wohl unverständlich ausgedrückt.

    Also ich probiere gerade das wirklich schicke WooTheme Irresistible aus, das man hier herunterladen kann: http://www.woothemes.com/2009/02/irresistible/

    Läuft auch auf der aktuelle WP Release 2.9.1 wunderbar. Nur, dass es leider auf englisch ist. Die deutschen po/mo dateien liegen zwar in einem Ordner languages (und sind auch tatsächlich mit den deutschen Übersetzungen gefüllt), aber werden nicht integriert.

    Nun hab ich bereits das Laden der Text-Datei mit dem von Simon angegeben Codeschnipsel im Header probiert … sowohl wortwörtlich wie auch mit ersetzen von ‘my_theme_name’ mit ‘irresistible’. Geht aber nicht.

    Vielleicht hat jemand von Euch das gleiche Problem gelöst?

1 Trackback

Kommentar schreiben

Dein Name hier
Dein Name hier
14. March 2010

Gravatars sind an. Jetzt kostenlos registrieren!

WordPress Hosting

Für das Hosten von WordPress Blogs empfehlen wir Webspace von Hostloco.
Eine ganze Fotowelt mit nur einer Software - Fotobuch-Software von CEWE.

So am Rande

WordPress 2.8.6 Security Release - 16. November 2009

WordPress versorgt uns von der nächsten großen Version 2.9 noch mit einem weiteren Sicherheits-Release – WordPress 2.8.6. Damit wird eine [...]

WordPress 2.8.5 schließt Sicherheitslücke - 21. Oktober 2009

Seit heute Nacht ist WordPress 2.8.5 zum Download erhältlich. Obwohl schon alle Maschinen für die Version 2.9 laufen, schließt WordPress [...]

WordPress 2.9 kündigt sich an - 14. Oktober 2009

Bald ist es soweit und die erste Beta-Version von WordPress 2.9 wird zum Download erhältlich sein. Das soll laut Peter [...]

Link: Anleitung zur Erstellung von Theme-Options in einem WordPress-Theme - 5. Oktober 2009

Wer ein professionelles WordPress-Theme erstellen möchte, kommt um Theme-Options, einer separaten Seite für Theme-Einstellungen im WordPress-Admin, nicht herum. Theme-Options bieten [...]

Link: Digging into WordPress - 1. Oktober 2009

Sollte es unter Euch einen WordPress-Begeisterten geben, der diese Seite noch nicht kennt, möchte ich ihm diese hiermit vorstellen. Auf [...]

Kostenloser Mozilla Firefox Download des aktuellen Mozilla Firefox Browser.
Offizielles Stadtportal für München. Ein Service für die Landeshauptstadt München.
Do you like this theme?

Powered by WordPress.org - Copyright © 2009. Alle Rechte vorbehalten - Professional WordPress Themes