5

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

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

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

谢谢!

4

3 回答 3

13

我在这里总结了我发现面临类似问题的情况,因为这里显然没有建设性的答案(确实是错误的答案:setlocale()确实改变了 的输出strftime())并且它对其他人有用。

PHP手册

返回值

返回新的当前区域设置,如果您的平台上未实现区域设置功能、指定的区域设置不存在或类别名称无效,则返回 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

于 2013-08-31T20:34:10.543 回答
2

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

你能举一些例子来说明你是如何输出日期的,以及它们是如何无法转换的吗?

于 2010-09-12T09:12:53.860 回答
0

我想补充一点要记住的。

如果没有安装语言环境而您刚刚安装了新的语言环境(例如 viasudo locale-gen nl_NL.utf8sudo update-locale),您还需要确保重新启动 php-fpm,例如,sudo service php8.1-fpm restart如果您正在运行 PHP 8.1,则通过运行。

我注意到设置区域设置在控制台中可以正常工作,但不能在 Web 应用程序中。语言环境显然被缓存在进程中。

于 2022-02-01T06:27:59.733 回答