При использовании 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 работать в этом стеке.
Решение похоже на грязный хак, и, конечно же, не то, на что я чувствую себя комфортно, чтобы полагаться.
Спасибо, вот и все! Другая система имела все три локали 'es_ES',' es_ES.iso88591' и 'es_ES.utf8', поэтому она работала там. Вероятно, версия '.utf8' является самой распространенной версией. – caw