PHP Conference Japan 2024

Locale::acceptFromHttp

locale_accept_from_http

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)

Locale::acceptFromHttp -- locale_accept_from_http嘗試根據 HTTP "Accept-Language" 標頭找出最佳可用地區設定

描述

物件導向風格

public static Locale::acceptFromHttp(字串 $header): 字串|false

程序風格

locale_accept_from_http(字串 $header): 字串|false

嘗試找出符合 HTTP "Accept-Language" 標頭所請求的語言清單的地區設定。

參數

header

根據 RFC 2616 格式包含 "Accept-Language" 標頭的字串。

回傳值

對應的地區設定識別碼。

header 的長度超過 INTL_MAX_LOCALE_LEN 時,會回傳 false

範例

範例 1 locale_accept_from_http() 範例

<?php
$locale
= locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo
$locale;
?>

範例 2 OO 範例

<?php
$locale
= Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo
$locale;
?>

以上範例會輸出

en_US

參見

新增筆記

使用者貢獻的筆記 5 筆筆記

46
Adam Lange
12 年前
值得一提的是,如果使用者瀏覽器不會傳送 HTTP_ACCEPT_LANGUAGE,則

Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);

的輸出將會是 null。

因此請記得設定容錯處理!
11
rasmus at mindplay dot dk
7 年前
如果您正在努力找出如何在僅支援特定語言的專案中使用此函數,請繼續往下看。

不幸的是,此函數不允許您指定您的專案支援的語言 - 由於內部標頭剖析和協商邏輯沒有以任何其他方式公開,您很可能需要捨棄此函數,並採用相同功能的自訂實作。

https://github.com/willdurand/Negotiation
1
mollasadra at g dot com
6 年前
沒有看到這點有任何文件記錄,而且錯誤尚未解決,因此為了讓其他人不用再煩惱,此方法在處理不同的地區設定時會有一些奇怪的行為

php > echo locale_accept_from_http("zh_TW");
zh
php > echo locale_accept_from_http("zh_CN");
zh
0
bill at m$ dot com
1 年前
這是偵測人類的好方法。機器人通常不會設定此 HTTP_ACCEPT_LANGUAGE。
0
bohwaz
2 年前
請注意,在某些情況下,當傳遞的標頭字串無效,並且您已啟用例外時,此方法可能會擲回 IntlException。例如

<?php

ini_set
('intl.use_exceptions', 1);

$header = 'fr-FR,fr;q=0.9,fr;q=0.9;q=0.8,en-gb;q=0.8;q=0.7,en;q=0.6,en;q=0.7;q=0.5,*;q=0.5;q=0.4';
var_dump(locale_accept_from_http($header));

?>

回傳

PHP 警告:Uncaught IntlException:locale_accept_from_http:無法在 ... 中找到可接受的地區設定
To Top