gettext funktioniert nicht

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

gettext funktioniert nicht

Postby henry69 » 13. June 2017 18:05

Hallo allerseits,

Mein Problem ist, dass gettext nicht funktioniert.
Ich nutze:
Windows 10, 64 bit
XAMPP (xampp-portable-win32-5.6.30-1-VC11-installer.exe mit PHP Version 5.6.30)
Netbeans (netbeans-8.2-html-windows-x64.exe)
die gettext-Libraries, installiert mit gettext-0.14.4.exe
PoEdit (Poedit-2.0.2-setup.exe)
Laut phpinfo() ist GetText Support enabled unter XAMPP.
Zu PoEdit habe ich keine Anleitung gefunden und mich daher zum Test erstmal an dem Beitrag unter https://www.sitepoint.com/localizing-php-applications-1/ orientiert, der aber offensichtlich eine ältere Version von PoEdit benutzt.

Dies sind meine Files gemäß obiger Anleitung in TestI18N/Locale/en_US/LC_MESSAGES:

LC_MESSAGES.po:

Code: Select all
msgid ""
msgstr ""
"Project-Id-Version: TestI18N\n"
"POT-Creation-Date: 2017-06-13 17:39+0200\n"
"PO-Revision-Date: 2017-06-13 17:54+0200\n"
"Last-Translator: \n"
"Language-Team: mh\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.2\n"
"X-Poedit-Basepath: ../../../../initializr-template-master\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en_US\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-SearchPath-0: .\n"

# Test token 1
msgid "HELLO WORLD"
msgstr "Hello World"

# Test token 2
msgid "TEST_TRANSLATION"
msgstr "Testing translation..."



LC_MESSAGES.mo:
Code: Select all
Þ•          4      L       `       a      m   ²  ~       1     =                    HELLO WORLD TEST_TRANSLATION Project-Id-Version: TestI18N
POT-Creation-Date: 2017-06-13 17:39+0200
PO-Revision-Date: 2017-06-13 17:54+0200
Last-Translator:
Language-Team: mh
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Generator: Poedit 2.0.2
X-Poedit-Basepath: ../../../../initializr-template-master
Plural-Forms: nplurals=2; plural=(n != 1);
Language: en_US
X-Poedit-SourceCharset: UTF-8
X-Poedit-SearchPath-0: .
 Hello World Testing translation...

(In der ersten und letzten Zeile von LC_MESSAGES.mo stehen noch diverse Sonderzeichen (von Notepad als NUL angegeben, die hier aber nicht angezeigt werden.).

Die Testdatei test-locale.php sieht so aus und liegt im Verzeichnis TestI18N:
Code: Select all
<?php

//phpinfo();
// I18N support information here
$language = "en_US";
putenv("LANG=" . $language);
setlocale(LC_ALL, $language);

// Set the text domain as "messages"
$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');

textdomain($domain);

echo _("HELLO_WORLD");
echo gettext("HELLO_WORLD");

?>

Beim Aufruf von test-locale.php wird nur HELLO_WORLD angezeigt, nicht aber die Übersetzung. Das ist so unter XAMPP als auch wenn ich das Projekt auf den Server hochlade.

Ich sitze schon ein paar Tage an dem Problem, ohne eine Lösung zu finden.
Hat jemand einen Tip für mich?
Müssen noch Pfade eingestellt werden oder fehlt etwas in der php.ini?

Gruß,
Henry
henry69
 
Posts: 5
Joined: 16. May 2017 13:40
XAMPP version: 5.6.30
Operating System: Windows10

Re: gettext funktioniert nicht

Postby Nobbie » 14. June 2017 08:50

Das Setzen der Umgebungsvariablen LANG würde ich mal rausnehmen aus dem PHP Script und die Variable in Windows grundsätzlich setzen. Ansonsten habe ich irgendwie in Erinnerung, dass das unter Windows nicht gut läuft und gerade die Anbindung an die richtige Codierung (auch welcher Wert genau in für LANG gesetzt werden muss) Gefummel ist. Ich habe leider im Moment keinen Windows10 Rechner mit Xampp. Das größere Problem sehe ich allerdings noch eher darin, dass es Online auch nicht geht, denn es wird nichts nutzen, wenn es lokal läuft.
Nobbie
 
Posts: 13182
Joined: 09. March 2008 13:04

Re: gettext funktioniert nicht

Postby Nobbie » 14. June 2017 09:53

Ich habe mal gegoogelt, ich finde jede Menge exzellenter Hinweise, das solltest Du mal probieren. Insbesondere hier https://stackoverflow.com/questions/104 ... ranslation steht under den Antworten auch eine auf Xampp bezogene Lösung, da wird u.a. aber "LC_ALL" und nicht nur "LANG" gesetzt.
Nobbie
 
Posts: 13182
Joined: 09. March 2008 13:04

Re: gettext funktioniert nicht

Postby henry69 » 24. June 2017 16:25

Danke für den Tip, Nobbie.
Ich habe einen Teilerfolg erreicht:
--- ext. Server ------------------------------------------------
Auf dem externen Server (vermutlich Unix o.ä) kann ich $locale auf en_US, de_DE oder es_ES setzen und bei jedem Durchlauf wird die richtige Übersetzung angezeigt.
Code: Select all
<php
    $locale = "en_US";
    //tlocale(LC_ALL, $locale);         // diese Zeile war nicht nötig
    bindtextdomain("messages", "./locale");
    // bind_textdomain_codeset("messages", 'UTF-8');     // diese Zeile war nicht nötig
    textdomain("messages");
    echo _("Hello");
 ?>

Die dazugehörigen Verzeichnisse sind
locale/de_DE/LC_MESSAGES/messages.mo
locale/en_US/LC_MESSAGES/messages.mo
locale/es_ES/LC_MESSAGES/messages.mo

--- XAMPP ---------------------------------------------------------
Unter XAMPP wird immer nur die deutsche Übersetzung angezeigt, auch wenn ich zusätzlich die Umgebungsvariablen LANGUAGE, LC_ALL und LANG testweise auf z.B. en_US oder en setze, weil das in manchen Programmversionen einen Einfluß haben soll
Auch habe ich im xampp-control-Panel Apache und mySQL gestoppt und wieder gestartet bevor ich den nächsten Versuch gemacht habe, damit der Cache neu geladen wird. Ohne Erfolg.

Auffällig ist, dass setlocale(LC_ALL, $locale) 'false' zurückgibt. Aber ich glaube gelesen zu haben, dass das unter Windows nicht funktioniert.
Code: Select all
   
    $t8 = setlocale(LC_ALL, $locale);  // returns: (bool) false
    $t12 = setlocale(LC_ALL, 0);       // returns: (string) C

Der rückgelesenen Wert in $t12 ist offensichtlich falsch.

Hat es jemand vielleicht geschafft, unter XAMPP mit gettext klarzukommen und die Ländereinstellungen zu ändern?

Henry
henry69
 
Posts: 5
Joined: 16. May 2017 13:40
XAMPP version: 5.6.30
Operating System: Windows10


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 33 guests