Gettext в PHP требует вызова setlocale (LC_MESSAGES, NULL)

При использовании 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 с этим стеком.

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

2

Решение

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]