PHP gettext перестал работать - PullRequest
1 голос
/ 07 февраля 2012

Я на Ubuntu использую Apache.Проблема (не работает) возникает на моем рабочем веб-сервере Strato.

В моем PHP есть поддержка gettext, но он ничего не переводит, хотя строки переводятся в файл .mo.

Это мой код:

if (function_exists('bindtextdomain')) {
    $domain = 'address_db';
    echo putenv('LC_MESSAGES='.$lang);
    echo '<br />';
    echo setlocale(LC_MESSAGES, $lang);
    echo '<br />';
    $path = bindtextdomain($domain, "../locale/");
    echo $path;
    echo '<br />';
    echo file_exists($path.'/'.$lang.'/LC_MESSAGES/'.$domain.'.mo') ? 'yes' : 'no';
    echo '<br />';
    echo bind_textdomain_codeset($domain, "iso-8859-1");
    echo '<br />';
    echo textdomain($domain);
    echo '<br />';

    $available_languages = array(
        array('de_DE', _('German')),
        array('en', _('English')),
        array('nl', _('Dutch')),
        array('tr', _('Turkish'))
    );

    echo _('Cancer');
}

Вывод выглядит многообещающе:

1

/home/mu/Branches/address_db/locale
yes
iso-8859-1
address_db
Cancer

Таким образом, он находит файл, но по-прежнему не переводит «Рак».

Что это может быть?


Обновление

Это работает на моем производственном сервере, но не на моем тестовом сервере.Очень странно ...

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Переводы Gettext кэшируются, вам нужно перезапустить сервер, чтобы он принял изменения к файлам .mo.

0 голосов
/ 08 февраля 2012

Похоже, что setlocale возвращает false, оно должно вернуть новое имя локали, если оно работает правильно.

Присутствует ли значение $lang в выходных данных locale -a?Распространенной ошибкой является использование, например, de_DE вместо de_DE.utf8 или de_DE.iso88591 в вашем случае.

...