setlocale()返回false

时间:2010-09-12 09:07:59

标签: php linux setlocale

我已经在我的网络服务器上安装了荷兰语本地(nl_NL utf8)(当我执行locale -a时,我看到nl_NL utf8所以这很好。)

但是,我网页上的日期是英文(我已将setlocale(LC_ALL, 'nl_NL');放在我的页面顶部)。我已经阅读了在编译php后安装locale包时,我必须重新编译php。

但是有没有其他解决方案,没有重新编译php,让它工作?

谢谢!

2 个答案:

答案 0 :(得分:10)

我在这里总结了我遇到的类似问题,因为这里显然没有建设性的答案(错误的答案,确实:setlocale()确实改变了strftime()的输出)它可以对别人有用。

PHP manual

  

返回值

     

返回新的当前语言环境,如果是语言环境功能,则返回FALSE   未在您的平台上实现,指定的区域设置不会   存在或类别名称无效。

因此对于诊断程序,首先使用shell或PHP system('locale -a')检查是否安装了正确的语言环境(nl_NL,nl_NL.UTF-8等)。在一些ubuntu系统上有一个安装语言环境的脚本,例如。 /usr/share/locales/install-language-pack nl_NL但也可以考虑使用apt-get进行安装。 (对于异国情调的语言环境,还要检查是否支持语言环境:在某些系统上/usr/share/i18n/SUPPORTED)。

然后你可以使用var_dump(setlocale('nl_NL'));得到setlocale()的输出(因为setlocale()单独不输出任何东西)。

治愈可能是用locale-gen nl_NL,nl_NL

重新生成语言环境

此后,某些系统可能需要update-locale(和dpkg-reconfigure locales)。

答案 1 :(得分:2)

这可能是设计使然:setlocale()不会使用date()strftime()自动更改输出日期格式的输出。它的作用是本地化工作日和月份名称,但没有别的。

您能否举例说明如何输出日期,以及它们如何转换?