PHP Gettext не работает

Вот мой ./locale/fr/LC_MESSAGES/messages.po файл:

msgid "NO GOOD"
msgstr "IT WORKED!"

Команда, используемая для создания файла .mo:

$ msgfmt -o locale/fr/LC_MESSAGES/messages.mo locale/fr/LC_MESSAGES/messages.po

Мой файл PHP (запускается через интерфейс командной строки, в целях тестирования, от имени пользователя root).

<?php 
    bindtextdomain('messages','./locale');
    textdomain('messages');
    setlocale(LC_MESSAGES, 'fr');
    echo gettext("NO GOOD");

Вот мой вывод:

$ NO GOOD

Информация о PHP:

GetText Support => enabled

Любые идеи, почему это может не сработать?


person Ian    schedule 30.09.2012    source источник
comment
Совет: при работе с gettext всегда проверяйте возвращаемые функцией значения.   -  person Ja͢ck    schedule 01.10.2012
comment
Есть несколько причин, по которым это может не сработать. Для начала вам нужно указать кодировку вашего MO-файла, используя bind_textdomain_codeset(). Вам также необходимо убедиться, что в вашей системе установлен соответствующий файл локали (при условии, что вы используете сервер на базе Linux), а также что этот файл локали имеет правильную кодировку. Подробнее читайте в этой статье: blog.terresquall.com/2020 /09/устранение неполадок-php-gettext   -  person John Doe    schedule 06.09.2020


Ответы (2)


Оказывается, причина, по которой это не сработало, заключается в том, что выбранная мной локаль должна быть распознана системой.

В моем случае fr не является допустимой локалью, мне пришлось выбрать fr_FR.UTF-8, которую система распознает...

person Ian    schedule 30.09.2012
comment
К вашему сведению, функция setlocale() вернет false, если указанная вами локаль не была распознана. Returns the new current locale, or FALSE if the locale functionality is not implemented on your platform, the specified locale does not exist or the category name is invalid. - person Gavin; 23.02.2014

  1. убедитесь, что язык поддерживается
  2. установить gettext и включить его в php.ini
  3. проверьте правильный формат po (он должен иметь заголовки)
  4. убедитесь, что для mbstring.internalcoding установлено значение UTF-8 () раскомментируйте для utf8 в php.ini)
  5. перезапустить php и веб-сервер
person Maskipaps    schedule 05.10.2015