我有以下代码片段:
setlocale(LC_ALL, "de");
print(strftime("%A %e %B %Y", time()));
正在打印
2010年5月4日星期二
而不是
Dienstag 4. Mai 2010
任何想法为什么?怎么解决?
答案 0 :(得分:15)
您是否有de
区域设置; setlocale
为你回报了什么?请参阅:return values for setlocale()。
另外,请检查可用语言环境列表(例如locale -a
或适用于您的操作系统的任何内容)以查看其中是否de
。可能的替代方案包括de_DE
或de_DE.utf8
等等。
在Debian中,要生成新的语言环境,请运行以下命令:
dpkg-reconfigure locales
然后选择你想要的那些。
答案 1 :(得分:5)
如果您的系统上未安装区域设置,则设置区域设置将无效。
答案 2 :(得分:4)
对我来说,以下是诀窍:
setlocale(LC_TIME, "");
结合:
echo strftime("%d. %B %Y");
这就是我以德语格式获取当前日期的方式。希望能有所帮助。
答案 3 :(得分:3)
尝试将LC_ALL
设置为“de_DE”。在我的系统上,直到我这样做才行。
$ LC_ALL=de date
Tue May 4 07:40:13 CDT 2010
$ LC_ALL=de_DE date
Di 4. Mai 07:39:27 CDT 2010
答案 4 :(得分:3)
我在Raspberry Pi上使用Ubuntu,尝试使用葡萄牙语本地日期时遇到同样的问题:
setlocale(LC_TIME, "C");
echo strftime("%A");
echo setlocale(LC_TIME, "pt_PT");
echo strftime(" in Portuguese %A");
然后使用命令 local -a 进行检查,pt_PT不在列表中,所以我添加了 sudo / usr / share / locales / install-language-pack pt_PT 并再次运行 local -a :那里是 pt_PT.utf8 。 在此之后,结果仍然相同:pt_PT的预期输出仍然是英语。 以下是使事情对我有用的细微差别:
···
echo setlocale(LC_TIME, "pt_PT.utf8");
···
所以,我必须将 pt_PT 变成 pt_PT.utf8
答案 5 :(得分:2)
locale -a
locale-gen nb_NO.UTF-8
locale-gen nb_NO
update-locale
locale -a
restart php5-fpm
答案 6 :(得分:0)
也许你没有安装语言环境,所以如果你在ubuntu上,你可以用" locale -a"来查看列表。没有cuotes,并检查文件/ usr / share / i18n / SUPPORTED中的可用语言,他们生成了" locale-gen de_DE"
所需的语言环境希望这对你有用。
答案 7 :(得分:0)
请注意,在Linux中生成新的语言环境后,您可能需要重新启动httpd和php-fpm服务。
没有重启php(7.2)找不到它们,即使列在locale -a。
中也是如此希望能节省一些时间:)