PHP-获取当前区域设置

JRO*_*ROB 15 php

我正在使用此功能设置网站的区域设置:

function set_locale($locale) { // ie. en, es

    $language = $locale;
    putenv("LANG=".$language); 
    setlocale(LC_ALL, $language);
    $domain = "phd";
    bindtextdomain($domain, "locale"); 
    bind_textdomain_codeset($domain, 'UTF-8');

    textdomain($domain);

} // end set_locale
Run Code Online (Sandbox Code Playgroud)

当有人访问该网站时,他们可以更改其区域设置.我想要做的是在网站的其他地方检索当前的语言环境.

我该怎么做?

Jer*_*via 39

您可以这样调用setlocale,它将返回当前本地.

$currentLocale = setlocale(LC_ALL, 0);
echo $currentLocale; //outputs C/en_US.UTF-8/C/C/C/C on my machine
Run Code Online (Sandbox Code Playgroud)

这是来自php.net的文档,由@JROB评论

现场

如果locale为"0",则不会影响区域设置,仅返回当前设置.

如果locale为NULL或空字符串"",则将根据与上述类别具有相同名称的环境变量的值或"LANG"设置区域设置名称.

如果locale是一个数组或后跟其他参数,则尝试将每个数组元素或参数设置为新的语言环境,直到成功为止.如果在不同系统上以不同名称知道语言环境或为可能不可用的语言环境提供回退,这将非常有用.

  • PHP 8.0+ 的更新。我使用 `setlocale(LC_ALL, 'en_US');` 但 `setlocale(LC_ALL, 0);` 仅返回 `C`。 (3认同)
  • 为了澄清,我已经从 php.net 发布了这个:`setlocale (int $category, string $locale)`。如果语言环境为“0”,则语言环境设置不受影响,仅返回当前设置。 (2认同)

PHP*_*Pst 6

两年后的另一个答案!

您可以简单地用户Locale::getDefault()locale_get_default()获取当前区域设置.

http://php.net/manual/en/locale.getdefault.php

  • 不,没有。它获取*默认*区域设置,而不是*当前*区域设置。根据定义,默认区域设置与当前区域设置不同。当您在区域设置之间切换时,setlocale(LC_WHATEVER, 0) 仍然是检索当前区域设置的方法。 (3认同)