Как использовать Locale:: acceptFromHttp без списка фильтров?

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"

1 ответов


правильно, PHP обертывает ICU uloc_acceptLanguageFromHTTP без возможности передать свой список локалей. В целом, intl расширение относительно новое (PHP 5.3+), и я нашел пару ошибок, которые были быстро исправлены в следующем выпуске.

что вы могли бы сделать это:

  • отправить запрос на ошибку / функцию. Уже есть похожая ошибка об этом сообщает.

  • формат Accept-Language действительно не так сложен, Бьюсь об заклад, вы можете написать свой собственный парсер в пределах 20 строк кода. См.в этой статье для примера.