gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:34:01 26 4
gpt4 key购买 nike

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

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

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

如果它能确定服务器是否在 Windows 上运行也很好,因为 Windows 的区域设置字符串与世界其他地方的不同......(德语是“deu”或“german”而不是“德”。)

最佳答案

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

不,您可以一个接一个地尝试语言环境(按降序 q 值排序)直到使用 setlocale() 找到匹配项(如果无法设置给定的语言环境,该函数将返回 false)。

但是接下来还有最后一个障碍需要应对:

The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server api like IIS or Apache on Windows you may experience sudden changes of locale settings while a script is running although the script itself never called setlocale() itself. This happens due to other scripts running in different threads of the same process at the same time changing the processwide locale using setlocale().

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

这意味着您可能会在执行脚本期间遇到突然的语言环境更改,因为具有不同语言环境设置的另一个用户刚刚点击了您的网页。

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

关于php - 如何在 PHP 中自动设置用户的语言环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/326891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com