如何在PHP中获取当前语言环境

fcg9iug3  于 2023-02-03  发布在  PHP
关注(0)|答案(3)|浏览(181)

我想得到一个服务器的当前系统区域设置(比如说windows7os)。这是为了确保不同的语言设置使用PHP中不同的代码部分。
但是,我找不到任何这样做的API。
谁能告诉我这个函数的名字?

btxsgosb

btxsgosb1#

在考虑了这个问题和我的特殊设置之后,我想出了这个解决方案,看起来很有效。注意,我无法控制我需要支持哪些语言:有一些翻译文件被放到了一个预定义的地方,而系统区域设置是由其他人安装的。2在运行时,如果相应的翻译文件存在,并且安装了系统区域设置,我需要支持一种特定的语言。3这让我找到了这个解决方案:
使用下方函数

function getLocale($lang)
{
    $locs = array();
    exec('locale -a', $locs);

    $locale = 'en-IN';
    foreach($locs as $l)
    {
        $regex = "/$lang\_[A-Z]{2}$/";
        if(preg_match($regex, $l) && file_exists(TRANSROOT . "/$lang.php"))
        {
            $locale = $l;
            break;
        }
    }

    return $locale;
}

如果不能解析语言环境,我将默认使用en-IN,因为我确信已经安装了en-IN。

xzv2uavs

xzv2uavs2#

奇怪的是,通过使用setlocale函数可以获得PHP进程的语言环境,如下所示:
setlocale (LC_ALL,"0");
第二个参数是"locales",文档中说明:
如果locales为"0",则区域设置不受影响,只返回当前设置。
所以它总是返回语言环境,但是你可以告诉它什么都不设置,只返回当前的语言环境。
注:这不是 * system * locale,而是PHP进程本身的locale,它通常是从system locale派生出来的,但是如果你之前调用setlocale并修改了它,可能会有所不同。我一开始以为这就是这个问题要找的,但我认为Gags的答案更正确。使用"exec()"调用"locale-a",以获得独立于PHP进程的实际系统语言。

rqdpfwrv

rqdpfwrv3#

最佳答案以上从插科打诨。如果你想要的内容接受语言:当前请求的标头(如果有),请用途:

$_SERVER['HTTP_ACCEPT_LANGUAGE']

相关问题