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(string $header): string|false

过程化风格

locale_accept_from_http(string $header): string|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 条注释

Adam Lange
12 年前
最好提到,如果用户浏览器不发送 HTTP_ACCEPT_LANGUAGE,则来自

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

的输出将为空。

因此,请记住设置故障转移方案!
rasmus at mindplay dot dk
7 年前
如果您正在努力弄清楚如何在仅支持某些语言的项目中使用此函数,请继续。

不幸的是,此函数不允许您指定项目支持的语言 - 并且由于内部标头解析和协商逻辑没有以任何其他方式公开,因此您很可能希望放弃此函数并使用自定义实现相同的功能

https://github.com/willdurand/Negotiation
mollasadra at g dot com
6 年前
没有看到任何地方对此进行记录,并且错误尚未解决,因此为了节省其他人的麻烦,此方法对这些不同的语言环境做了一些奇怪的事情

php > echo locale_accept_from_http("zh_TW");
zh
php > echo locale_accept_from_http("zh_CN");
zh
bill at m$ dot com
1 年前
一种检测人类的好方法。机器人通常没有设置此 HTTP_ACCEPT_LANGUAGE。
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 Warning: Uncaught IntlException: locale_accept_from_http: failed to find acceptable locale in ...
To Top