最好提到,如果用户浏览器不发送 HTTP_ACCEPT_LANGUAGE,则来自
Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
的输出将为空。
因此,请记住设置故障转移方案!
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
Locale::acceptFromHttp -- locale_accept_from_http — 尝试根据 HTTP "Accept-Language" 标头找出最佳可用语言环境
面向对象风格
过程化风格
尝试查找可以满足 HTTP "Accept-Language" 标头请求的语言列表的语言环境。
header
包含根据 RFC 2616 中的格式的 "Accept-Language" 标头的字符串。
示例 #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
最好提到,如果用户浏览器不发送 HTTP_ACCEPT_LANGUAGE,则来自
Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
的输出将为空。
因此,请记住设置故障转移方案!
如果您正在努力弄清楚如何在仅支持某些语言的项目中使用此函数,请继续。
不幸的是,此函数不允许您指定项目支持的语言 - 并且由于内部标头解析和协商逻辑没有以任何其他方式公开,因此您很可能希望放弃此函数并使用自定义实现相同的功能
https://github.com/willdurand/Negotiation
没有看到任何地方对此进行记录,并且错误尚未解决,因此为了节省其他人的麻烦,此方法对这些不同的语言环境做了一些奇怪的事情
php > echo locale_accept_from_http("zh_TW");
zh
php > echo locale_accept_from_http("zh_CN");
zh
请注意,当传递的标头字符串无效并且您启用了异常时,此方法在某些情况下可能会抛出 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 ...