当前位置:  开发笔记 > 编程语言 > 正文

如何在PHP中自动设置用户的语言环境?

如何解决《如何在PHP中自动设置用户的语言环境?》经验,为你挑选了1个好方法。

有没有一种简单的方法来解析用户的HTTP_ACCEPT_LANGUAGE并在PHP中设置语言环境?

我知道Zend框架有一个方法可以做到这一点,但我宁愿不安装整个框架只是为了使用那一点功能.

PEAR I18Nv2软件包处于测试阶段,近三年没有更改,所以如果可能的话我宁愿不使用它.

如果它可以判断服务器是否在Windows上运行,那也很好,因为Windows的语言环境字符串与世界其他地方不同......(德语是"deu"或"german"而不是"de". )



1> Stefan Gehri..:

它并不像它应该那么容易(以我的拙见).首先,您必须从中提取区域设置$_SERVER['HTTP_ACCEPT_LANGUAGE']并按其q值对其进行排序.之后你必须为每个给定的语言环境检索适当的系统语言环境,这在*nix机器上应该没问题(你可能只需要处理正确的字符集)但是在Windows上你必须将语言环境翻译成视窗语言环境,比如de_DEGerman_Germany(再次你还必须应付字符集的问题,如果你在你的应用程序,例如使用UTF-8).我认为你必须为这个问题建立一个查找表 - 并且有很多语言环境;-)

不能在另一个之后尝试一个区域设置(使用降序q值排序),直到找到匹配项setlocale()(false如果无法设置给定的区域设置,函数将返回).

但随后将面临最后一个障碍:

每个进程维护语言环境信息,而不是每个线程.如果您在Windows上的多线程服务器api(如IIS或Apache)上运行PHP,则在脚本运行时可能会遇到区域设置的突然更改,尽管脚本本身从未调用过setlocale()本身.这是因为在同一进程的不同线程中运行的其他脚本同时使用setlocale()更改了进程范围的语言环境.

(见:http://de2.php.net/manual/en/function.setlocale.php)

这意味着您可以在执行脚本期间遇到突然的区域设置更改,因为具有不同区域设置的其他用户只会访问您的网页.

因此,上述内容Zend_Locale不依赖于PHP函数setlocale()(它仅用于检索系统区域设置信息),而是使用基于Unicode CLDR项目提供的数据的系统.这使组件独立于所有这些setlocale()问题,但这也引入了一些其他缺陷,例如缺乏对区域设置感知字符串操作的支持(例如排序).

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有