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

bcm*_*cfc 5 php date internationalization

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

我以为我能做到这一点:

setlocale(LC_ALL, 'de_DE.UTF-8');
echo strftime('%A %B %Y');
Run Code Online (Sandbox Code Playgroud)

但输出是:

Wednesday April 2011
Run Code Online (Sandbox Code Playgroud)

虽然我原以为:

Mittwoch April 2011
Run Code Online (Sandbox Code Playgroud)

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

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

Pas*_*TIN 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);
Run Code Online (Sandbox Code Playgroud)

将输出:

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
Run Code Online (Sandbox Code Playgroud)


Álv*_*lez 2

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

返回新的当前语言环境,如果您的平台上未实现语言环境功能、指定的语言环境不存在或类别名称无效,则返回 FALSE。

所以你需要检查返回值。

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