При использовании PHP 5.5.9 в Ubuntu gettext не работает, хотя все настроено правильно.
Вот строки, которые я использую для настройки 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 с этим стеком.
Решение выглядит как грязный взлом, и, конечно, не то, на что мне удобно полагаться.
Когда вы вызываете setlocale (LC_MESSAGES, NULL), он использует имя локали из окружения, поэтому это будет «es_ES.utf8».
Вместо этого вы можете попробовать вызвать setlocale (LC_MESSAGES, «es_ES.utf8») или даже лучше
setlocale (LC_MESSAGES, массив («es_ES», «es_ES.utf8»))
Других решений пока нет …