我已经在我的when服务器上安装了荷兰本地(nl_NL utf8) (当我执行locale -a时,我看到nl_NL utf8,所以这是正确的)。
然而,我网页上的日期是英文的(我把setlocale(LC_ALL, 'nl_NL');放在我的网页顶部)。我读到当你在编译php之后安装一个locale包时,我必须重新编译php。
但是,有没有其他的解决方案,不用重新编译php,就能让它工作呢?
谢谢!
发布于 2010-09-12 17:12:54
这可能是由于设计原因:setlocale()不会自动更改使用date()和strftime()输出的日期格式的输出。它所做的是本地化星期和月份的名称,而不是其他的。
您能举例说明如何输出日期,以及它们如何无法转换吗?
发布于 2013-09-01 04:34:11
我在这里总结了我在面临类似问题时发现的问题,因为这里显然没有建设性的答案(实际上是一个错误的答案:setlocale()确实改变了strftime()的输出),它可以对其他人有用。
PHP manual说
返回值
返回新的当前区域设置;如果平台上未实现区域设置功能、指定的区域设置不存在或类别名称无效,则返回FALSE。
因此,对于diagnosys,首先要检查是否安装了正确的语言环境(nl_NL、nl_NL.UTF-8等),无论是使用外壳还是在PHP中。在一些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)。
发布于 2022-02-01 06:28:00
我想补充另一件要牢记的事情。
如果没有安装区域设置,而您只是安装了新的区域设置(例如,通过sudo locale-gen nl_NL.utf8和sudo update-locale),则还需要确保重新启动php-fpm,例如,如果您运行的是PHP8.1,则可以运行sudo service php8.1-fpm restart。
我注意到,在控制台中设置区域设置会很好,但在web应用程序中就不行了。很明显,区域设置被缓存在进程中。
https://stackoverflow.com/questions/3694294
复制相似问题