PHP setlocale не работает даже с существующими локалями

ПРОБЛЕМА РЕШЕНА (см. ниже)

Я сгенерировал локали на своем сервере, я подтвердил, что они существуют (моя локаль -a указана ниже), но когда я использую:

    setlocale(LC_TIME,'fr_FR');
    or setlocale(LC_TIME,'fr_FR.utf8');

это вообще не работает.

Образец:

    <?php
    setlocale(LC_TIME,'fr_FR.utf8');
    echo 'locale - '.setlocale(LC_TIME,'0');
    echo ' : month - '.strftime('%B');
    echo '<br />';

    setlocale(LC_TIME,'fr_FR');
    echo 'locale - '.setlocale(LC_TIME,'0');
    echo ' : month - '.strftime('%B');
    echo '<br />';

    setlocale(LC_TIME,'fr-FR');
    echo 'locale - '.setlocale(LC_TIME,'0');
    echo ' : month - '.strftime('%B');
    echo '<br />';

    setlocale(LC_TIME,'fr');
    echo 'locale - '.setlocale(LC_TIME,'0');
    echo ' : month - '.strftime('%B');
    echo '<br />';

    setlocale(LC_TIME,'french');
    echo 'locale - '.setlocale(LC_TIME,'0');
    echo ' : month - '.strftime('%B');
    echo '<br />';
    ?>

Результаты:

    locale - C : month - October
    locale - C : month - October
    locale - C : month - October
    locale - C : month - October
    locale - C : month - October

locale -a (показывает локали fr):

    fr_BE.utf8
    fr_CA.utf8
    fr_CH.utf8
    fr_FR.utf8
    fr_LU.utf8

Спасибо вам за помощь!


person kambythet    schedule 13.10.2013    source источник


Ответы (3)


Хорошо, после публикации этого я попробовал еще одну вещь. Поэтому для тех, кто испытывает ту же проблему, вам нужно сначала установить это, прежде чем устанавливать новую локаль:

setlocale(LC_TIME, "");
person kambythet    schedule 13.10.2013
comment
Убедитесь, что локали установлены и доступны на вашем сервере. Они должны существовать, чтобы их можно было использовать. locale -a - person kambythet; 24.04.2014
comment
Это как-то сработало для меня, но я хотел бы знать, почему? (PS: примите свой ответ :)) - person user2019515; 12.05.2014
comment
Если локаль имеет значение NULL или пустая строка, имена локалей будут установлены из значений переменных среды с теми же именами, что и у вышеуказанных категорий, или из LANG. php.net/setlocale - person kambythet; 12.05.2014

Вы должны перезапустить php, прежде чем использовать новые установленные локали.

person John    schedule 10.01.2015

Если вы хотите использовать локаль системы по умолчанию в Apache2, вам просто нужно добавить (или раскомментировать) следующую строку в файле /etc/apache2/envvars:

. /etc/default/locale

Подумайте о перезапуске apache2 после этой операции и очистите свой потенциальный кеш, чтобы проверить, что локаль хорошо подходит для PHP.

person lenybernard    schedule 02.08.2015