WordPress - Lokalisierung - (wie bekomme ich Plugins / Themes übersetzt)
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Schwerpunkte in der Übersicht ... einige Fragen nach wie, wo, wer, was und warum. Was ist heißt eigentlich Lokalisierung von WordPress ? Was habe ich davon, wenn ich Plugins / Themes übersetzbar gestalte ? Wie funktioniert das generell und auf welcher Grundlage ? Welche Tools unterstützen mich und stehen dafür zur Verfügung ? Wie lokalisiere ich fremde Plugins / Themes, die nicht übersetzungsfähig sind ? Wie würde das anhand praktischer Beispiele aussehen ? 14. Februar 2009, Jena
Was ist heißt eigentlich Lokalisierung von WordPress ? Lokalisierung steht in der Softwareentwicklung für die Anpassung von Inhalten (Bücher, Filmkunst, Homepages), Prozessen, Produkten und insbesondere Computerprogrammen (Software) an die in einem bestimmten geographisch oder ethnisch umschriebenen Absatz- oder Nutzungsgebiet (Land, Region oder ethnische Gruppe) vorherrschenden lokalen sprachlichen und kulturellen Gegebenheiten. Das englische Wort für Lokalisierung ist localization (amerikanisches/britisches Englisch) bzw. localisation (britisches Englisch) und wird in der Softwareentwicklung oft mit L10N abgekürzt. Die 10 ist die Anzahl der ausgelassenen Buchstaben. (Im Gegensatz dazu steht I18N für internationalization.) Quelle: Wikipedia (de) Lokalisierung von WordPress bedeutet demzufolge die Anpassung von Oberflächen und Beschriftungen an die entsprechend gewünschte Sprache und Besonderheiten. Dies betrifft sowohl WordPress als Produkt selbst, als auch seine Erweiterungen (Plugins und Themes). 14. Februar 2009, Jena
Was habe ich davon, wenn ich Plugins / Themes übersetzbar gestalte ... ... in einem rein privaten Blog ? • einheitliche und verständliche Administrationsoberfläche • korrekte und konsistente Darstellung der Inhalte für die Besucher ... in einem Blog / CMS mit mehreren Autoren oder Gastautoren ? • Vorteile wie im persönlichen Blog • keine Verwirrung von Gastautoren, weil diese Fremdsprachen nicht verstehen • einheitliche Begriffe, auf die man sich bei Rückfragen beziehen kann ... in einem professionellen Blog / CMS als Auftragsarbeit ? • Vorteile der beiden vorherigen Punkte • einfache Anpassbarkeit der Begrifflichkeiten an die Wünsche des Kunden • geringer Support-Aufwand bei Plugin und/oder Theme Updates • Zeitersparnis, weil man nur die Sprachdatei ändern muss statt viele PHP Dateien • ermöglicht eine mehrsprachige Nutzung der Administration und des Webauftritts 14. Februar 2009, Jena
Wie funktioniert das generell und auf welcher Grundlage ? GNU gettext ist die GNU-Internationalisierungsbibliothek. Normalerweise wird sie zur Entwicklung von mehrsprachigen Programmen genutzt. Quelle: Wikipedia (de) Bibliothek: http://www.gnu.org/software/gettext/gettext.html Lizenz: GPL Wie muss man sich die Verwendung von gettext grundsätzlich vorstellen ? PHP Quelltext Portable Object Machine Object WordPress Core HTML Ausgabe (Plugin/Theme) (*.po Datei) (*.mo Datei) (gettext) (Admin / WWW) Übersetzen (Tool / Editor) Einlesen aus Konvertieren in Einlesen der Term/Text den Quellen eine Sprachdatei Sprachdatei suchen und (Tool) (Tool) (gettext) übersetzen
PHP Dateien – Textausgaben in Plugins und/oder Templates So sieht ein Beispiel aus einem Template dazu aus, ... comments.php : ... so sieht der Weg des geringsten Widerstands aus ... comments.php : ... und so sieht die jederzeit übersetzbare Anpassung aus. comments.php : 14. Februar 2009, Jena
Verfügbare gettext Funktionen in WordPress Einfacher Text __("Text in der Basis-Sprache", "TextDomain") Diese Funktion gibt den übersetzten Text als Zeichenkette zurück, führt aber kein echo aus. _c("Text in der Basis-Sprache|im Kontext", "TextDomain") Diese Funktion gibt den übersetzten Text bis zum Kontext-Trenner als Zeichenkette zurück, führt aber kein echo aus. _e("Text in der Basis-Sprache", "TextDomain") Diese Funktion führt umgehend ein echo mit dem übersetzten Text aus hat aber kein Rückgabewert. TextDomain Damit WordPress eindeutig ermitteln kann, in welcher Sprachdatei der Basis-Text gesucht werden soll, gibt man einen eindeutigen Bezeichner für sein Plugin oder Theme an. |im Kontext Manche Begriffe sind unter Umständen mehrdeutig und stark davon abhängig, in welchem Kontext sie vorkommen. Mit dem zusätzlichen Kontextbezeichner sind "Auto|Car" und "Auto|Automatic" dann zwei verschiedene Texte, auch wenn es trotzdem nur um den Teil bis zum Trenner geht. 14. Februar 2009, Jena
Verfügbare gettext Funktionen in WordPress Einfacher Text mit Parameter-Ersetzung $farbe = 'unbekannt'; echo sprintf( __("Die Farbe ist: %s", "TextDomain") , $farbe ); Der Rückgabewert der gefundenen Übersetzung enthält einen Format-Platzhalter für die sprintf() Funktion und wird dieser gemeinsam mit dem ermittelten Parameter übergeben. Somit lassen sich Stellen in der Übersetzung so steuern, das verschiedene Sprachen ihren Satzbau so bilden können, wie es nötig ist. ... um warum nicht viel einfacher so ? $farbe = 'unbekannt'; echo __("Die Farbe ist: ", "TextDomain") . $farbe; $farbe = 'unbekannt'; echo sprintf( __("%s die Farbe ist.", "TextDomain") , $farbe ); "Du hast %d Antwort(en) " - wie mache ich formatierte Texte von Zahlen abhängig ? 14. Februar 2009, Jena
Verfügbare gettext Funktionen in WordPress Pluralformen – eine nicht ganz so einfache Sache Zahl gleich 1 "Du hast %d Antwort(en)" "Du hast 1 Antwort" Zahl ungleich 1 "Du hast 3 Antworten" ... lässt sich also irgendwie mathematisch / logisch ausdrücken ... Deutsch Englisch ... und sehr viele andere Sprachen nplurals=2; plural=n != 1; 2 Formen: Einzahl und Mehrzahl Index – Berechnungsvorschrift n != 1 nein 0 n != 1 ja 1 $zahl = 4; 0 1 echo sprintf( __ngettext("Du hast %d Anwort", "Du hast %d Anworten", $zahl ,"TextDomain") , $zahl ); Mit der in der Sprachdatei festgelegten Pluralformel wird anhand der mitgegebenen Zahl bestimmt, welcher der zur Verfügung stehenden Texte zu verwenden ist. Die Funktion gibt dann den entsprechenden Text zurück, der dann nochmals mit der Zahl zusammen formatiert und ausgegeben wird. 14. Februar 2009, Jena
Verfügbare gettext Funktionen in WordPress Pluralformen – warum so kompliziert mit Berechnungen ? japanisch türkisch deutsch englisch nplurals=1; plural=0; nplurals=2; plural=n != 1; Es gibt nur eine Einzahlform. Es gibt 2 Formen: Einzahl und Mehrzahl. russisch tschechisch nplurals=3; plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1; Es gibt 3 verschiede Formen, die eine nicht mehr ganz so einfache Formel haben. slowenisch nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3; Spitzenreiter in den Pluralisierungen ist slowenisch mit 4 verschiedenen Möglichkeiten. 14. Februar 2009, Jena
Hilfsfunktionen in WordPress für Lokalisierung Datumsformatierungen echo date_i18n( __("M j, Y @ G:i") , strtotime( $post->post_date ) ); In der WordPress Sprachdatei werden die Monats- und Tagesnamen definiert, die man für die aktuell eingesetzte Sprache benötigt. Diese Lokalisierungsfunktion sorgt dafür, das die Ausgabe unter Berücksichtigung dieser Namen durchgeführt wird. Die Funktionsweise ist sonst identisch mit der PHP date() Funktion. Anmerkung: Wenn keine „TextDomain“ angegeben wird, ist immer die WordPress Sprachdatei gemeint. Zahlenformatierung Englisch: 1,003.141 $zahl = 1003.1415927; Deutsch (Deutschland): 1.003,141 echo number_format_i18n( $zahl , 3); Deutsch (Schweiz): 1'000.141 In der WordPress Sprachdatei werden werden auch die Tausender- sowie Komma-Separatoren definiert, die für die entsprechende Sprache gültig sind. Deshalb kann auch die Ausgabe für das Frontend entsprechend angepasst werden. Anmerkung: Wenn mit so formatierten Werten als Input gearbeitet werden soll (Rückgabe von Geldbeträgen als Beispiel), muß man selbst dafür sorgen, dass diese Werte korrekt in die interne Fliesskommadarstellung konvertiert werden, damit PHP damit weiterechnen kann. Der Schweizer Tausender-Separator ist problematisch für Javascripts ! 14. Februar 2009, Jena
Sprachdateien unterstützen und einbinden Plugins – wie wird die Sprachdatei geladen ? load_plugin_textdomain("TextDomain", PLUGINDIR.'/plugins/mein-plugin', 'mein-plugin'); Parameter: $domain, $abs_rel_path = false, $plugin_rel_path = false Themes – wie wird die Sprachdatei geladen ? load_theme_textdomain("TextDomain", false); Parameter: $domain, $path = false Anmerkung: Der Pfad muß, wenn er verwendet wird, absolut sein! generell – zu welchem Zeitpunkt sollte man die Sprachdatei laden ? function init_language_support() { if (is_admin() && ! DOING_AJAX) { load_plugin_textdomain('meinPlugin', false, 'mein-plugin'); } } add_action('init', 'init_language_support'); Hinweise: Wenn das Plugin eigene Texte auf der Webseite bereitstellen soll, dann braucht man den admin Test nicht. Wenn man die Sprachdatei für ein Theme laden möchte, kann man den Admin-Bereich ausschliessen (negieren), solange das Theme keine eigenen Seiten im Admin Bereich zur Einstellung oder Anpassung hat. Der Ajax Test ist sinnvoll, wenn die Javascript Zugriffe per Ajax keine zu übersetzenden Texte enthalten, die das Plugin oder Theme betreffen denn dadurch werden Ajax Aufrufe sehr viel schneller bearbeitet. 14. Februar 2009, Jena
Sprachdatei Tools – der Klassiker PoEdit Der Dateiname für Plugins setzt sich zusammen aus: TextDomain-Locale.po Also im Beispiel dann: Download: http://www.poedit.net/ Lizenz: MIT wp-footnotes-de_DE.po Platform: Windows / Mac / Linux 14. Februar 2009, Jena
Sprachdatei Tools – der Klassiker PoEdit Nachdem alle Einstellungen korrekt konfiguriert wurden, kann man die zu übersetzenden Texte aus den PHP Dateien einlesen lassen und anschließend nach Wunsch übersetzen. Wenn man den Katalog speichert, generiert PoEdit sowohl die angegebene *.po Datei als auch die entsprechende *.mo Datei. Die Sprachdatei *.mo muss dann mit einem FTP Programm auf den Webspace hochgeladen werden. Danach prüft man, ob die Texte zu lang werden, kürzt sie ggf. und lädt die Datei erneut hoch. 14. Februar 2009, Jena
Sprachdatei Tools – Alternative „Codestyling Localization“ WordPress Plugin ab Version 2.5 einsetzbar Lizenz: GPL 14. Februar 2009, Jena
... derzeit in Arbeit „Codestyling Localization 2“ 14. Februar 2009, Jena
Fragen, Kritik , Anregungen ? - jetzt wäre der richtige Zeitpunkt. CODE IS POETRY 14. Februar 2009, Jena
Sie können auch lesen