phpbar.de logo

Mailinglisten-Archive

[php] gettext und deutsche Umlaute

[php] gettext und deutsche Umlaute

Ringo Großer swek at gmx.net
Don Sep 27 01:43:01 CEST 2007


Hallo

So, also ich hab nun alles für mich Interessante erfolgreich 
durchgetestet. Es hat mich ein wenig aufgehalten, dass ich nach dem 
Ändern der .mo Datei keinen Effekt im Browser gesehen habe, aber 
schließlich erinnerte ich mich wieder daran, dass unter Windows der 
Apache neu gestartet werden muss, um ein verändertes .mo zu berücksichtigen.

Mein Script ist nun als UTF-8 gespeichert. Wenn ich es mit einem 
normalen Texteditor anzeigen lasse, dann war die von Lutz erwähnte 
Byte-Sequenz am Dateianfang sichtbar. Zumindest hab ich die heut schon 
gesehen, im Moment ist sie aber nicht mehr sichtbar... Fragt mich bitte 
nicht warum.

Sowohl .po als auch .mo sind ebenfalls als UTF-8 gespeichert.

Zusätzlich zum Code-Beispiel unter [1] habe ich noch ein Codeset-Bind 
siehe [2] mittels bind_textdomain_codeset('mytest', 'UTF-8'); angegeben.

Nun kann ich im Script und im PO-Katalog mit deutschen Umlauten arbeiten 
und sehe diese auch ordentlich im Browser. Ohne das Codeset-Bind 
erschienen nur die bekannten schwarzen Vierecke mit Fragezeichen.

Die Sache mit den doppelten Anführungszeichen habe ich ebenfalls positiv 
getestet. Es ist so wie von Niels beschrieben: Der Parser escaped ein " 
in der msgid zu \". Editiert man die Übersetzung im PoEdit mit 
unmaskierten ", dann fügt PoEdit die Backslashes selbstständig sofort 
hinzu. Die Übersetzung, die im Browser ankommt, enthält dann wieder die 
reinen doppelten Anführungszeichen. So wie es sein soll.


Das Beispiel siehe [1] weist im Kommentar darauf hin, dass das 
betreffende .mo File unter dem Pfad 
./locale/de_DE/LC_MESSAGES/myPHPApp.mo abgelegt sein muss.
Dieser Zusammenhang ist mir leider noch nicht klar. Es funktioniert mit 
dieser Ordnerstruktur, aber welchen Spielraum gibt es hier noch?

Kann ich mein .mo File nicht auch einfach unter ./languages/german.mo 
ablegen und dem gettext das über die Textdomäne irgendwie beibringen?
Warum muss da de_DE und LC_MESSAGES enthalten sein?

Ich habe auch in den per Google gefundenen WordPress Beispielen [3] 
Pfade gefunden wie zum Beispiel wp-includes/languages/de_DE.mo.
Genauso simpel kann es wohl auch funktionieren. Aber wie?


[1] http://www.php.net/manual/en/function.gettext.php
[2] http://www.php.net/manual/en/function.bind-textdomain-codeset.php
[3] 
http://49suns.de/2007-08-27/localization-von-themes-und-plugins-eine-einfuehrung

regards, Ringo

php::bar PHP Wiki   -   Listenarchive