首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setlocale()返回false

setlocale()返回false
EN

Stack Overflow用户
提问于 2010-09-12 17:07:59
回答 3查看 8K关注 0票数 5

我已经在我的when服务器上安装了荷兰本地(nl_NL utf8) (当我执行locale -a时,我看到nl_NL utf8,所以这是正确的)。

然而,我网页上的日期是英文的(我把setlocale(LC_ALL, 'nl_NL');放在我的网页顶部)。我读到当你在编译php之后安装一个locale包时,我必须重新编译php。

但是,有没有其他的解决方案,不用重新编译php,就能让它工作呢?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-12 17:12:54

这可能是由于设计原因:setlocale()不会自动更改使用date()strftime()输出的日期格式的输出。它所做的是本地化星期和月份的名称,而不是其他的。

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

票数 2
EN

Stack Overflow用户

发布于 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)。

票数 13
EN

Stack Overflow用户

发布于 2022-02-01 06:28:00

我想补充另一件要牢记的事情。

如果没有安装区域设置,而您只是安装了新的区域设置(例如,通过sudo locale-gen nl_NL.utf8sudo update-locale),则还需要确保重新启动php-fpm,例如,如果您运行的是PHP8.1,则可以运行sudo service php8.1-fpm restart

我注意到,在控制台中设置区域设置会很好,但在web应用程序中就不行了。很明显,区域设置被缓存在进程中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3694294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档