2010-09-12 2 views
1

Я установил голландский локальный (nl_NL utf8) на своем веб-сервере (при исполнении locale -a Я вижу nl_NL utf8, так что это все в порядке).setlocale() возвращает false

Однако даты на моей веб-странице написаны на английском языке (я положил setlocale(LC_ALL, 'nl_NL'); в начало страницы). Я прочитал, когда вы устанавливаете пакет локали после компиляции php, мне нужно перекомпилировать php.

Но есть ли другое решение без перекомпиляции php, чтобы оно работало?

Спасибо!

+1

На мой взгляд, 'setlocale()' является * катастрофой *, потому что у него нет согласованной схемы именования для локалей - они варьируются от сервера к серверу. Я искренне рекомендую изучить альтернативы, такие как функции локализации Zend Framework (http://framework.zend.com/manual/en/zend.locale.parsing.html) –

ответ

2

Это может быть дизайн: setlocale() не происходит автоматическое изменение выходного формата вывода даты с использованием date() и strftime(). То, что он делает, это локализовать имена дней недели и месяца, но ничего больше.

Можете ли вы показать некоторые примеры того, как вы выдаете даты и как они не могут быть преобразованы?

+0

Я использую Smarty (т.е.: {$ memberdate | date_format: «% A,% d% B% Y»}), но я использовал один и тот же код на другом веб-сервере без каких-либо проблем (файлы локалей уже были установлены до компиляции php). – Arjen

+0

@ Арджень ах, я вижу. Тогда мой ответ не сортирует его. Для добавления языкового стандарта требуется * переустановка * PHP звучит немного странно для меня: это официальная информация? –

+0

См. Http://www.php.net/manual/en/function.setlocale.php#86246 – Arjen

6

Я суммирую здесь то, что я нашел, столкнувшись с аналогичной проблемой, так как здесь, по-видимому, не было конструктивного ответа (неправильный, действительно: setlocale() действительно меняет вывод strftime()), и он может быть полезен другим.

PHP manual говорит

Возвращаемые значения

Возвращает новую текущую локаль, или FALSE, если функциональные возможности локаль не реализована на вашей платформе, указанная локаль не существует или название категории инвалид.

так и для diagnosys, сначала проверьте, что установлен правильный языковой стандарт (nl_NL, nl_NL.UTF-8 и т.д.), либо с помощью оболочки или в PHP system('locale -a'). На некоторых системах ubuntu есть скрипт для установки локали, например. /usr/share/locales/install-language-pack nl_NL, но установка с помощью apt-get может также рассматриваться. (Для экзотических локалей также проверьте, поддерживается ли локаль: на некоторых системах /usr/share/i18n/SUPPORTED).

Тогда вы можете получить вывод setlocale(), используя var_dump(setlocale('nl_NL')); (поскольку только setlocale() ничего не выводит).

Для лечения может быть регенерировать языковой стандарт с локали-GEN nl_NL, nl_NL

После update-localedpkg-reconfigure locales) могут потребоваться в некоторых системах.