2010-03-11 6 views
7

Ich versuche, gettext hinzufügen Lokalisierung Unterstützung für meine Website. Ich habe verschiedene Leitfäden für die Einrichtung gettext gefolgt und haben folgendes getan:PHP Gettext-Funktion gibt nur orignal nicht übersetzte Zeichenfolge

Ich habe die folgenden Dateien und Verzeichnisse in der Wurzel meines Projekts dir erstellt:

test.php 

locale/ 
    de_DE 
    LC_MESSAGES 
     messages.mo 
     messages.po 

    en_GB 
    LC_MESSAGES 
     messages.mo 
     messages.po 

I Poedit verwendet haben um die obigen .po und mo Dateien zu erstellen. Ich habe es gemacht, verwenden Sie Unix-Zeilenendungen, UTF-8 und stellen Sie die Sprache und das Land entsprechend ein.

Ich habe erstellt dann ein PHP-Skript test.php, die den folgenden Code genannt:

<?php 

    define('LOCALE', 'de_DE'); 

    // Set up environmental variables 
    putenv("LC_ALL=" . LOCALE); 
    setlocale(LC_ALL, LOCALE); 
    bindtextdomain("messages", "./locale"); 
    bind_textdomain_codeset("messages", LOCALE .".utf8"); 
    textdomain("messages"); 

    die(gettext('This is a test.')); 

?> 

ich importiert haben den Text „Dies ist ein Test.“ zu Poedit und lieferte die Übersetzung und speicherte sie.

Aber aus irgendeinem Grund wird das Skript test.php nur den ursprünglichen Text nicht übersetzt. Es weigert sich, die Version für die Übersetzungsdateien zu laden.

Es ist erwähnenswert, dass auf dem Server Linux (Ubuntu), Apache 2.2.11 und PHP 5.2.6-3ubuntu4.5 läuft. Ich habe phpinfo() überprüft und gettext ist aktiviert.

Kann mir jemand helfen? Vielen Dank.

Antwort

14

Ihr Problem könnte mit einem fehlenden Gebietsschema auf Ihrem System zusammenhängen. Bitte installieren Sie die deutsche locale und alles funktionieren sollte:

sudo apt-get install language-pack-de-base 

Dann geben Sie den folgenden Befehl ein, und Sie sollten die deutschen Gegenden sehen:

locale -a 

Danach wird der folgende Code sollte funktionieren, vorausgesetzt, Sie noch habe die .po und .mo Dateien in der Verzeichnisstruktur, die du beschrieben hast:

<?php 

    setlocale(LC_ALL, 'de_DE.UTF-8'); 
    bindtextdomain('messages', './locale'); 
    textdomain('messages'); 

    echo gettext('This is a test.'); 

    ?> 
+0

Also, hat es funktioniert? War es in der Tat ein Problem in Verbindung mit einem fehlenden Gebietsschema oder etwas anderem? – bpedro

+0

Ja! Es hat funktioniert. Vielen Dank für Ihre Hilfe. – Camsoft

+0

Kein Problem! Es freut mich, dass ich helfen konnte! – bpedro

0

versuchen die folgende

<?php 

    define(LC_MESSAGES, 'de_DE'); 

    // Set up environmental variables 
    putenv("LANGUAGE=de_DE"); 
    bindtextdomain("*", dirname(__FILE__).'/locale'); 
    bind_textdomain_codeset("messages", 'UTF-8');  

    die(gettext('This is a test.')); 

?> 
+0

Leider hat das nicht funktioniert. Es zeigt immer noch nur die englische Version an. – Camsoft

1

Ja, ja, wieder gettext Unterstützung von PHP. Nur ein Hinweis, der Ihnen helfen könnte:

Aufgrund der schrecklichen Gettext-Implementierung von PHP haben viele Open-Source-Projekte wie WordPress auf dieses Programm umgestellt: http://savannah.nongnu.org/projects/php-gettext/ und die ursprüngliche Version komplett umgehen.

Ich tat es auch, in einem meiner Projekte, und ich kann nicht sagen, dass ich irgendetwas vermisse.

Nachteil für kommerzielle Projekte: Es ist unter der GPL.

+0

Interessant. Ich werde es mir ansehen. Arh, obwohl es GPL ist, wird ein Problem sein. – Camsoft

+0

Nicht in der Lage zu verwenden, weil wie Sie sagten, es ist GPL und dieses Problem, das ich habe, ist auf einem kommerziellen Projekt. – Camsoft

+0

Ich kenne das Problem. Wir haben hier auch ein Closed-Source-Projekt, und wir müssen etwas selbst implementieren, da wir php-gettext nicht verwenden können (oder uns auf das Gettext-Modul von PHP verlassen wollen).Ich denke jedoch, dass es eine Antwort wert ist, da es ein wichtiges Projekt ist, das in andere GPL-PHP-Software integriert werden soll. – Boldewyn

Verwandte Themen