2010-09-12 196 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)的替代方案。 – 2010-09-12 09:15:37

回答

2

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

你能举例说明你如何输出日期,以及它们如何转换失败?

+0

我正在使用Smarty(即:{$ memberdate | date_format:“%A,%d%B%Y”}),但我在另一个web服务器上使用了相同的代码,没有任何问题(在编译php之前已经安装了语言环境文件)。 – Arjen 2010-09-12 09:19:11

+0

@Arjen啊,我明白了。然后我的回答没有排序。添加语言环境需要*重新安装* PHP对我来说听起来有点奇怪,但是:是官方信息吗? – 2010-09-12 09:25:54

+0

见http://www.php.net/manual/en/function.setlocale.php#86246 – Arjen 2010-09-12 09:27:22

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上)。

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

对于固化可能是再生区域与区域设置根nl_NL,nl_NL

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