Zikula und Gettext
Mit Zikula 1.2.0 wurde eine neue Lösung für die Mehrsprachigkeit in den Core integriert. Und wie man der Releasebeschreibung entnehmen kann, handelt es sich hier um Gettext. Dadurch wurden elementare Veränderungen in den bisher altbekannten Abläufen (Modulentwicklung, extDB, Übersetzung, etc.) eingeleitet. Nach dem Core-Release haben wir ein Großteil der Strukturen angepasst, umgestellt, konvertiert und eine Dokumentation über verschiedene Dinge erarbeitet.
Die Hauptanlaufstelle für Übersetzer und Entwickler bzgl. der Anleitungen und Video-Tutorials ist z.B. das deutsche Dokumentationswiki zum Thema Mehrsprachigkeit.
Was genau ist eigentlich Gettext?
Es gibt diverse Wikis, die darauf eine Antwort haben. Ich zitiere aus folgender Quelle: http://www.phpbar.de/w/Gettext
GetText ist ein Tool bzw. Bibliothek zur Internationalisierung (kurz: i18n). D.h. heißt es dient dazu Applikationen mit geringem Aufwand in verschiedenen Sprachen darzustellen. Ein weiterer Vorteil liegt darin, dass es bereits viele Werkzeuge gibt, die das Übersetzen erleichtern.
Wie ist ein Gettext-Modul strukturiert?
Gettext-Module (auch Themes) verfügen nun über das Verzeichnis /locale. Darin ist eine Datei im Format module_foo.pot enthalten. Diese POT-Datei ist quasi ein Extrakt aller unübersetzten Gettext-Zeichenketten des Moduls. Man kann es grob mit den Inhalten der Dateien aus dem /pnlang-Verzeichnis vergleichen. Die Datei dient als Schablone für Übersetzungen in andere Sprachen.
- Weitere Informationen
- Verzeichnisstrukur
Und wie übersetzt man nun ein Modul?
Möchte man nun eine Übersetzung erstellen, so benötigt man ein Tool zur Erstellung und Bearbeitung von Gettext-Dateien. Meine Wahl fiel auf PoEdit. Hiermit kann man auf Basis der POT-Schablone die Zeichenketten übersetzen und daraus beim Speichern Dateien im Format *.PO und *.MO erstellen. Eine PO-Datei beinhaltet alle Übersetzungen im Klartext. Bei der MO-Datei handelt es sich um die kompilierte Version, die schlussendlich von Zikula genutzt wird. Diese beiden Dateien müssen dann in das Verzeichnis des Moduls unter modules/Foo/locale/de/LC_MESSAGES/ kopiert werden.
- Weitere Informationen
- Übersicht über verschiedene Tools
Wie mache ich meine Erweiterung vollständig kompatibel mit Zikula 1.2.0?
Resultierend aus der neuen Gettext-Funktionalität, der fortschreitenden Internationalisierung und der weiteren Neuerungen, sollten Module grundsätzlich auf den aktuellen Stand der Technik angehoben werden. Das muss nicht zwangsläufig mit einem großen Aufwand verbunden sein. Die Migration ist für die Modulentwickler zeitnah umsetzbar und dürfte keine großartigen Klimmzüge nach sich ziehen. Die Mehrheit der bekannten Module sollte ohne Probleme weiterlaufen. Doch sobald ein Modul die Multilingualität nutzt und Inhalte in verschiedenen Sprachen verwaltet, sollte eine Anpassung vorgenommen werden. Als Beispiel: Sind in der Datenbank Inhalte unter dem alten deutschem Kürzel 'deu' gespeichert, so können diese jetzt vielleicht nicht mehr richtig gefiltert angezeigt werden, da die Sprachkürzel nun 'de' lautet. Die Datenbankabfrage liefert also keine nutzbaren Ergebnisse mehr.
Ganz abgesehen davon liegt der Hauptaugenmerk natürlich auf die Gettext-Implementierung. Weiterhin kann man bei Bedarf auch direkt die Vorzüge der neuen CSS-Klassen nutzen und das Modul auch optisch Zikula-konform gestalten.
Übrigens: Netter Nebeneffekt. Zikula ist durch Gettext um ein Vielfaches schneller geworden.
- Weitere Informationen
- Gettext-Konvertierung
Wie stelle ich die Erweiterung zur Verfügung?
Sämtliche Erweiterungen sollten in der extDB veröffentlicht werden. Die Erweiterung sollte nur die POT-Datei beinhaltet und keine ergänzenden Übersetzungen. Nach der extDB-Freigabe werden alle übersetzbaren Elemente (POT-Datei und mehrsprachige Templates) ins das SVN des i18n-CoZi Projektes http://code.zikula.org/i18n übertragen. Zweimal am Tag wird ein Job ausgeführt, der die englischen Originalvorlagen auf alle anderen verfügbaren Sprachen verteilt und somit leere PO-Dateien erstellt. Diese sprachabhängigen PO-Dateien können dann beispielsweise mittels unseres neuen Übersetzungsportals (translate.zikula.org) bearbeitet werden. Der Vorteil des neuen Portals (Pootle) liegt übrigens u.a. auch darin, dass nun eine Möglichkeit existiert, die Übersetzungen zentral von mehreren Leuten durchführen zu lassen. Hat ein Modulentwickler bereits eigene Übersetzungen im PO-Format erstellt, die ja beim Upload in der extDB nicht vorhanden sein dürfen, so können die Dateien in Pootle auch direkt hochgeladen werden.
Ist eine Übersetzung für eine Sprache abgeschlossen, so können die extDB-Administratoren eine Synchronisation zwischen Pootle und extDB durchführen. Dann schlussendlich ist im extDB-Download die neue Sprache auch verfübar.
- Weitere Informationen:
- Technische Ablaufbeschreibung
Aktuelle Gettext-Module
Seit dem v1.2.0 Release wurden bisher folgende Module erfolgreich migriert (teilweise mit kleinen neuen Features): Quotes, Feeds, PendingContent, Ratings, FAQ, Profile 1.4, Ephemerids, Recommend_Us, Sniffer, Thumbnail, AuthPN, AuthLDAP, formicula, bbsmile, bbcode, MultiHook, Bad_Behaviour und akismet. Fast abgeschlossen sind die neuen Version von: Eternizer, EZComments, Dizkus, Pages und Reviews. Geplant sind noch: mediashare, Content, Avatar und Polls
Viel Spaß mit den neuen Möglichkeiten!
Beitrag auch veröffentlicht unter support.zikula.de
Kommentar hinzufügen