конвертировать PHP Accept-Language в более читаемый формат - PullRequest
4 голосов
/ 17 марта 2012

PHP возвращает Accept-Languages ​​($ _SERVER ['HTTP_ACCEPT_LANGUAGE']) в формате, подобном "en-US", "en", "de-AT".Как я могу преобразовать их в более читаемый формат?

"en-US" -> "English USA"
"de-AT" -> "Österreichisch"

Существует ли распространенный способ / функция или мне нужно искать базу данных (как называется этот формат - это ISO 639-1 с необязательным регионом?!)?

Ответы [ 2 ]

5 голосов
/ 17 марта 2012

Если вы используете PHP 5.3.0 или выше и у вас установлено расширение интернационализации, вы можете использовать класс Locale или соответствующую процедурную функцию:

$dispname = Locale::getDisplayName('en-US');
echo $dispname;

выведет

English (United States)

(расширение Inlt: http://pecl.php.net/package/intl)

1 голос
/ 17 марта 2012

Как вы, возможно, уже обнаружили, коды, которые вы используете, - это ISO-3166, кажется, что самый простой способ - это конвертировать из веб-сервиса следующим образом:

<?php

$str = file_get_contents('http://opencountrycodes.appspot.com/xml/');
$xml = new SimpleXMLElement($str);
$out = '$countries'." = array(\n";
foreach ($xml->country as $country)
{
    $out .= "'{$country['code']}' => \"{$country['name']}\",\n";
}
$out .= ");";

file_put_contents('country_names.php', $out);

?>

Я нашел этот код на http://dragffy.com/blog/posts/creating-a-php-array-of-iso-3166-1-country-codes

...