Это то, что у меня работает на CE ZendServer на linux и сервер Apache на NetBsd
Файл «message.po» генерируется из корня приложения:
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-04-30 19:38+0200\n"
"PO-Revision-Date: 2013-04-12 14:00+0000\n"
"Last-Translator: gin(e) <ginex@posta.indivia.net>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: eo\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: include/apteryx_text.php:3
msgid "email:"
msgstr "Retpoŝtadreso:"
Это новый древовидный каталог:
res/locale/
de_DE/
LC_MESSAGES/
messages.mo
eo_EO/
LC_MESSAGES/
messages.mo
eo->eo_EO (symlink)
Я должен добавить символическую ссылку "eo", потому что в моей системе поддерживаются только три локали эсперанто:
eo
eo.iso88593
eo.utf8
скомпилировано с:
sudo locale-gen eo
sudo locale-gen eo.iso88593
sudo locale-gen eo.utf8
sudo update-locale
sudo dpkg-reconfigure locales
и на данный момент мой код locale.php:
$charset="UTF-8";
$gettext_domain="messages";
$locale_dir="res/locale";
putenv("LC_ALL=$lang");
$l=split("_",$lang);
/* not in all system and not all locales got the classic name this stupid method try to solve it*/
if(! setlocale(LC_ALL, $lang.".".$charset))
if(! setlocale(LC_ALL, $lang))
if(! setlocale(LC_ALL,$l[0].".".$charset))
setlocale(LC_ALL,$l[0]);
bindtextdomain($gettext_domain, "res/locale");
textdomain($gettext_domain);
bind_textdomain_codeset($gettext_domain, $charset);
потому что без него gettext не работает. Я думаю, что каталог локали должен иметь то же имя, что и язык, заданный с помощью setlocale. Другое дело - проверять каждую функцию, которая называется return. Они никогда не должны возвращать NULL или FALSE. Вы можете сделать это простым способом:
var_dump(bindtextdomain($gettext_domain, "res/locale"));
var_dump(textdomain($gettext_domain));
..and so on..
Последний, но не список, не забудьте установить правильное разрешение apache для всех файлов .mo, перезапустить ваш сервер apache и проверить с помощью phpinfo (), что «GetText Support» «включена».