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

#php #localization #icu

#php #локализация #icu

Вопрос:

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 строк кода. Смотрите эту статью для примера.

Комментарии:

1. На дворе 2017 год, и Locale::acceptFromHttp он по-прежнему совершенно бесполезен.