Einzelnen Beitrag anzeigen
Alt 17.08.2006, 11:07   #65 (permalink)
MarkusW
PostRank: 0
 
Registriert seit: 31.07.2006
Beiträge: 6
Zur Erläuterung: gettext ist eine im Unix-Bereich ziemlich weit verbreitete Library, die im Grunde nichts anderes macht, als einen übergebenen "Original"-String (meist englisch) durch den korrespondierenden übersetzten String aus einer speziell aufbereiteten Sprachdatei zu ersetzen - das ist die .mo-Datei, die auch Wordpress verwendet.

PHP kann mit gettext-Support kompiliert werden (--with-gettext). Ist das der Fall, dann stehen dem php-Programmierer php-Funktionen zur Verfügung, die ihrerseits das externe gettext-Programm kapseln und so gettext-Funktionalität direkt in PHP bieten.

Ein Problem ergibt sich allerdings dann, wenn auf dem Rechner, auf dem das PHP-Script läuft, welches diese gettext-Funktionen verwendet, kein gettext installiert oder wenn php ohne die gettext-Extension kompiliert wurde oder wenn die gewünschte locale vom Betriebssystem nicht unterstützt wird. Anders als die meisten Linux-Distributionen bringt Windows standardmäßig kein installiertes gettext mit. Wordpress müsste daher bei Verwendung der externen gettext-Library beim lokalen Test auf einer XAMPP-Windows-Installation ohne Support für Internationalisierung laufen. Um Wordpress möglichst portabel zu halten, musste man daher auf ein Drop-In-Replacement für die gettext-Erweiterung zurückgreifen, welches ausschließlich mit internen PHP-Funktionen arbeitet und sich trotzdem auf das durch gettext definierte .mo-Format der Sprachdateien versteht.

Dafür hat man auf php-gettext zurückgegriffen. Das sind die beiden Dateien gettext.php und streams.php im wp-includes-Verzeichnis. Diese Dateien stammen nicht vom Wordpress-Team. php-gettext wird nicht nur von Wordpress verwendet, sondern u.a. von den Projekten Gallery und SquirrelMail. Mit dieser php-nativen Lösung bekommt man theoretisch gettext-Funktionalität ganz ungeachtet von irgendwelchen Abhängigkeiten außerhalb von php selbst (Betriebssystem-locale, gettext-Verfügbarkeit, gettext-PHP-Extension).

Das Problem mit php-gettext ist allerdings, dass dieser Code noch immer Beta ist. Es sind dort beim Zugriff auf das mo-File und beim Caching der Daten Operationen erforderlich, die nicht gerade zu den Stärken von php gehören. So führen z.B. aktivierte magic-quotes dazu, dass das binäre Lesen des mo-Files nur Datensalat produziert; das Script muss zudem entscheiden, wie die CPU tickt (Big Endian vs. low Endian) um Binärdaten korrekt in den Speicher zu schreiben und wieder einzulesen - wird dabei nicht richtig geraten (wie es z.B. bei 64-bit Prozessoren passieren kann), dann führt auch das wieder zu einem fatalen Fehler. Schließlich gibt es noch Bugs in php selbst, die in diesem Bereich dazu führen, dass Binäroperationen nicht so laufen wie sie sollen. gettext hat alle diese Probleme natürlich nicht, da es sich anders als bei einem php-Script eben um nativ kompilierten Code handelt.

Da es sich bei php-gettext um ein externes Projekt handelt, würde ich vermuten, dass von den Wordpress-Entwicklern wenig Hilfe zu erwarten ist. Die deutsche Community kümmert sich auch eher um das Sprachfile, wenn ich das richtig mitbekommen habe, als um Wordpress-Systeminterna. Da php-gettext allerdings einen Kompromiss zwischen Performance und Portabilität darstellt und es ganz offensichtlich Probleme mit diesem Kompromiss gibt, würde ich mir persönlich wünschen, dass man als User eine Wahlmöglichkeit zwischen php-gettext (bessere Portabilität, schlechtere Performance, Bugs) und gettext-Extension (bessere Performance, stabilerer Code, schlechtere Portabilität) bekommt.
MarkusW ist offline   Mit Zitat antworten