Locale::acceptFromHttp
locale_accept_from_http
(PHP 5 >= 5.3.0, PHP 7, PECL intl >= 1.0.0)
Locale::acceptFromHttp -- locale_accept_from_http — Tries to find out best available locale based on HTTP "Accept-Language" header
Описание
Объектно-ориентированный стиль
public
static
string
Locale::acceptFromHttp
( string
$header
)Процедурный стиль
string
locale_accept_from_http
( string
$header
)Tries to find locale that can satisfy the language list that is requested by the HTTP "Accept-Language" header.
Список параметров
-
header
-
The string containing the "Accept-Language" header according to format in RFC 2616.
Возвращаемые значения
The corresponding locale identifier.
Примеры
Пример #1 locale_accept_from_http() example
<?php
$locale = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale;
?>
Пример #2 OO example
<?php
$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $locale;
?>
Результат выполнения данного примера:
en_US
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Поддержка языков и кодировок
- Internationalization Functions
- Функция Locale::acceptFromHttp() - Tries to find out best available locale based on HTTP "Accept-Language" header
- Функция Locale::canonicalize() - Canonicalize the locale string
- Функция Locale::composeLocale() - Returns a correctly ordered and delimited locale ID
- Функция Locale::filterMatches() - Checks if a language tag filter matches with locale
- Функция Locale::getAllVariants() - Gets the variants for the input locale
- Функция Locale::getDefault() - Gets the default locale value from the INTL global 'default_locale'
- Функция Locale::getDisplayLanguage() - Returns an appropriately localized display name for language of the inputlocale
- Функция Locale::getDisplayName() - Returns an appropriately localized display name for the input locale
- Функция Locale::getDisplayRegion() - Returns an appropriately localized display name for region of the input locale
- Функция Locale::getDisplayScript() - Returns an appropriately localized display name for script of the input locale
- Функция Locale::getDisplayVariant() - Returns an appropriately localized display name for variants of the input locale
- Функция Locale::getKeywords() - Gets the keywords for the input locale
- Функция Locale::getPrimaryLanguage() - Gets the primary language for the input locale
- Функция Locale::getRegion() - Gets the region for the input locale
- Функция Locale::getScript() - Gets the script for the input locale
- Функция Locale::lookup() - Searches the language tag list for the best match to the language
- Функция Locale::parseLocale() - Returns a key-value array of locale ID subtag elements.
- Функция Locale::setDefault() - sets the default runtime locale
Коментарии
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
Please note that this method can throw IntlException in some cases when the passed header string is invalid AND you have enabled exceptions. For example:
<?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));
?>
Returns:
PHP Warning: Uncaught IntlException: locale_accept_from_http: failed to find acceptable locale in ...
A nice way to detect humans. Bots usually dont have this HTTP_ACCEPT_LANGUAGE set.