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 面向对象范例

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

上面的例子将输出

en_US

参见

添加注释

用户贡献的注释 5 个注释

46
Adam Lange
11 年前
值得一提的是,如果用户浏览器没有发送 HTTP_ACCEPT_LANGUAGE,那么

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

将为 null。

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

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

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 Warning: Uncaught IntlException: locale_accept_from_http: 无法在 ... 中找到可接受的区域设置
To Top