在一个页面上设置多个区域设置

时间:2015-10-08 08:54:00

标签: php

在包含各种语言项目的网页上,需要以不同语言显示不同的日期:

<{1}}旁边的

jeudi, 15 octobre - 位于同一页面上。

我可能吗?

2 个答案:

答案 0 :(得分:6)

lxg上面的回答大多是正确的,但它有几个问题:

  1. 您必须使用strftime()代替date()。这是因为PHP的date()函数忽略了setlocale()。请注意,strftime()使用的格式略有不同。
  2. 对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

  3. 更正后的功能如下:

    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进行字符串翻译,这也有效。您可以临时切换语言环境以使用其他语言输出某些文本块(假设您的目录中存在转换并且已加载目录)。