如何让PHP使用国际化日期?

时间:2011-04-13 16:25:01

标签: php date internationalization

我正在尝试将PHP日期用于跨语言。语言代码将根据登录用户的语言设置提供。

我以为我可以这样做:

setlocale(LC_ALL, 'de_DE.UTF-8');
echo strftime('%A %B %Y');

但输出是:

Wednesday April 2011

虽然我原以为:

Mittwoch April 2011

(四月与英语和德语相同)

这不是使用strftime功能的正确方法吗?如果没有,是否有其他方法?

4 个答案:

答案 0 :(得分:5)

您可以使用IntlDateFormatter(PHP> = 5.3)


引用IntlDateFormatter::format()手册页上给出的示例:

$fmt = new IntlDateFormatter( "en_US" ,IntlDateFormatter::FULL,IntlDateFormatter::FULL,'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
echo "First Formatted output is ".$fmt->format(0);
$fmt = new IntlDateFormatter( "de-DE" ,IntlDateFormatter::FULL,IntlDateFormatter::FULL,'America/Los_Angeles',IntlDateFormatter::GREGORIAN  );
echo "Second Formatted output is ".$fmt->format(0);

将输出:

First Formatted output is Wednesday, December 31, 1969 4:00:00 PM PT
Second Formatted output is Mittwoch, 31. Dezember 1969 16:00 Uhr GMT-08:00

答案 1 :(得分:2)

setlocale()返回一个值,该值可以为FALSE:

  

返回新的当前语言环境,或   如果语言环境功能是,则为FALSE   没有在你的平台上实现,   指定的区域设置不存在或   类别名称无效。

所以你需要检查返回值。

请注意,区域设置名称因平台而异,de_DE.UTF-8看起来像典型的Unix名称。它是Unix服务器吗?如果是这样,请确保计算机实际安装了此类语言环境。

答案 2 :(得分:0)

看起来你错过了一些代码。答案在这里找到:
http://php.net/manual/en/function.setlocale.php

/* try different possible locale names for german as of PHP 4.3.0 */ $loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge'); echo "Preferred locale for german on this system is '$loc_de'";

?>

答案 3 :(得分:0)

根据手册,您对strftime()的使用似乎是正确的。我会质疑你的setLocale()设置。

在另一个论坛上查看here与您的问题非常相似的问题。