It's good to mention that if user browser will not send HTTP_ACCEPT_LANGUAGE, the output from:
Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
Will be null.
So remember to set up a fail over scenario!
(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
Locale::acceptFromHttp -- locale_accept_from_http — 最もあてはまるロケールを HTTP "Accept-Language" ヘッダにもとづいて探す
オブジェクト指向型
$header
): string手続き型
$header
): stringHTTP "Accept-Language" ヘッダが要求する言語リストを満たすロケールを探します。
header
"Accept-Language" ヘッダを含む文字列。RFC 2616 形式。
対応するロケール ID を返します。
例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
It's good to mention that if user browser will not send HTTP_ACCEPT_LANGUAGE, the output from:
Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
Will be null.
So remember to set up a fail over scenario!
If you're struggling to figure out how to use this function in a project that only supports certain languages, move along.
Unfortunately, this function doesn't let you specify languages supported by your project - and since the internal header parsing and negotiation logic isn't exposed in any other way, you'll most likely want to ditch this function and go for a custom implementation of the same thing:
https://github.com/willdurand/Negotiation
Didn't see this being documented anywhere and the bug hasn't been addressed yet, so to save headache for otherS, this method does a little weird thing with these different locales:
php > echo locale_accept_from_http("zh_TW");
zh
php > echo locale_accept_from_http("zh_CN");
zh