在一个页面上设置多个语言环境


Set multiple locales on one page

在包含多种语言的项目的网页上,希望以不同的语言显示不同的日期:

jeudi, 15 octobreDonnerstag, 15. Oktober -在同一页。

这可能吗?

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

修正后的函数如下:

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