在包含多种语言的项目的网页上,希望以不同的语言显示不同的日期:
jeudi, 15 octobre
与Donnerstag, 15. Oktober
-在同一页。
这可能吗?
lxg上面的答案大部分是正确的,但它有几个问题:
- 必须使用
strftime()
而不是date()
。这是因为PHP的date()函数忽略了setlocale()。请注意,strftime()使用的格式略有不同。 -
setlocale()的调用依赖于系统。在我的系统上,
setlocale(LC_ALL, "0")
返回字符串:LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
你肯定不想把整个字符串传递回setlocale()。解决方案是使用
LC_TIME
代替LC_ALL
。
修正后的函数如下:
function locDate($format, $locale, $time = null)
{
$oldlocale = setlocale(LC_TIME, "0"); // get the current locale
setlocale(LC_TIME, $locale);
$date = strftime($format, $time);
setlocale(LC_TIME, $oldlocale);
return $date;
}
当您使用setlocale
切换区域设置时,设置的区域设置将用于之后的所有内容。
因此,您可以创建一个自定义函数,该函数将仅为所需的输出切换区域设置,然后再切换回来。下面的代码应该可以工作:
function locDate($format, $locale, $time = null)
{
$oldlocale = setlocale(LC_ALL, "0"); // get the current locale
setlocale(LC_ALL, $locale);
$date = date($format, $time);
setlocale(LC_ALL, $oldlocale);
return $date;
}
将此用于本地化日期只是一个示例。此方法适用于基于当前语言环境给出不同输出的所有内容。
这也适用于使用gettext进行字符串转换的情况。您可以临时切换语言环境,以用不同的语言输出某些文本块(假设目录中存在翻译并且目录已加载)。