WordPress - Lokalisierung - (wie bekomme ich Plugins / Themes übersetzt)

Die Seite wird erstellt Fritz Böhme
 
WEITER LESEN
WordPress - Lokalisierung - (wie bekomme ich Plugins / Themes übersetzt)
WordPress – Lokalisierung
   (wie bekomme ich Plugins / Themes übersetzt)

                    14. Februar 2009, Jena
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