我想得到一个服务器的当前系统区域设置(比如说windows7os)。这是为了确保不同的语言设置使用PHP中不同的代码部分。但是,我找不到任何这样做的API。谁能告诉我这个函数的名字?
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。
xzv2uavs2#
奇怪的是,通过使用setlocale函数可以获得PHP进程的语言环境,如下所示:setlocale (LC_ALL,"0");第二个参数是"locales",文档中说明:如果locales为"0",则区域设置不受影响,只返回当前设置。所以它总是返回语言环境,但是你可以告诉它什么都不设置,只返回当前的语言环境。注:这不是 * system * locale,而是PHP进程本身的locale,它通常是从system locale派生出来的,但是如果你之前调用setlocale并修改了它,可能会有所不同。我一开始以为这就是这个问题要找的,但我认为Gags的答案更正确。使用"exec()"调用"locale-a",以获得独立于PHP进程的实际系统语言。
setlocale (LC_ALL,"0");
rqdpfwrv3#
最佳答案以上从插科打诨。如果你想要的内容接受语言:当前请求的标头(如果有),请用途:
$_SERVER['HTTP_ACCEPT_LANGUAGE']
3条答案
按热度按时间btxsgosb1#
在考虑了这个问题和我的特殊设置之后,我想出了这个解决方案,看起来很有效。注意,我无法控制我需要支持哪些语言:有一些翻译文件被放到了一个预定义的地方,而系统区域设置是由其他人安装的。2在运行时,如果相应的翻译文件存在,并且安装了系统区域设置,我需要支持一种特定的语言。3这让我找到了这个解决方案:
使用下方函数
如果不能解析语言环境,我将默认使用en-IN,因为我确信已经安装了en-IN。
xzv2uavs2#
奇怪的是,通过使用setlocale函数可以获得PHP进程的语言环境,如下所示:
setlocale (LC_ALL,"0");
第二个参数是"locales",文档中说明:
如果locales为"0",则区域设置不受影响,只返回当前设置。
所以它总是返回语言环境,但是你可以告诉它什么都不设置,只返回当前的语言环境。
注:这不是 * system * locale,而是PHP进程本身的locale,它通常是从system locale派生出来的,但是如果你之前调用setlocale并修改了它,可能会有所不同。我一开始以为这就是这个问题要找的,但我认为Gags的答案更正确。使用"exec()"调用"locale-a",以获得独立于PHP进程的实际系统语言。
rqdpfwrv3#
最佳答案以上从插科打诨。如果你想要的内容接受语言:当前请求的标头(如果有),请用途: