2011-04-26 96 views
7

locale_accept_from_http是圍繞ICU的API uloc_acceptLanguageFromHTTP的一個基本包裝,但是PHP/PECL實現看起來根本有缺陷,它使用系統的整個語言環境而不是將列表作爲參數?如何使用沒有過濾器列表的Locale :: acceptFromHttp?

例如說用戶有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" 

回答

6

正確的,PHP包裝ICU的uloc_acceptLanguageFromHTTP沒有通過您的語言環境列表的功能。總體而言,intl擴展是相對較新的(PHP 5.3+),我確實發現了一些自己在下一個版本中迅速修復的錯誤。

你可以做的是:

  • Submit一個bug /功能請求。有一個類似的bug已經reported

  • Accept-Language格式實際上並不那麼複雜,我打賭你可以在20行代碼中編寫自己的解析器。一個例子見this article

+1

這是2017年,'Locale :: acceptFromHttp'仍然完全沒用。 – rlanvin 2017-01-25 15:44:22