/GNU-gettext Übersetzung funktioniert nicht
Jojo
- php
0 Andreas Görtz0 Jojo
Hallo eherenwerte Forummitglieder
Ich habe wieder mal ein sehr komische Problem
Meiner einer hat sich vor einiger Zeit ein Webhosting Paket bei Strato gekauft (das Premium-Paket XE).
Dort kann ich PHP 5.0.2 verwenden.
Außerdem ist dort die GNU-gettext Version aktiviert.
Ich habe hier mal eine Zusammenstellung fast aller Infos gemacht
http://www.johannes-leimer.de/development/logged_in/test2.php5
User : selfhtml
Pass : selfhtml
Das Script sieht so aus:
$lang = $_GET['lang'];
switch ($_GET['lang']) {
case "de":
case "en":
case "fr": $lang = $_GET['lang']; break;
default : $lang = "de"; break;
}
setlocale(LC_ALL, $lang);
//putenv("LANG=$lang");
bindtextdomain("sfogame", "../gettext/");
textdomain("sfogame");
echo gettext("Das ist ein Test !");
Wenn ich das ganz bei mir auf dem Rechner ausführe, dann funktioniert die Übersetzung... also muss es ja am Server liegen
Und wenn die gettext Ext nicht aktiviert wäre, gäbs ja n Fatal Error : Call to undefined function
Aber irgendwie funktioniert es trotzdem nicht :-(
Ich bin um jede Hilfe froh !
Hi Jojo,
switch ($_GET['lang']) {
case "de":
case "en":
case "fr": $lang = $_GET['lang']; break;
default : $lang = "de"; break;
}setlocale(LC_ALL, $lang);
//putenv("LANG=$lang");
bindtextdomain("sfogame", "../gettext/");
textdomain("sfogame");echo gettext("Das ist ein Test !");
[/code]Wenn ich das ganz bei mir auf dem Rechner ausführe, dann funktioniert die Übersetzung... also muss es ja am Server liegen
ja, die locales und deren Bezeichnung hängen von der Server-Konfiguration ab. Wie die locales heißen und welche überhaupt installiert/definiert sind, kannst Du unter Linux mit dem Befehl "locale -a" herausfinden. Versuch mal mit der PHP-Funktion system() oder shell_exec() o.ä., diesen Befehl abzusetzen und die locales herauszubekommen.
Um generell mit unterschiedlichen Systemen kompatibel zu sein, solltest Du außerdem der setlocale() mehrere Argumente mitgeben. Diese versucht dann nacheinander, die locale zu setzen, bis es klappt. Also z.B.:
setlocale(LC_ALL, 'fr_FR', 'fr_FR.utf8', 'fr_FR.iso-8859-1', 'und wie die sonst noch heißen kann');
Außerdem solltest Du den Rückgabewert der Funktion setlocale() auswerten, diese gibt nämlich boolean FALSE zurück, wenn sie die locale nicht setzen konnte.
Gruß,
Andreas.
ja, die locales und deren Bezeichnung hängen von der Server-Konfiguration ab. Wie die locales heißen und welche überhaupt installiert/definiert sind, kannst Du unter Linux mit dem Befehl "locale -a" herausfinden. Versuch mal mit der PHP-Funktion system() oder shell_exec() o.ä., diesen Befehl abzusetzen und die locales herauszubekommen.
Habs mal gemacht :
Script Output is nun auch auf der Seite
=> Link und Daten im ersten Post
Um generell mit unterschiedlichen Systemen kompatibel zu sein, solltest Du außerdem der setlocale() mehrere Argumente mitgeben. Diese versucht dann nacheinander, die locale zu setzen, bis es klappt. Also z.B.:
Das brauch ich nich... werde so schnell nich das System wechseln ;)
=> Aber danke für den Tipp :D
Außerdem solltest Du den Rückgabewert der Funktion setlocale() auswerten, diese gibt nämlich boolean FALSE zurück, wenn sie die locale nicht setzen konnte.
Ja logisch... ich hab das aus nem PHP Buch abgeschrieben und halt nich gewusst, dass setlocale was zurückgibt
-> Das is mal wieder ne schwäche von PHP :-|
Aber weiter bin ich leider noch nich gekommen :-(
Hi Jojo,
Aber weiter bin ich leider noch nich gekommen :-(
dann solltest Du vielleicht mal den Strato-Support fragen, ob ein Umstellen der locale überhaupt unterstützt wird.
Gruß,
Andreas.
dann solltest Du vielleicht mal den Strato-Support fragen, ob ein Umstellen der locale überhaupt unterstützt wird.
Jo... werd ich morgen mal machen... hoffentlich schnallen die überhaupt, was gettext is ^^
Morgen geb ich bescheid, was ich rausbekommen hab ;)
Bis dann
Jo... werd ich morgen mal machen... hoffentlich schnallen die überhaupt, was gettext is ^^
... sie haben es nicht gewust :-| *grml*
Morgen geb ich bescheid, was ich rausbekommen hab ;)
auf deutsch ... NICHTS !
Ich werde mir wohl wirklich einen Root-Server zulegen müssen :-(
Aber danke für die Tipps ;)