在包含各种语言项目的网页上,需要以不同语言显示不同的日期:
<{1}}旁边的 jeudi, 15 octobre
- 位于同一页面上。
我可能吗?
答案 0 :(得分:6)
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;
}
答案 1 :(得分:4)
当您使用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进行字符串翻译,这也有效。您可以临时切换语言环境以使用其他语言输出某些文本块(假设您的目录中存在转换并且已加载目录)。