note 119895 added to locale.getdisplayregion
| From: | (seenote) | Date: | Fri, 16 Sep 2016 13:20:17 +0000 |
| Subject: | note 119895 added to locale.getdisplayregion | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-206602@lists.php.net to get a copy of this message | ||
in fact , I would do exactly the opposite : find the country code (iso3166) from the country name.
Found on the web, one solution is to use a table of correspondence between the country code and the
country name for each language.
There are too many countries and language code for this type of table.
With a PHP function , the convertion can be performed as well:
function countryNameToISO3166($country_name, $language) {
if (strlen($language) != 2) {
//Language must be on 2 caracters
return NULL;
}
//Set uppercase if never
$language = strtoupper($language);
$countrycode_list = array('AF', 'AX', 'AL', 'DZ',
'AS', 'AD', 'AO', 'AI', 'AQ', 'AG',
'AR', 'AM', 'AW', 'AU', 'AT', 'AZ',
'BS', 'BH', 'BD', 'BB', 'BY', 'BE',
'BZ', 'BJ', 'BM', 'BT', 'BO', 'BQ',
'BA', 'BW', 'BV', 'BR', 'IO', 'BN',
'BG', 'BF', 'BI', 'KH', 'CM', 'CA',
'CV', 'KY', 'CF', 'TD', 'CL', 'CN',
'CX', 'CC', 'CO', 'KM', 'CG', 'CD',
'CK', 'CR', 'CI', 'HR', 'CU', 'CW',
'CY', 'CZ', 'DK', 'DJ', 'DM', 'DO',
'EC', 'EG', 'SV', 'GQ', 'ER', 'EE',
'ET', 'FK', 'FO', 'FJ', 'FI', 'FR',
'GF', 'PF', 'TF', 'GA', 'GM', 'GE',
'DE', 'GH', 'GI', 'GR', 'GL', 'GD',
'GP', 'GU', 'GT', 'GG', 'GN', 'GW',
'GY', 'HT', 'HM', 'VA', 'HN', 'HK',
'HU', 'IS', 'IN', 'ID', 'IR', 'IQ',
'IE', 'IM', 'IL', 'IT', 'JM', 'JP',
'JE', 'JO', 'KZ', 'KE', 'KI', 'KP',
'KR', 'KW', 'KG', 'LA', 'LV', 'LB',
'LS', 'LR', 'LY', 'LI', 'LT', 'LU',
'MO', 'MK', 'MG', 'MW', 'MY', 'MV',
'ML', 'MT', 'MH', 'MQ', 'MR', 'MU',
'YT', 'MX', 'FM', 'MD', 'MC', 'MN',
'ME', 'MS', 'MA', 'MZ', 'MM', 'NA',
'NR', 'NP', 'NL', 'NC', 'NZ', 'NI',
'NE', 'NG', 'NU', 'NF', 'MP', 'NO',
'OM', 'PK', 'PW', 'PS', 'PA', 'PG',
'PY', 'PE', 'PH', 'PN', 'PL', 'PT',
'PR', 'QA', 'RE', 'RO', 'RU', 'RW',
'BL', 'SH', 'KN', 'LC', 'MF', 'PM',
'VC', 'WS', 'SM', 'ST', 'SA', 'SN',
'RS', 'SC', 'SL', 'SG', 'SX', 'SK',
'SI', 'SB', 'SO', 'ZA', 'GS', 'SS',
'ES', 'LK', 'SD', 'SR', 'SJ', 'SZ',
'SE', 'CH', 'SY', 'TW', 'TJ', 'TZ',
'TH', 'TL', 'TG', 'TK', 'TO', 'TT',
'TN', 'TR', 'TM', 'TC', 'TV', 'UG',
'UA', 'AE', 'GB', 'US', 'UM', 'UY',
'UZ', 'VU', 'VE', 'VN', 'VG', 'VI',
'WF', 'EH', 'YE', 'ZM', 'ZW');
$ISO3166 = NULL;
//Loop all country codes
foreach ($countrycode_list as $countrycode) {
$locale_cc = Locale::getDisplayRegion('-' . $countrycode, $language);
//Case insensitive
if (strcasecmp($country_name, $locale_cc) == 0) {
$ISO3166 = $countrycode;
break;
}
}
//return NULL if not found or country code
return $ISO3166;
}
Tests
$cc=countryNameToISO3166('Costa Rica','US');
echo '<br>(English) Country code for Costa Rica is '.$cc;
$cc=countryNameToISO3166('Royaume-Uni','FR');
echo '<br>(Français) Country code for Royaume-Uni is '.$cc;
$cc=countryNameToISO3166('Frankreich','DE');
echo '<br>(Deutsch) Country code for Frankreich is '.$cc;
//Wrong language
$cc=countryNameToISO3166('Royaume-Uni','US');
echo '<br>(English) Country code for Royaume-Uni is '.var_dump($cc);
returns
(English) Country code for Costa Rica is CR
(Français) Country code for Royaume-Uni is GB
(Deutsch) Country code for Frankreich is FR
(English) Country code for Royaume-Uni is NULL
Hope it can help someone other
http://www.fobec.com
----
Server IP: 72.52.91.14
Probable Submitter: 86.197.104.25
----
Manual Page -- http://php.net/manual/en/locale.getdisplayregion.php
Edit -- https://master.php.net/note/edit/119895
Del: integrated -- https://master.php.net/note/delete/119895/integrated
Del: useless -- https://master.php.net/note/delete/119895/useless
Del: bad code -- https://master.php.net/note/delete/119895/bad+code
Del: spam -- https://master.php.net/note/delete/119895/spam
Del: non-english -- https://master.php.net/note/delete/119895/non-english
Del: in docs -- https://master.php.net/note/delete/119895/in+docs
Del: other reasons-- https://master.php.net/note/delete/119895
Reject -- https://master.php.net/note/reject/119895
Search -- https://master.php.net/manage/user-notes.php