PHP 8.4.6 Released!

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_httpTries to find out best available locale based on HTTP "Accept-Language" header

Description

Object-oriented style

public static Locale::acceptFromHttp(string $header): string|false

Procedural style

locale_accept_from_http(string $header): string|false

Tries to find locale that can satisfy the language list that is requested by the HTTP "Accept-Language" header.

Parameters

header

The string containing the "Accept-Language" header according to format in RFC 2616.

Return Values

The corresponding locale identifier.

Returns false when the length of header exceeds INTL_MAX_LOCALE_LEN.

Examples

Example #1 locale_accept_from_http() example

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

Example #2 OO example

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

The above example will output:

en_US

See Also

  • locale_lookup() - Searches the language tag list for the best match to the language

User Contributed Notes

Adam Lange
12 years ago
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!
rasmus at mindplay dot dk
7 years ago
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
mollasadra at g dot com
6 years ago
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
bill at m$ dot com
1 year ago
A nice way to detect humans. Bots usually dont have this HTTP_ACCEPT_LANGUAGE set.
bohwaz
3 years ago
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 ...
To Top