我已经在我的网络服务器上安装了荷兰语本地(nl_NL utf8
)(当我执行时,locale -a
我看到nl_NL utf8
了,这没关系)。
但是,我网页上的日期是英文的(我已经放在setlocale(LC_ALL, 'nl_NL');
我的页面顶部)。我已经阅读了当你在编译 php 后安装语言环境包时,我必须重新编译 php。
但是有没有其他解决方案,无需重新编译 php,让它工作?
谢谢!
我在这里总结了我发现面临类似问题的情况,因为这里显然没有建设性的答案(确实是错误的答案:setlocale()
确实改变了 的输出strftime()
)并且它对其他人有用。
返回值
返回新的当前区域设置,如果您的平台上未实现区域设置功能、指定的区域设置不存在或类别名称无效,则返回 FALSE。
因此,对于诊断系统,首先检查是否安装了正确的语言环境(nl_NL、nl_NL.UTF-8 等),无论是使用 shell 还是在 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()
单独不输出任何东西)。
解决方法可能是使用 locale-gen nl_NL, nl_NL 重新生成语言环境
此后,在某些系统上可能需要update-locale
(and )。dpkg-reconfigure locales
这可能是设计使然:setlocale()
不会使用和自动更改日期输出格式的输出。它所做的是本地化工作日和月份名称,但仅此而已。date()
strftime()
你能举一些例子来说明你是如何输出日期的,以及它们是如何无法转换的吗?
我想补充一点要记住的。
如果没有安装语言环境而您刚刚安装了新的语言环境(例如 viasudo locale-gen nl_NL.utf8
和sudo update-locale
),您还需要确保重新启动 php-fpm,例如,sudo service php8.1-fpm restart
如果您正在运行 PHP 8.1,则通过运行。
我注意到设置区域设置在控制台中可以正常工作,但不能在 Web 应用程序中。语言环境显然被缓存在进程中。