Как преобразовать строку страны в ее код ISO 3166-1, используя Zend?

Кто-нибудь знает, возможно ли использовать Zend_Locale для получения кода ISO 3166-1 для страны, если у вас есть название страны в виде строки? Например, у меня есть "Nederland", поэтому я хотел бы получить "NL".

4 ответа

Решение

Вы должны взглянуть на Zend_Locale::getTranslation(). Вы можете получить список (простой массив) названий стран - и затем вы можете использовать array_search(), чтобы получить необходимый "ключ страны"!

Я не уверен, как в Zend HTTp можно делать вызовы, но здесь, вероятно, хороший ресурс для ссылки.

Используйте геоданные Yahoo!, которые позволяют отображать строки произвольной формы в идентификаторы WOE. Для стран идентификаторы WOE - это коды ISO 3166-1.

Чтобы преобразовать строку произвольной формы в идентификатор WOE, вы можете использовать API GeoPlanet: http://developer.yahoo.com/geo/geoplanet/

Я не знаю, есть ли у Zend что-то для этого, но это довольно легко сделать самостоятельно.

Из этого туториала Вы узнаете, как получить последний список кодов стран ISO 3166-1 в формате XML, проанализировать его, а затем создать файл 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);

Кроме того, вы можете сохранить его в виде файла CSV и загрузить его с помощью PHP fgetcsv() функция Это, вероятно, было бы предпочтительнее ИМО. Или, черт возьми, вы можете просто сохранить XML и проанализировать его при загрузке.

Я собрал актуальную коллекцию названий стран и кодов стран ISO 3166 по адресу:

https://github.com/johannesl/Internationalization

Вы можете использовать его для преобразования как name => кода страны, так и наоборот.

Я также создаю коллекцию псевдонимов стран, которые появятся на github.

Другие вопросы по тегам