时间:2010-05-04 12:34:20

标签: php locale

我有以下代码片段:

setlocale(LC_ALL, "de");
print(strftime("%A %e %B %Y", time()));

正在打印

  

2010年5月4日星期二

而不是

  

Dienstag 4. Mai 2010

任何想法为什么?怎么解决?

8 个答案:

答案 0 :(得分:15)

您是否有de区域设置; setlocale为你回报了什么?请参阅:return values for setlocale()

另外,请检查可用语言环境列表(例如locale -a或适用于您的操作系统的任何内容)以查看其中是否de。可能的替代方案包括de_DEde_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。

中也是如此

希望能节省一些时间:)