Commit | Line | Data |
6b14ceb7 |
1 | # |
2 | # Locale::Country - ISO codes for country identification (ISO 3166) |
3 | # |
4 | # $Id: Country.pm,v 2.1 2002/02/06 04:07:09 neilb Exp $ |
5 | # |
47a334e9 |
6 | |
7 | package Locale::Country; |
8 | use strict; |
9 | require 5.002; |
10 | |
47a334e9 |
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); |
6b14ceb7 |
20 | $VERSION = sprintf("%d.%02d", q$Revision: 2.1 $ =~ /(\d+)\.(\d+)/); |
47a334e9 |
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 | #======================================================================= |
6b14ceb7 |
35 | # |
36 | # code2country ( CODE [, CODESET ] ) |
37 | # |
47a334e9 |
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 | |
6b14ceb7 |
76 | |
77 | #======================================================================= |
78 | # |
79 | # country2code ( NAME [, CODESET ] ) |
80 | # |
81 | #======================================================================= |
47a334e9 |
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 | |
6b14ceb7 |
103 | |
104 | #======================================================================= |
105 | # |
106 | # country_code2code ( NAME [, CODESET ] ) |
107 | # |
108 | #======================================================================= |
47a334e9 |
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; |
6b14ceb7 |
116 | my $outcode; |
47a334e9 |
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 | |
47a334e9 |
127 | |
128 | #======================================================================= |
6b14ceb7 |
129 | # |
130 | # all_country_codes ( [ CODESET ] ) |
131 | # |
132 | #======================================================================= |
47a334e9 |
133 | sub all_country_codes |
134 | { |
135 | my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; |
136 | |
137 | return keys %{ $CODES->[$codeset] }; |
138 | } |
139 | |
6b14ceb7 |
140 | |
141 | #======================================================================= |
142 | # |
143 | # all_country_names ( [ CODESET ] ) |
144 | # |
145 | #======================================================================= |
47a334e9 |
146 | sub all_country_names |
147 | { |
148 | my $codeset = @_ > 0 ? shift : LOCALE_CODE_DEFAULT; |
149 | |
150 | return values %{ $CODES->[$codeset] }; |
151 | } |
152 | |
47a334e9 |
153 | |
6b14ceb7 |
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 | #======================================================================= |
47a334e9 |
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 | |
47a334e9 |
185 | |
186 | #======================================================================= |
6b14ceb7 |
187 | # |
47a334e9 |
188 | # initialisation code - stuff the DATA into the ALPHA2 hash |
6b14ceb7 |
189 | # |
47a334e9 |
190 | #======================================================================= |
191 | { |
192 | my ($alpha2, $alpha3, $numeric); |
6b6e008c |
193 | my ($country, @countries); |
47a334e9 |
194 | |
195 | |
196 | while (<DATA>) |
197 | { |
198 | next unless /\S/; |
199 | chop; |
6b6e008c |
200 | ($alpha2, $alpha3, $numeric, @countries) = split(/:/, $_); |
47a334e9 |
201 | |
6b6e008c |
202 | $CODES->[LOCALE_CODE_ALPHA_2]->{$alpha2} = $countries[0]; |
203 | foreach $country (@countries) |
204 | { |
205 | $COUNTRIES->[LOCALE_CODE_ALPHA_2]->{"\L$country"} = $alpha2; |
206 | } |
47a334e9 |
207 | |
208 | if ($alpha3) |
209 | { |
6b6e008c |
210 | $CODES->[LOCALE_CODE_ALPHA_3]->{$alpha3} = $countries[0]; |
211 | foreach $country (@countries) |
212 | { |
213 | $COUNTRIES->[LOCALE_CODE_ALPHA_3]->{"\L$country"} = $alpha3; |
214 | } |
47a334e9 |
215 | } |
216 | |
217 | if ($numeric) |
218 | { |
6b6e008c |
219 | $CODES->[LOCALE_CODE_NUMERIC]->{$numeric} = $countries[0]; |
220 | foreach $country (@countries) |
221 | { |
222 | $COUNTRIES->[LOCALE_CODE_NUMERIC]->{"\L$country"} = $numeric; |
223 | } |
47a334e9 |
224 | } |
225 | |
226 | } |
227 | } |
228 | |
229 | 1; |
230 | |
231 | __DATA__ |
232 | ad:and:020:Andorra |
233 | ae:are:784:United Arab Emirates |
234 | af:afg:004:Afghanistan |
235 | ag:atg:028:Antigua and Barbuda |
236 | ai:aia:660:Anguilla |
237 | al:alb:008:Albania |
238 | am:arm:051:Armenia |
239 | an:ant:530:Netherlands Antilles |
240 | ao:ago:024:Angola |
241 | aq:::Antarctica |
242 | ar:arg:032:Argentina |
243 | as:asm:016:American Samoa |
244 | at:aut:040:Austria |
245 | au:aus:036:Australia |
246 | aw:abw:533:Aruba |
247 | az:aze:031:Azerbaijan |
248 | ba:bih:070:Bosnia and Herzegovina |
249 | bb:brb:052:Barbados |
250 | bd:bgd:050:Bangladesh |
251 | be:bel:056:Belgium |
252 | bf:bfa:854:Burkina Faso |
253 | bg:bgr:100:Bulgaria |
254 | bh:bhr:048:Bahrain |
255 | bi:bdi:108:Burundi |
256 | bj:ben:204:Benin |
257 | bm:bmu:060:Bermuda |
258 | bn:brn:096:Brunei Darussalam |
259 | bo:bol:068:Bolivia |
260 | br:bra:076:Brazil |
261 | bs:bhs:044:Bahamas |
262 | bt:btn:064:Bhutan |
263 | bv:::Bouvet Island |
264 | bw:bwa:072:Botswana |
265 | by:blr:112:Belarus |
266 | bz:blz:084:Belize |
267 | ca:can:124:Canada |
268 | cc:::Cocos (Keeling) Islands |
6b6e008c |
269 | cd:cod:180:Congo, The Democratic Republic of the:Congo, Democratic Republic of the |
47a334e9 |
270 | cf:caf:140:Central African Republic |
271 | cg:cog:178:Congo |
272 | ch:che:756:Switzerland |
273 | ci:civ:384:Cote D'Ivoire |
274 | ck:cok:184:Cook Islands |
275 | cl:chl:152:Chile |
276 | cm:cmr:120:Cameroon |
277 | cn:chn:156:China |
278 | co:col:170:Colombia |
279 | cr:cri:188:Costa Rica |
280 | cu:cub:192:Cuba |
281 | cv:cpv:132:Cape Verde |
282 | cx:::Christmas Island |
283 | cy:cyp:196:Cyprus |
284 | cz:cze:203:Czech Republic |
285 | de:deu:276:Germany |
286 | dj:dji:262:Djibouti |
287 | dk:dnk:208:Denmark |
288 | dm:dma:212:Dominica |
289 | do:dom:214:Dominican Republic |
290 | dz:dza:012:Algeria |
291 | ec:ecu:218:Ecuador |
292 | ee:est:233:Estonia |
293 | eg:egy:818:Egypt |
294 | eh:esh:732:Western Sahara |
295 | er:eri:232:Eritrea |
296 | es:esp:724:Spain |
297 | et:eth:231:Ethiopia |
298 | fi:fin:246:Finland |
299 | fj:fji:242:Fiji |
6b6e008c |
300 | fk:flk:238:Falkland Islands (Malvinas):Falkland Islands (Islas Malvinas) |
47a334e9 |
301 | fm:fsm:583:Micronesia, Federated States of |
302 | fo:fro:234:Faroe Islands |
303 | fr:fra:250:France |
304 | fx:::France, Metropolitan |
305 | ga:gab:266:Gabon |
6b6e008c |
306 | gb:gbr:826:United Kingdom:Great Britain |
47a334e9 |
307 | gd:grd:308:Grenada |
308 | ge:geo:268:Georgia |
309 | gf:guf:254:French Guiana |
310 | gh:gha:288:Ghana |
311 | gi:gib:292:Gibraltar |
312 | gl:grl:304:Greenland |
313 | gm:gmb:270:Gambia |
314 | gn:gin:324:Guinea |
315 | gp:glp:312:Guadeloupe |
316 | gq:gnq:226:Equatorial Guinea |
317 | gr:grc:300:Greece |
318 | gs:::South Georgia and the South Sandwich Islands |
319 | gt:gtm:320:Guatemala |
320 | gu:gum:316:Guam |
321 | gw:gnb:624:Guinea-Bissau |
322 | gy:guy:328:Guyana |
323 | hk:hkg:344:Hong Kong |
324 | hm:::Heard Island and McDonald Islands |
325 | hn:hnd:340:Honduras |
326 | hr:hrv:191:Croatia |
327 | ht:hti:332:Haiti |
328 | hu:hun:348:Hungary |
329 | id:idn:360:Indonesia |
330 | ie:irl:372:Ireland |
331 | il:isr:376:Israel |
332 | in:ind:356:India |
333 | io:::British Indian Ocean Territory |
334 | iq:irq:368:Iraq |
6b6e008c |
335 | ir:irn:364:Iran, Islamic Republic of:Iran |
47a334e9 |
336 | is:isl:352:Iceland |
337 | it:ita:380:Italy |
338 | jm:jam:388:Jamaica |
339 | jo:jor:400:Jordan |
340 | jp:jpn:392:Japan |
341 | ke:ken:404:Kenya |
342 | kg:kgz:417:Kyrgyzstan |
343 | kh:khm:116:Cambodia |
344 | ki:kir:296:Kiribati |
345 | km:com:174:Comoros |
346 | kn:kna:659:Saint Kitts and Nevis |
6b6e008c |
347 | kp:prk:408:Korea, Democratic People's Republic of:Korea, North:North Korea |
348 | kr:kor:410:Korea, Republic of:Korea, South:South Korea |
47a334e9 |
349 | kw:kwt:414:Kuwait |
350 | ky:cym:136:Cayman Islands |
351 | kz:kaz:398:Kazakstan |
352 | la:lao:418:Lao People's Democratic Republic |
353 | lb:lbn:422:Lebanon |
354 | lc:lca:662:Saint Lucia |
355 | li:lie:438:Liechtenstein |
356 | lk:lka:144:Sri Lanka |
357 | lr:lbr:430:Liberia |
358 | ls:lso:426:Lesotho |
359 | lt:ltu:440:Lithuania |
360 | lu:lux:442:Luxembourg |
361 | lv:lva:428:Latvia |
6b6e008c |
362 | ly:lby:434:Libyan Arab Jamahiriya:Libya |
47a334e9 |
363 | ma:mar:504:Morocco |
364 | mc:mco:492:Monaco |
365 | md:mda:498:Moldova, Republic of |
366 | mg:mdg:450:Madagascar |
367 | mh:mhl:584:Marshall Islands |
6b6e008c |
368 | mk:mkd:807:Macedonia, the Former Yugoslav Republic of:Macedonia, Former Yugoslav Republic of:Macedonia |
47a334e9 |
369 | ml:mli:466:Mali |
370 | mm:mmr:104:Myanmar |
371 | mn:mng:496:Mongolia |
372 | mo:mac:446:Macau |
373 | mp:mnp:580:Northern Mariana Islands |
374 | mq:mtq:474:Martinique |
375 | mr:mrt:478:Mauritania |
376 | ms:msr:500:Montserrat |
377 | mt:mlt:470:Malta |
378 | mu:mus:480:Mauritius |
379 | mv:mdv:462:Maldives |
380 | mw:mwi:454:Malawi |
381 | mx:mex:484:Mexico |
382 | my:mys:458:Malaysia |
383 | mz:moz:508:Mozambique |
384 | na:nam:516:Namibia |
385 | nc:ncl:540:New Caledonia |
386 | ne:ner:562:Niger |
387 | nf:nfk:574:Norfolk Island |
388 | ng:nga:566:Nigeria |
389 | ni:nic:558:Nicaragua |
390 | nl:nld:528:Netherlands |
391 | no:nor:578:Norway |
392 | np:npl:524:Nepal |
393 | nr:nru:520:Nauru |
394 | nu:niu:570:Niue |
395 | nz:nzl:554:New Zealand |
396 | om:omn:512:Oman |
397 | pa:pan:591:Panama |
398 | pe:per:604:Peru |
399 | pf:pyf:258:French Polynesia |
400 | pg:png:598:Papua New Guinea |
401 | ph:phl:608:Philippines |
402 | pk:pak:586:Pakistan |
403 | pl:pol:616:Poland |
404 | pm:spm:666:Saint Pierre and Miquelon |
6b6e008c |
405 | pn:pcn:612:Pitcairn:Pitcairn Island |
47a334e9 |
406 | pr:pri:630:Puerto Rico |
407 | ps:pse:275:Palestinian Territory, Occupied |
408 | pt:prt:620:Portugal |
409 | pw:plw:585:Palau |
410 | py:pry:600:Paraguay |
411 | qa:qat:634:Qatar |
412 | re:reu:638:Reunion |
413 | ro:rom:642:Romania |
6b6e008c |
414 | ru:rus:643:Russian Federation:Russia |
47a334e9 |
415 | rw:rwa:646:Rwanda |
416 | sa:sau:682:Saudi Arabia |
417 | sb:slb:090:Solomon Islands |
418 | sc:syc:690:Seychelles |
419 | sd:sdn:736:Sudan |
420 | se:swe:752:Sweden |
421 | sg:sgp:702:Singapore |
422 | sh:shn:654:Saint Helena |
423 | si:svn:705:Slovenia |
6b6e008c |
424 | sj:sjm:744:Svalbard and Jan Mayen:Jan Mayen:Svalbard |
47a334e9 |
425 | sk:svk:703:Slovakia |
426 | sl:sle:694:Sierra Leone |
427 | sm:smr:674:San Marino |
428 | sn:sen:686:Senegal |
429 | so:som:706:Somalia |
430 | sr:sur:740:Suriname |
431 | st:stp:678:Sao Tome and Principe |
432 | sv:slv:222:El Salvador |
6b6e008c |
433 | sy:syr:760:Syrian Arab Republic:Syria |
47a334e9 |
434 | sz:swz:748:Swaziland |
435 | tc:tca:796:Turks and Caicos Islands |
436 | td:tcd:148:Chad |
437 | tf:::French Southern Territories |
438 | tg:tgo:768:Togo |
439 | th:tha:764:Thailand |
440 | tj:tjk:762:Tajikistan |
441 | tk:tkl:772:Tokelau |
442 | tm:tkm:795:Turkmenistan |
443 | tn:tun:788:Tunisia |
444 | to:ton:776:Tonga |
445 | tp:tmp:626:East Timor |
446 | tr:tur:792:Turkey |
447 | tt:tto:780:Trinidad and Tobago |
448 | tv:tuv:798:Tuvalu |
6b6e008c |
449 | tw:twn:158:Taiwan, Province of China:Taiwan |
450 | tz:tza:834:Tanzania, United Republic of:Tanzania |
47a334e9 |
451 | ua:ukr:804:Ukraine |
452 | ug:uga:800:Uganda |
453 | um:::United States Minor Outlying Islands |
6b6e008c |
454 | us:usa:840:United States:USA:United States of America |
47a334e9 |
455 | uy:ury:858:Uruguay |
456 | uz:uzb:860:Uzbekistan |
6b6e008c |
457 | va:vat:336:Holy See (Vatican City State):Hole See (Vatican City) |
47a334e9 |
458 | vc:vct:670:Saint Vincent and the Grenadines |
459 | ve:ven:862:Venezuela |
6b6e008c |
460 | vg:vgb:092:Virgin Islands, British:British Virgin Islands |
47a334e9 |
461 | vi:vir:850:Virgin Islands, U.S. |
462 | vn:vnm:704:Vietnam |
463 | vu:vut:548:Vanuatu |
464 | wf:wlf:876:Wallis and Futuna |
465 | ws:wsm:882:Samoa |
466 | ye:yem:887:Yemen |
467 | yt:::Mayotte |
468 | yu:yug:891:Yugoslavia |
469 | za:zaf:710:South Africa |
470 | zm:zmb:894:Zambia |
471 | zr:::Zaire |
472 | zw:zwe:716:Zimbabwe |