Как использовать Locale :: acceptFromHttp без списка фильтров? - PullRequest
7 голосов
/ 26 апреля 2011

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 Ответ

6 голосов
/ 29 января 2012

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

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

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

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

...