locale_accept_from_http
是ICU的API uloc_acceptLanguageFromHTTP
的基本包装,但PHP / PECL实现似乎存在根本缺陷,它使用系统整套语言环境而不是将列表作为参数?
例如,假设用户有HTTP_ACCEPT_LANGUAGE = zh-HK;q=0.2, fr
,即用户阅读繁体中文或法文,更喜欢后者。例如,您有一个提供繁体中文和简体中文文章的新闻网站。使用API
Locale::acceptFromHttp
只会返回fr
。
<?php
var_dump (Locale::acceptFromHttp ("zh-HK;q=0.2,fr"));
?>
输出:
string(2) "fr"
答案 0 :(得分:6)
正确,PHP包装ICU的uloc_acceptLanguageFromHTTP
,但无法传递您的语言环境列表。总的来说,intl
扩展是相对较新的(PHP 5.3+),我确实发现了一些错误,这些错误很快就会在下一个版本中得到修复。
你能做的是:
Accept-Language格式真的不那么复杂,我打赌你可以在20行代码中编写自己的解析器。有关示例,请参阅this article。