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

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

3 ответов


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

setlocale(LC_TIME, "");

перед использованием новых установленных локалей необходимо перезапустить php.


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

. /etc/default/locale

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