#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
он по-прежнему совершенно бесполезен.