为什么PHP不接管系统默认的语言环境设置?

时间:2017-07-06 10:01:29

标签: php locale

root@35395c2d434a:/var/www/project# locale -a
C
C.UTF-8
POSIX
en_GB.utf8
root@35395c2d434a:/var/www/project# echo $LC_MONETARY
en_GB.UTF-8
root@35395c2d434a:/var/www/project#  php -r "echo setlocale(LC_MONETARY, 0).\"\n\";"
C
root@35395c2d434a:/var/www/project#

如您所见,我在en_GB.UTF-8中安装并设置了LC_MONETARY环境变量。但PHP并不关心并将其设置为C无论如何。是否有PHP配置,因此PHP将此系统设置为,所以我不必通过setlocale(LC_MONETARY, 'en_GB.UTF- 8')在每个PHP脚本中手动设置它?

1 个答案:

答案 0 :(得分:0)

这似乎是C程序的限制。 PHP的setlocale函数只返回任何输出返回C的setlocale。来自http://php.net/manual/en/function.setlocale.php

  

setlocale()的返回值取决于PHP所在的系统   运行。它准确返回系统setlocale函数   回报。

来自http://www.cplusplus.com/reference/clocale/setlocale/

  

大多数运行环境都设置了某些区域设置信息   根据用户喜好或本地化。但是,独立   在这个系统区域设置中,所有C程序在启动时都具有“C”语言环境   set,这是一个相当中立的语言环境,具有最少的语言环境信息   这允许程序的结果是可预测的。为了使用   在环境中设置的默认语言环境,可以调用此函数   用“”作为参数区域设置。

     

在程序启动时,选择的语言环境是“C”语言环境,即   与通过调用setlocale(LC_ALL,“C”)设置的相同。

     

可以选择环境中选择的区域设置   调用setlocale(LC_ALL,“”)。

据我所知,默认情况下无法为所有C程序设置此项,也不能为PHP设置此项。

如果有人知道如何为所有PHP脚本执行此操作,我会接受这个答案。