[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 # 2 # Locale::Country - ISO codes for country identification (ISO 3166) 3 # 4 # $Id: Country.pm,v 2.7 2004/06/10 21:19:34 neilb Exp $ 5 # 6 7 package Locale::Country; 8 use strict; 9 require 5.002; 10 11 require Exporter; 12 use Carp; 13 use Locale::Constants; 14 15 16 #----------------------------------------------------------------------- 17 # Public Global Variables 18 #----------------------------------------------------------------------- 19 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); 20 $VERSION = sprintf("%d.%02d", q$Revision: 2.7 $ =~ /(\d+)\.(\d+)/); 21 @ISA = qw(Exporter); 22 @EXPORT = qw(code2country country2code 23 all_country_codes all_country_names 24 country_code2code 25 LOCALE_CODE_ALPHA_2 LOCALE_CODE_ALPHA_3 LOCALE_CODE_NUMERIC); 26 27 #----------------------------------------------------------------------- 28 # Private Global Variables 29 #----------------------------------------------------------------------- 30 my $CODES = []; 31 my $COUNTRIES = []; 32 33 34 #======================================================================= 35 # 36 # code2country ( CODE [, CODESET ] ) 37 # 38 #======================================================================= 39 sub code2country 40 { 41 my $code = shift; 42 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; 43 44 45 return undef unless defined $code; 46 47 #------------------------------------------------------------------- 48 # Make sure the code is in the right form before we use it 49 # to look up the corresponding country. 50 # We have to sprintf because the codes are given as 3-digits, 51 # with leading 0's. Eg 052 for Barbados. 52 #------------------------------------------------------------------- 53 if ($codeset == LOCALE_CODE_NUMERIC) 54 { 55 return undef if ($code =~ /\D/); 56 $code = sprintf("%.3d", $code); 57 } 58 else 59 { 60 $code = lc($code); 61 } 62 63 if (exists $CODES->[$codeset]->{$code}) 64 { 65 return $CODES->[$codeset]->{$code}; 66 } 67 else 68 { 69 #--------------------------------------------------------------- 70 # no such country code! 71 #--------------------------------------------------------------- 72 return undef; 73 } 74 } 75 76 77 #======================================================================= 78 # 79 # country2code ( NAME [, CODESET ] ) 80 # 81 #======================================================================= 82 sub country2code 83 { 84 my $country = shift; 85 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; 86 87 88 return undef unless defined $country; 89 $country = lc($country); 90 if (exists $COUNTRIES->[$codeset]->{$country}) 91 { 92 return $COUNTRIES->[$codeset]->{$country}; 93 } 94 else 95 { 96 #--------------------------------------------------------------- 97 # no such country! 98 #--------------------------------------------------------------- 99 return undef; 100 } 101 } 102 103 104 #======================================================================= 105 # 106 # country_code2code ( NAME [, CODESET ] ) 107 # 108 #======================================================================= 109 sub country_code2code 110 { 111 (@_ == 3) or croak "country_code2code() takes 3 arguments!"; 112 113 my $code = shift; 114 my $inset = shift; 115 my $outset = shift; 116 my $outcode; 117 my $country; 118 119 120 return undef if $inset == $outset; 121 $country = code2country($code, $inset); 122 return undef if not defined $country; 123 $outcode = country2code($country, $outset); 124 return $outcode; 125 } 126 127 128 #======================================================================= 129 # 130 # all_country_codes ( [ CODESET ] ) 131 # 132 #======================================================================= 133 sub all_country_codes 134 { 135 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; 136 137 return keys %{ $CODES->[$codeset] }; 138 } 139 140 141 #======================================================================= 142 # 143 # all_country_names ( [ CODESET ] ) 144 # 145 #======================================================================= 146 sub all_country_names 147 { 148 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; 149 150 return values %{ $CODES->[$codeset] }; 151 } 152 153 154 #======================================================================= 155 # 156 # alias_code ( ALIAS => CODE [ , CODESET ] ) 157 # 158 # Add an alias for an existing code. If the CODESET isn't specified, 159 # then we use the default (currently the alpha-2 codeset). 160 # 161 # Locale::Country::alias_code('uk' => 'gb'); 162 # 163 #======================================================================= 164 sub alias_code 165 { 166 my $alias = shift; 167 my $real = shift; 168 my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; 169 170 my $country; 171 172 173 if (not exists $CODES->[$codeset]->{$real}) 174 { 175 carp "attempt to alias \"$alias\" to unknown country code \"$real\"\n"; 176 return undef; 177 } 178 $country = $CODES->[$codeset]->{$real}; 179 $CODES->[$codeset]->{$alias} = $country; 180 $COUNTRIES->[$codeset]->{"\L$country"} = $alias; 181 182 return $alias; 183 } 184 185 # old name of function for backwards compatibility 186 *_alias_code = *alias_code; 187 188 189 #======================================================================= 190 # 191 # rename_country 192 # 193 # change the official name for a country, eg: 194 # gb => 'Great Britain' 195 # rather than the standard 'United Kingdom'. The original is retained 196 # as an alias, but the new name will be returned if you lookup the 197 # name from code. 198 # 199 #======================================================================= 200 sub rename_country 201 { 202 my $code = shift; 203 my $new_name = shift; 204 my $codeset = @_ > 0 ? shift : _code2codeset($code); 205 my $country; 206 my $c; 207 208 209 if (not defined $codeset) 210 { 211 carp "rename_country(): unknown country code \"$code\"\n"; 212 return 0; 213 } 214 215 $country = $CODES->[$codeset]->{$code}; 216 217 foreach my $cset (LOCALE_CODE_ALPHA_2, 218 LOCALE_CODE_ALPHA_3, 219 LOCALE_CODE_NUMERIC) 220 { 221 if ($cset == $codeset) 222 { 223 $c = $code; 224 } 225 else 226 { 227 $c = country_code2code($code, $codeset, $cset); 228 } 229 230 $CODES->[$cset]->{$c} = $new_name; 231 $COUNTRIES->[$cset]->{"\L$new_name"} = $c; 232 } 233 234 return 1; 235 } 236 237 238 #======================================================================= 239 # 240 # _code2codeset 241 # 242 # given a country code in an unknown codeset, return the codeset 243 # it is from, or undef. 244 # 245 #======================================================================= 246 sub _code2codeset 247 { 248 my $code = shift; 249 250 251 foreach my $codeset (LOCALE_CODE_ALPHA_2, LOCALE_CODE_ALPHA_3, 252 LOCALE_CODE_NUMERIC) 253 { 254 return $codeset if (exists $CODES->[$codeset]->{$code}) 255 } 256 257 return undef; 258 } 259 260 261 #======================================================================= 262 # 263 # initialisation code - stuff the DATA into the ALPHA2 hash 264 # 265 #======================================================================= 266 { 267 my ($alpha2, $alpha3, $numeric); 268 my ($country, @countries); 269 local $_; 270 271 272 while (<DATA>) 273 { 274 next unless /\S/; 275 chop; 276 ($alpha2, $alpha3, $numeric, @countries) = split(/:/, $_); 277 278 $CODES->[LOCALE_CODE_ALPHA_2]->{$alpha2} = $countries[0]; 279 foreach $country (@countries) 280 { 281 $COUNTRIES->[LOCALE_CODE_ALPHA_2]->{"\L$country"} = $alpha2; 282 } 283 284 if ($alpha3) 285 { 286 $CODES->[LOCALE_CODE_ALPHA_3]->{$alpha3} = $countries[0]; 287 foreach $country (@countries) 288 { 289 $COUNTRIES->[LOCALE_CODE_ALPHA_3]->{"\L$country"} = $alpha3; 290 } 291 } 292 293 if ($numeric) 294 { 295 $CODES->[LOCALE_CODE_NUMERIC]->{$numeric} = $countries[0]; 296 foreach $country (@countries) 297 { 298 $COUNTRIES->[LOCALE_CODE_NUMERIC]->{"\L$country"} = $numeric; 299 } 300 } 301 302 } 303 304 close(DATA); 305 } 306 307 1; 308 309 __DATA__ 310 ad:and:020:Andorra 311 ae:are:784:United Arab Emirates 312 af:afg:004:Afghanistan 313 ag:atg:028:Antigua and Barbuda 314 ai:aia:660:Anguilla 315 al:alb:008:Albania 316 am:arm:051:Armenia 317 an:ant:530:Netherlands Antilles 318 ao:ago:024:Angola 319 aq:ata:010:Antarctica 320 ar:arg:032:Argentina 321 as:asm:016:American Samoa 322 at:aut:040:Austria 323 au:aus:036:Australia 324 aw:abw:533:Aruba 325 ax:ala:248:Aland Islands 326 az:aze:031:Azerbaijan 327 ba:bih:070:Bosnia and Herzegovina 328 bb:brb:052:Barbados 329 bd:bgd:050:Bangladesh 330 be:bel:056:Belgium 331 bf:bfa:854:Burkina Faso 332 bg:bgr:100:Bulgaria 333 bh:bhr:048:Bahrain 334 bi:bdi:108:Burundi 335 bj:ben:204:Benin 336 bm:bmu:060:Bermuda 337 bn:brn:096:Brunei Darussalam 338 bo:bol:068:Bolivia 339 br:bra:076:Brazil 340 bs:bhs:044:Bahamas 341 bt:btn:064:Bhutan 342 bv:bvt:074:Bouvet Island 343 bw:bwa:072:Botswana 344 by:blr:112:Belarus 345 bz:blz:084:Belize 346 ca:can:124:Canada 347 cc:cck:166:Cocos (Keeling) Islands 348 cd:cod:180:Congo, The Democratic Republic of the:Zaire:Congo, Democratic Republic of the 349 cf:caf:140:Central African Republic 350 cg:cog:178:Congo:Congo, Republic of the 351 ch:che:756:Switzerland 352 ci:civ:384:Cote D'Ivoire 353 ck:cok:184:Cook Islands 354 cl:chl:152:Chile 355 cm:cmr:120:Cameroon 356 cn:chn:156:China 357 co:col:170:Colombia 358 cr:cri:188:Costa Rica 359 cs:scg:891:Serbia and Montenegro:Yugoslavia 360 cu:cub:192:Cuba 361 cv:cpv:132:Cape Verde 362 cx:cxr:162:Christmas Island 363 cy:cyp:196:Cyprus 364 cz:cze:203:Czech Republic 365 de:deu:276:Germany 366 dj:dji:262:Djibouti 367 dk:dnk:208:Denmark 368 dm:dma:212:Dominica 369 do:dom:214:Dominican Republic 370 dz:dza:012:Algeria 371 ec:ecu:218:Ecuador 372 ee:est:233:Estonia 373 eg:egy:818:Egypt 374 eh:esh:732:Western Sahara 375 er:eri:232:Eritrea 376 es:esp:724:Spain 377 et:eth:231:Ethiopia 378 fi:fin:246:Finland 379 fj:fji:242:Fiji 380 fk:flk:238:Falkland Islands (Malvinas):Falkland Islands (Islas Malvinas) 381 fm:fsm:583:Micronesia, Federated States of 382 fo:fro:234:Faroe Islands 383 fr:fra:250:France 384 fx:fxx:249:France, Metropolitan 385 ga:gab:266:Gabon 386 gb:gbr:826:United Kingdom:Great Britain 387 gd:grd:308:Grenada 388 ge:geo:268:Georgia 389 gf:guf:254:French Guiana 390 gh:gha:288:Ghana 391 gi:gib:292:Gibraltar 392 gl:grl:304:Greenland 393 gm:gmb:270:Gambia 394 gn:gin:324:Guinea 395 gp:glp:312:Guadeloupe 396 gq:gnq:226:Equatorial Guinea 397 gr:grc:300:Greece 398 gs:sgs:239:South Georgia and the South Sandwich Islands 399 gt:gtm:320:Guatemala 400 gu:gum:316:Guam 401 gw:gnb:624:Guinea-Bissau 402 gy:guy:328:Guyana 403 hk:hkg:344:Hong Kong 404 hm:hmd:334:Heard Island and McDonald Islands 405 hn:hnd:340:Honduras 406 hr:hrv:191:Croatia 407 ht:hti:332:Haiti 408 hu:hun:348:Hungary 409 id:idn:360:Indonesia 410 ie:irl:372:Ireland 411 il:isr:376:Israel 412 in:ind:356:India 413 io:iot:086:British Indian Ocean Territory 414 iq:irq:368:Iraq 415 ir:irn:364:Iran, Islamic Republic of:Iran 416 is:isl:352:Iceland 417 it:ita:380:Italy 418 jm:jam:388:Jamaica 419 jo:jor:400:Jordan 420 jp:jpn:392:Japan 421 ke:ken:404:Kenya 422 kg:kgz:417:Kyrgyzstan 423 kh:khm:116:Cambodia 424 ki:kir:296:Kiribati 425 km:com:174:Comoros 426 kn:kna:659:Saint Kitts and Nevis 427 kp:prk:408:Korea, Democratic People's Republic of:Korea, North:North Korea 428 kr:kor:410:Korea, Republic of:Korea, South:South Korea 429 kw:kwt:414:Kuwait 430 ky:cym:136:Cayman Islands 431 kz:kaz:398:Kazakhstan:Kazakstan 432 la:lao:418:Lao People's Democratic Republic 433 lb:lbn:422:Lebanon 434 lc:lca:662:Saint Lucia 435 li:lie:438:Liechtenstein 436 lk:lka:144:Sri Lanka 437 lr:lbr:430:Liberia 438 ls:lso:426:Lesotho 439 lt:ltu:440:Lithuania 440 lu:lux:442:Luxembourg 441 lv:lva:428:Latvia 442 ly:lby:434:Libyan Arab Jamahiriya:Libya 443 ma:mar:504:Morocco 444 mc:mco:492:Monaco 445 md:mda:498:Moldova, Republic of:Moldova 446 mg:mdg:450:Madagascar 447 mh:mhl:584:Marshall Islands 448 mk:mkd:807:Macedonia, the Former Yugoslav Republic of:Macedonia, Former Yugoslav Republic of:Macedonia 449 ml:mli:466:Mali 450 mm:mmr:104:Myanmar:Burma 451 mn:mng:496:Mongolia 452 mo:mac:446:Macao:Macau 453 mp:mnp:580:Northern Mariana Islands 454 mq:mtq:474:Martinique 455 mr:mrt:478:Mauritania 456 ms:msr:500:Montserrat 457 mt:mlt:470:Malta 458 mu:mus:480:Mauritius 459 mv:mdv:462:Maldives 460 mw:mwi:454:Malawi 461 mx:mex:484:Mexico 462 my:mys:458:Malaysia 463 mz:moz:508:Mozambique 464 na:nam:516:Namibia 465 nc:ncl:540:New Caledonia 466 ne:ner:562:Niger 467 nf:nfk:574:Norfolk Island 468 ng:nga:566:Nigeria 469 ni:nic:558:Nicaragua 470 nl:nld:528:Netherlands 471 no:nor:578:Norway 472 np:npl:524:Nepal 473 nr:nru:520:Nauru 474 nu:niu:570:Niue 475 nz:nzl:554:New Zealand 476 om:omn:512:Oman 477 pa:pan:591:Panama 478 pe:per:604:Peru 479 pf:pyf:258:French Polynesia 480 pg:png:598:Papua New Guinea 481 ph:phl:608:Philippines 482 pk:pak:586:Pakistan 483 pl:pol:616:Poland 484 pm:spm:666:Saint Pierre and Miquelon 485 pn:pcn:612:Pitcairn:Pitcairn Island 486 pr:pri:630:Puerto Rico 487 ps:pse:275:Palestinian Territory, Occupied 488 pt:prt:620:Portugal 489 pw:plw:585:Palau 490 py:pry:600:Paraguay 491 qa:qat:634:Qatar 492 re:reu:638:Reunion 493 ro:rou:642:Romania 494 ru:rus:643:Russian Federation:Russia 495 rw:rwa:646:Rwanda 496 sa:sau:682:Saudi Arabia 497 sb:slb:090:Solomon Islands 498 sc:syc:690:Seychelles 499 sd:sdn:736:Sudan 500 se:swe:752:Sweden 501 sg:sgp:702:Singapore 502 sh:shn:654:Saint Helena 503 si:svn:705:Slovenia 504 sj:sjm:744:Svalbard and Jan Mayen:Jan Mayen:Svalbard 505 sk:svk:703:Slovakia 506 sl:sle:694:Sierra Leone 507 sm:smr:674:San Marino 508 sn:sen:686:Senegal 509 so:som:706:Somalia 510 sr:sur:740:Suriname 511 st:stp:678:Sao Tome and Principe 512 sv:slv:222:El Salvador 513 sy:syr:760:Syrian Arab Republic:Syria 514 sz:swz:748:Swaziland 515 tc:tca:796:Turks and Caicos Islands 516 td:tcd:148:Chad 517 tf:atf:260:French Southern Territories:French Southern and Antarctic Lands 518 tg:tgo:768:Togo 519 th:tha:764:Thailand 520 tj:tjk:762:Tajikistan 521 tk:tkl:772:Tokelau 522 tm:tkm:795:Turkmenistan 523 tn:tun:788:Tunisia 524 to:ton:776:Tonga 525 tl:tls:626:Timor-Leste:East Timor 526 tr:tur:792:Turkey 527 tt:tto:780:Trinidad and Tobago 528 tv:tuv:798:Tuvalu 529 tw:twn:158:Taiwan, Province of China:Taiwan 530 tz:tza:834:Tanzania, United Republic of:Tanzania 531 ua:ukr:804:Ukraine 532 ug:uga:800:Uganda 533 um:umi:581:United States Minor Outlying Islands 534 us:usa:840:United States:USA:United States of America 535 uy:ury:858:Uruguay 536 uz:uzb:860:Uzbekistan 537 va:vat:336:Holy See (Vatican City State):Holy See (Vatican City) 538 vc:vct:670:Saint Vincent and the Grenadines 539 ve:ven:862:Venezuela 540 vg:vgb:092:Virgin Islands, British:British Virgin Islands 541 vi:vir:850:Virgin Islands, U.S. 542 vn:vnm:704:Vietnam 543 vu:vut:548:Vanuatu 544 wf:wlf:876:Wallis and Futuna 545 ws:wsm:882:Samoa 546 ye:yem:887:Yemen 547 yt:myt:175:Mayotte 548 za:zaf:710:South Africa 549 zm:zmb:894:Zambia 550 zw:zwe:716:Zimbabwe
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |