gettext übersetzt nicht

ZodiacXP

Erfahrenes Mitglied
Servus. Folgendes Script:
PHP:
<?php
error_reporting(E_ALL);

ob_start("ob_gzhandler");

setlocale(LC_ALL, "German_Germany");
bindtextdomain("test", "locale");
textdomain("default");

echo gettext("Hello World!");

echo _("Hello to World!");

?>

Soll mit dieser .pot (als .mo):
Code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-04-18 11:36+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: explain.php:10
msgid "Hello World!"
msgstr "Hallo Welt"

#: explain.php:12
msgid "Hello to World!"
msgstr "Moinsen"

Übersetzt werden. Jedoch erhalte ich keine Übersetzung.
Die default.mo liegt in ./locale/German_Germany/LC_ALL

Fehlt mir zufällig noch was?
Arbeitet jemand mit Eclipse und kann mir sagen wie man bequem von da aus .mo Dateien generieren kann?
Über shell ist immer umständlich.
 

Anhänge

  • default.zip
    391 Bytes · Aufrufe: 12
Zuletzt bearbeitet:
Ich bin mir grad nicht sicher, aber die Locale Germany_German gibt es meines Wissens nach nicht. Versuch doch mal de_DE.

Grüße
 
Die gibt es.
Hatte vorher de_DE, was mein PHP nicht angenommen hat (setlocale lieferte FALSE).
Durch setlocale(LC_ALL, NULL) konnte ich herausfinden das es "German_Germany" heißen muss.

Liegt es an einem fehlenden "liblintl", dass setlocale überhaupt LC_MESSAGES erreicht? (siehe http://de2.php.net/manual/de/function.setlocale.php)

Wenn ja, wie krieg ich das noch nachträglich in PHP?
Mein Kopf will zur Zeit garnich :p
 
Zuletzt bearbeitet:
Germany_Germany ist doch Käse... ;)

Lass dir doch einfach mal alle verfügbaren locales ausgeben.
PHP:
echo '<pre>';
system( "locale -a" );
echo '</pre>';

Dann einfach die jeweilige deutsche locale, in meinem Fall de_DE.utf8 anstelle des Germany_Germany packen und wenn es dann noch immer nicht geht, können wir weiter schauen. :)

Den Ordner namens LC_ALL musst du allerdings in LC_MESSAGES umbennen.

Btw.: Der Ordnername muss nicht genau so wie das local heissen, bei mir z. B. heisst er noch immer de, bzw. en.
Nur wenn wirklich zwischen de_AT, de_DE, UTF-8 und co. unterschieden werden soll, macht das Sinn.
 
@DeluXe:

Ich würde das nicht pauschalisieren. Was ist denn bspw. mit Windows? Den Befehl "locale" gibts da bspw. per default erstmal nicht. Da sich MS zunächst nicht um Standards (sind Locales Standard oder nur RFC?) kümmert, könnte es schon sein, das es dort eine Locale "German_Germany" gibt. Allerdings müsste man dann mal in der Microsoft Knowlegdebase nachsehen. Denn das kann tricky werden.

Vielleicht verät uns Zodiac erstmal, welches System er verwendet.
 
Stimmt, da ich selbst Linux nutze habe ich dabei nicht an Windows-Nutzer gedacht, vorallem nicht in Bezug auf locales. :)
Aber irgend so etwas muss es da natürlich schon geben, und laut ein paar Google-Ergebnissen ist "German_Germany" da doch häufiger vertreten.

Hach, Windows, ich liebe es. :)
 
Läuft auf Win Vista.

Die .mo / .po war schon in LC_ALL, LC_MESSAGES etc. Und läuft nicht.
Bald geb ich es auf und schreib was eigenes in PHP, wär aber schade um die Performance.
 

Neue Beiträge

Zurück