locale_accept_from_http
является базовой оболочкой API ICU 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"
Правильно, PHP обертывает uloc_acceptLanguageFromHTTP
ICU без возможности передать ваш список uloc_acceptLanguageFromHTTP
. В целом, расширение intl
относительно новое (PHP 5.3+), и я действительно нашел пару ошибок, которые были быстро исправлены в следующей версии.
Что вы можете сделать, так это:
Отправьте запрос об ошибке / функции. Об этом сообщается аналогичная ошибка.
Формат Accept-Language на самом деле не такой сложный, я уверен, вы могли бы написать свой собственный парсер в 20 строках кода. См. Эту статью для примера.