如何在没有过滤器列表的情况下使用Locale :: acceptFromHttp?

Ste*_*e-o 7 php localization icu

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"));
?>
Run Code Online (Sandbox Code Playgroud)

输出:

string(2) "fr"
Run Code Online (Sandbox Code Playgroud)

Sim*_*Sim 6

正确,PHP包装ICU uloc_acceptLanguageFromHTTP而无法传递您的语言环境列表.总的来说,intl扩展是相对较新的(PHP 5.3+),我确实发现了自己的一些错误,这些错误在下一个版本中很快得到修复.

你能做的是:

  • 提交错误/功能请求.已经报告了类似的错误.

  • Accept-Language格式真的不那么复杂,我打赌你可以在20行代码中编写自己的解析器.请参阅此文章以获取示例.