2015-03-16 2 views
2

При использовании PHP 5.5.9 на Ubuntu gettext не работает, хотя все настроено правильно.Gettext в PHP требует setlocale (LC_MESSAGES, NULL), который будет называться

Линии, которые я использую, чтобы настроить Gettext являются следующие:

putenv('LANG=es_ES.utf8'); 
setlocale(LC_MESSAGES, 'es_ES'); 
bindtextdomain('messages', './i18n'); 
bind_textdomain_codeset('messages', 'UTF-8'); 
textdomain('messages'); 

Это должно содержать все, что необходимо. Но gettext всегда возвращает строки локали по умолчанию (те, которые были переданы), а не правильные переводы.

Вызов locale -a также перечислены все языки, которые необходимы, поэтому это также настроено правильно.

phpinfo() доказывает, что Gettext (а также intl расширение) установлены правильно:

GetText Support = enabled 
intl version = 1.1.0 
ICU version = 52.1 
ICU Data version = 52.1 

Ubuntu был перезагружен, конечно.

И, наконец, каталог, который был указан, также содержит необходимые файлы перевода для gettext.

Короче говоря, все, кажется, настроено правильно, но оно не работает.

Однако, когда я добавляю setlocale(LC_MESSAGES, NULL); перед вызовом setlocale(LC_MESSAGES, 'es_ES');, gettext неожиданно работает.

Может кто-нибудь объяснить это? Хотя версии ОС и PHP не являются самыми последними, я не знаю никаких ошибок, которые мешают gettext работать в этом стеке.

Решение похоже на грязный хак, и, конечно же, не то, на что я чувствую себя комфортно, чтобы полагаться.

ответ

3

Когда вы вызываете setlocale (LC_MESSAGES, NULL), он использует имя локали из среды, поэтому это будет «es_ES.utf8».

Вы можете попробовать позвонить Setlocale (LC_MESSAGES, "es_ES.utf8") вместо этого, или даже лучше
Setlocale (LC_MESSAGES, массив ("es_ES", "es_ES.utf8"))

+0

Спасибо, вот и все! Другая система имела все три локали 'es_ES',' es_ES.iso88591' и 'es_ES.utf8', поэтому она работала там. Вероятно, версия '.utf8' является самой распространенной версией. – caw

Смежные вопросы