PHP gettext

heyho

ich dreh grad etwas durch. gettext will einfach nicht funktionieren, jemand eine idee wo hier nen fehler ist?

Code:
easteregg@x201s:~/languageText$ tree
.
├── locale
│** └── de_DE.utf8
│**     └── LC_MESSAGES
│**         ├── default.mo
│**         └── default.po
└── test.php

die messages po wie sie von poedit erstellt wurde

Code:
easteregg@x201s:~/languageText$ cat locale/de_DE.utf8/LC_MESSAGES/default.po 
msgid ""
msgstr ""
"Project-Id-Version: test\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-09-03 13:48+0100\n"
"PO-Revision-Date: 2013-09-03 13:49+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SourceCharset: utf-8\n"
"X-Poedit-SearchPath-0: /home/easteregg/languageText\n"

# comment
#: /home/easteregg/languageText/test.php:17
msgid "test"
msgstr "win"

und die php datei um die daten aufzurufen:

PHP:
<?php


$directory = dirname(__FILE__).'/locale';
$domain = 'default';
$locale ="de_DE.utf8";

//putenv("LANG=".$locale); //not needed for my tests, but people say it's useful for windows

setlocale( LC_MESSAGES, $locale);
bindtextdomain($domain, $directory);
textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');

echo _("test");

wenn ich das ausführe bekomme ich auf meinem laptop

Code:
test

statt

Code:
win

sieht jemand den fehler?
 
ich möcht weinen, 2 stunden fummeln... ich hatte die locales nicht installiert.
 
hm, das ist immernoch mist.

wenn ich keine "fremden" locales nutzen kannst ist das alles grütze, es gibt zwar ein paar workarounds , aber sind die alles andere als sauber zu nutzen. es ist zum kotzen, warum das nicht sauber funktioniert ist mir schleierhaft. die ganze gettext implementierung in php is irgendwie nen einziger fail.

die meisten großen frameworks wie laravel und co setzen tatsache auf riesen php array lösungen, von wo die daten dann eingelesen werden.


warum man ohne auf dem system installiertes locale bei php die messages nicht laden kann ist mir aber schleierhaft. bei anderen programmen scheint sowas doch auch zu funktionieren oder? warum gibts diese limitierung?
 
Zurück
Oben