[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/I18N/LangTags/ -> List.pm (source)

   1  
   2  require 5;
   3  package I18N::LangTags::List;
   4  #  Time-stamp: "2004-10-06 23:26:21 ADT"
   5  use strict;
   6  use vars qw(%Name %Is_Disrec $Debug $VERSION);
   7  $VERSION = '0.35';
   8  # POD at the end.
   9  
  10  #----------------------------------------------------------------------
  11  {
  12  # read the table out of our own POD!
  13    my $seeking = 1;
  14    my $count = 0;
  15    my($disrec,$tag,$name);
  16    my $last_name = '';
  17    while(<I18N::LangTags::List::DATA>) {
  18      if($seeking) {
  19        $seeking = 0 if m/=for woohah/;
  20      } elsif( ($disrec, $tag, $name) =
  21            m/(\[?)\{([-0-9a-zA-Z]+)\}(?:\s*:)?\s*([^\[\]]+)/
  22      ) {
  23        $name =~ s/\s*[;\.]*\s*$//g;
  24        next unless $name;
  25        ++$count;
  26        print "<$tag> <$name>\n" if $Debug;
  27        $last_name = $Name{$tag} = $name;
  28        $Is_Disrec{$tag} = 1 if $disrec;
  29      } elsif (m/[Ff]ormerly \"([-a-z0-9]+)\"/) {
  30        $Name{$1} = "$last_name (old tag)" if $last_name;
  31        $Is_Disrec{$1} = 1;
  32      }
  33    }
  34    die "No tags read??" unless $count;
  35  }
  36  #----------------------------------------------------------------------
  37  
  38  sub name {
  39    my $tag = lc($_[0] || return);
  40    $tag =~ s/^\s+//s;
  41    $tag =~ s/\s+$//s;
  42    
  43    my $alt;
  44    if($tag =~ m/^x-(.+)/) {
  45      $alt = "i-$1";
  46    } elsif($tag =~ m/^i-(.+)/) {
  47      $alt = "x-$1";
  48    } else {
  49      $alt = '';
  50    }
  51    
  52    my $subform = '';
  53    my $name = '';
  54    print "Input: {$tag}\n" if $Debug;
  55    while(length $tag) {
  56      last if $name = $Name{$tag};
  57      last if $name = $Name{$alt};
  58      if($tag =~ s/(-[a-z0-9]+)$//s) {
  59        print "Shaving off: $1 leaving $tag\n" if $Debug;
  60        $subform = "$1$subform";
  61         # and loop around again
  62         
  63        $alt =~ s/(-[a-z0-9]+)$//s && $Debug && print " alt -> $alt\n";
  64      } else {
  65        # we're trying to pull a subform off a primary tag. TILT!
  66        print "Aborting on: {$name}{$subform}\n" if $Debug;
  67        last;
  68      }
  69    }
  70    print "Output: {$name}{$subform}\n" if $Debug;
  71    
  72    return unless $name;   # Failure
  73    return $name unless $subform;   # Exact match
  74    $subform =~ s/^-//s;
  75    $subform =~ s/-$//s;
  76    return "$name (Subform \"$subform\")";
  77  }
  78  
  79  #--------------------------------------------------------------------------
  80  
  81  sub is_decent {
  82    my $tag = lc($_[0] || return 0);
  83    #require I18N::LangTags;
  84  
  85    return 0 unless
  86      $tag =~ 
  87      /^(?:  # First subtag
  88           [xi] | [a-z]{2,3}
  89        )
  90        (?:  # Subtags thereafter
  91           -           # separator
  92           [a-z0-9]{1,8}  # subtag  
  93        )*
  94      $/xs;
  95  
  96    my @supers = ();
  97    foreach my $bit (split('-', $tag)) {
  98      push @supers, 
  99        scalar(@supers) ? ($supers[-1] . '-' . $bit) : $bit;
 100    }
 101    return 0 unless @supers;
 102    shift @supers if $supers[0] =~ m<^(i|x|sgn)$>s;
 103    return 0 unless @supers;
 104  
 105    foreach my $f ($tag, @supers) {
 106      return 0 if $Is_Disrec{$f};
 107      return 2 if $Name{$f};
 108       # so that decent subforms of indecent tags are decent
 109    }
 110    return 2 if $Name{$tag}; # not only is it decent, it's known!
 111    return 1;
 112  }
 113  
 114  #--------------------------------------------------------------------------
 115  1;
 116  
 117  __DATA__
 118  
 119  =head1 NAME
 120  
 121  I18N::LangTags::List -- tags and names for human languages
 122  
 123  =head1 SYNOPSIS
 124  
 125    use I18N::LangTags::List;
 126    print "Parlez-vous... ", join(', ',
 127        I18N::LangTags::List::name('elx') || 'unknown_language',
 128        I18N::LangTags::List::name('ar-Kw') || 'unknown_language',
 129        I18N::LangTags::List::name('en') || 'unknown_language',
 130        I18N::LangTags::List::name('en-CA') || 'unknown_language',
 131      ), "?\n";
 132  
 133  prints:
 134  
 135    Parlez-vous... Elamite, Kuwait Arabic, English, Canadian English?
 136  
 137  =head1 DESCRIPTION
 138  
 139  This module provides a function 
 140  C<I18N::LangTags::List::name( I<langtag> ) > that takes
 141  a language tag (see L<I18N::LangTags|I18N::LangTags>)
 142  and returns the best attempt at an English name for it, or
 143  undef if it can't make sense of the tag.
 144  
 145  The function I18N::LangTags::List::name(...) is not exported.
 146  
 147  This module also provides a function
 148  C<I18N::LangTags::List::is_decent( I<langtag> )> that returns true iff
 149  the language tag is syntactically valid and is for general use (like
 150  "fr" or "fr-ca", below).  That is, it returns false for tags that are
 151  syntactically invalid and for tags, like "aus", that are listed in
 152  brackets below.  This function is not exported.
 153  
 154  The map of tags-to-names that it uses is accessible as
 155  %I18N::LangTags::List::Name, and it's the same as the list
 156  that follows in this documentation, which should be useful
 157  to you even if you don't use this module.
 158  
 159  =head1 ABOUT LANGUAGE TAGS
 160  
 161  Internet language tags, as defined in RFC 3066, are a formalism
 162  for denoting human languages.  The two-letter ISO 639-1 language
 163  codes are well known (as "en" for English), as are their forms
 164  when qualified by a country code ("en-US").  Less well-known are the
 165  arbitrary-length non-ISO codes (like "i-mingo"), and the 
 166  recently (in 2001) introduced three-letter ISO-639-2 codes.
 167  
 168  Remember these important facts:
 169  
 170  =over
 171  
 172  =item *
 173  
 174  Language tags are not locale IDs.  A locale ID is written with a "_"
 175  instead of a "-", (almost?) always matches C<m/^\w\w_\w\w\b/>, and
 176  I<means> something different than a language tag.  A language tag
 177  denotes a language.  A locale ID denotes a language I<as used in>
 178  a particular place, in combination with non-linguistic
 179  location-specific information such as what currency is used
 180  there.  Locales I<also> often denote character set information,
 181  as in "en_US.ISO8859-1".
 182  
 183  =item *
 184  
 185  Language tags are not for computer languages.
 186  
 187  =item *
 188  
 189  "Dialect" is not a useful term, since there is no objective
 190  criterion for establishing when two language-forms are
 191  dialects of eachother, or are separate languages.
 192  
 193  =item *
 194  
 195  Language tags are not case-sensitive.  en-US, en-us, En-Us, etc.,
 196  are all the same tag, and denote the same language.
 197  
 198  =item *
 199  
 200  Not every language tag really refers to a single language.  Some
 201  language tags refer to conditions: i-default (system-message text
 202  in English plus maybe other languages), und (undetermined
 203  language).  Others (notably lots of the three-letter codes) are
 204  bibliographic tags that classify whole groups of languages, as
 205  with cus "Cushitic (Other)" (i.e., a
 206  language that has been classed as Cushtic, but which has no more
 207  specific code) or the even less linguistically coherent
 208  sai for "South American Indian (Other)".  Though useful in
 209  bibliography, B<SUCH TAGS ARE NOT
 210  FOR GENERAL USE>.  For further guidance, email me.
 211  
 212  =item *
 213  
 214  Language tags are not country codes.  In fact, they are often
 215  distinct codes, as with language tag ja for Japanese, and
 216  ISO 3166 country code C<.jp> for Japan.
 217  
 218  =back
 219  
 220  =head1 LIST OF LANGUAGES
 221  
 222  The first part of each item is the language tag, between
 223  {...}.  It
 224  is followed by an English name for the language or language-group.
 225  Language tags that I judge to be not for general use, are bracketed.
 226  
 227  This list is in alphabetical order by English name of the language.
 228  
 229  =for reminder
 230   The name in the =item line MUST NOT have E<...>'s in it!!
 231  
 232  =for woohah START
 233  
 234  =over
 235  
 236  =item {ab} : Abkhazian
 237  
 238  eq Abkhaz
 239  
 240  =item {ace} : Achinese
 241  
 242  =item {ach} : Acoli
 243  
 244  =item {ada} : Adangme
 245  
 246  =item {ady} : Adyghe
 247  
 248  eq Adygei
 249  
 250  =item {aa} : Afar
 251  
 252  =item {afh} : Afrihili
 253  
 254  (Artificial)
 255  
 256  =item {af} : Afrikaans
 257  
 258  =item [{afa} : Afro-Asiatic (Other)]
 259  
 260  =item {ak} : Akan
 261  
 262  (Formerly "aka".)
 263  
 264  =item {akk} : Akkadian
 265  
 266  (Historical)
 267  
 268  =item {sq} : Albanian
 269  
 270  =item {ale} : Aleut
 271  
 272  =item [{alg} : Algonquian languages]
 273  
 274  NOT Algonquin!
 275  
 276  =item [{tut} : Altaic (Other)]
 277  
 278  =item {am} : Amharic
 279  
 280  NOT Aramaic!
 281  
 282  =item {i-ami} : Ami
 283  
 284  eq Amis.  eq 'Amis.  eq Pangca.
 285  
 286  =item [{apa} : Apache languages]
 287  
 288  =item {ar} : Arabic
 289  
 290  Many forms are mutually un-intelligible in spoken media.
 291  Notable forms:
 292  {ar-ae} UAE Arabic;
 293  {ar-bh} Bahrain Arabic;
 294  {ar-dz} Algerian Arabic;
 295  {ar-eg} Egyptian Arabic;
 296  {ar-iq} Iraqi Arabic;
 297  {ar-jo} Jordanian Arabic;
 298  {ar-kw} Kuwait Arabic;
 299  {ar-lb} Lebanese Arabic;
 300  {ar-ly} Libyan Arabic;
 301  {ar-ma} Moroccan Arabic;
 302  {ar-om} Omani Arabic;
 303  {ar-qa} Qatari Arabic;
 304  {ar-sa} Sauda Arabic;
 305  {ar-sy} Syrian Arabic;
 306  {ar-tn} Tunisian Arabic;
 307  {ar-ye} Yemen Arabic.
 308  
 309  =item {arc} : Aramaic
 310  
 311  NOT Amharic!  NOT Samaritan Aramaic!
 312  
 313  =item {arp} : Arapaho
 314  
 315  =item {arn} : Araucanian
 316  
 317  =item {arw} : Arawak
 318  
 319  =item {hy} : Armenian
 320  
 321  =item {an} : Aragonese
 322  
 323  =item [{art} : Artificial (Other)]
 324  
 325  =item {ast} : Asturian
 326  
 327  eq Bable.
 328  
 329  =item {as} : Assamese
 330  
 331  =item [{ath} : Athapascan languages]
 332  
 333  eq Athabaskan.  eq Athapaskan.  eq Athabascan.
 334  
 335  =item [{aus} : Australian languages]
 336  
 337  =item [{map} : Austronesian (Other)]
 338  
 339  =item {av} : Avaric
 340  
 341  (Formerly "ava".)
 342  
 343  =item {ae} : Avestan
 344  
 345  eq Zend
 346  
 347  =item {awa} : Awadhi
 348  
 349  =item {ay} : Aymara
 350  
 351  =item {az} : Azerbaijani
 352  
 353  eq Azeri
 354  
 355  Notable forms:
 356  {az-Arab} Azerbaijani in Arabic script;
 357  {az-Cyrl} Azerbaijani in Cyrillic script;
 358  {az-Latn} Azerbaijani in Latin script.
 359  
 360  =item {ban} : Balinese
 361  
 362  =item [{bat} : Baltic (Other)]
 363  
 364  =item {bal} : Baluchi
 365  
 366  =item {bm} : Bambara
 367  
 368  (Formerly "bam".)
 369  
 370  =item [{bai} : Bamileke languages]
 371  
 372  =item {bad} : Banda
 373  
 374  =item [{bnt} : Bantu (Other)]
 375  
 376  =item {bas} : Basa
 377  
 378  =item {ba} : Bashkir
 379  
 380  =item {eu} : Basque
 381  
 382  =item {btk} : Batak (Indonesia)
 383  
 384  =item {bej} : Beja
 385  
 386  =item {be} : Belarusian
 387  
 388  eq Belarussian.  eq Byelarussian.
 389  eq Belorussian.  eq Byelorussian.
 390  eq White Russian.  eq White Ruthenian.
 391  NOT Ruthenian!
 392  
 393  =item {bem} : Bemba
 394  
 395  =item {bn} : Bengali
 396  
 397  eq Bangla.
 398  
 399  =item [{ber} : Berber (Other)]
 400  
 401  =item {bho} : Bhojpuri
 402  
 403  =item {bh} : Bihari
 404  
 405  =item {bik} : Bikol
 406  
 407  =item {bin} : Bini
 408  
 409  =item {bi} : Bislama
 410  
 411  eq Bichelamar.
 412  
 413  =item {bs} : Bosnian
 414  
 415  =item {bra} : Braj
 416  
 417  =item {br} : Breton
 418  
 419  =item {bug} : Buginese
 420  
 421  =item {bg} : Bulgarian
 422  
 423  =item {i-bnn} : Bunun
 424  
 425  =item {bua} : Buriat
 426  
 427  =item {my} : Burmese
 428  
 429  =item {cad} : Caddo
 430  
 431  =item {car} : Carib
 432  
 433  =item {ca} : Catalan
 434  
 435  eq CatalE<aacute>n.  eq Catalonian.
 436  
 437  =item [{cau} : Caucasian (Other)]
 438  
 439  =item {ceb} : Cebuano
 440  
 441  =item [{cel} : Celtic (Other)]
 442  
 443  Notable forms:
 444  {cel-gaulish} Gaulish (Historical)
 445  
 446  =item [{cai} : Central American Indian (Other)]
 447  
 448  =item {chg} : Chagatai
 449  
 450  (Historical?)
 451  
 452  =item [{cmc} : Chamic languages]
 453  
 454  =item {ch} : Chamorro
 455  
 456  =item {ce} : Chechen
 457  
 458  =item {chr} : Cherokee
 459  
 460  eq Tsalagi
 461  
 462  =item {chy} : Cheyenne
 463  
 464  =item {chb} : Chibcha
 465  
 466  (Historical)  NOT Chibchan (which is a language family).
 467  
 468  =item {ny} : Chichewa
 469  
 470  eq Nyanja.  eq Chinyanja.
 471  
 472  =item {zh} : Chinese
 473  
 474  Many forms are mutually un-intelligible in spoken media.
 475  Notable forms:
 476  {zh-Hans} Chinese, in simplified script;
 477  {zh-Hant} Chinese, in traditional script;
 478  {zh-tw} Taiwan Chinese;
 479  {zh-cn} PRC Chinese;
 480  {zh-sg} Singapore Chinese;
 481  {zh-mo} Macau Chinese;
 482  {zh-hk} Hong Kong Chinese;
 483  {zh-guoyu} Mandarin [Putonghua/Guoyu];
 484  {zh-hakka} Hakka [formerly "i-hakka"];
 485  {zh-min} Hokkien;
 486  {zh-min-nan} Southern Hokkien;
 487  {zh-wuu} Shanghaiese;
 488  {zh-xiang} Hunanese;
 489  {zh-gan} Gan;
 490  {zh-yue} Cantonese.
 491  
 492  =for etc
 493  {i-hakka} Hakka (old tag)
 494  
 495  =item {chn} : Chinook Jargon
 496  
 497  eq Chinook Wawa.
 498  
 499  =item {chp} : Chipewyan
 500  
 501  =item {cho} : Choctaw
 502  
 503  =item {cu} : Church Slavic
 504  
 505  eq Old Church Slavonic.
 506  
 507  =item {chk} : Chuukese
 508  
 509  eq Trukese.  eq Chuuk.  eq Truk.  eq Ruk.
 510  
 511  =item {cv} : Chuvash
 512  
 513  =item {cop} : Coptic
 514  
 515  =item {kw} : Cornish
 516  
 517  =item {co} : Corsican
 518  
 519  eq Corse.
 520  
 521  =item {cr} : Cree
 522  
 523  NOT Creek!  (Formerly "cre".)
 524  
 525  =item {mus} : Creek
 526  
 527  NOT Cree!
 528  
 529  =item [{cpe} : English-based Creoles and pidgins (Other)]
 530  
 531  =item [{cpf} : French-based Creoles and pidgins (Other)]
 532  
 533  =item [{cpp} : Portuguese-based Creoles and pidgins (Other)]
 534  
 535  =item [{crp} : Creoles and pidgins (Other)]
 536  
 537  =item {hr} : Croatian
 538  
 539  eq Croat.
 540  
 541  =item [{cus} : Cushitic (Other)]
 542  
 543  =item {cs} : Czech
 544  
 545  =item {dak} : Dakota
 546  
 547  eq Nakota.  eq Latoka.
 548  
 549  =item {da} : Danish
 550  
 551  =item {dar} : Dargwa
 552  
 553  =item {day} : Dayak
 554  
 555  =item {i-default} : Default (Fallthru) Language
 556  
 557  Defined in RFC 2277, this is for tagging text
 558  (which must include English text, and might/should include text
 559  in other appropriate languages) that is emitted in a context
 560  where language-negotiation wasn't possible -- in SMTP mail failure
 561  messages, for example.
 562  
 563  =item {del} : Delaware
 564  
 565  =item {din} : Dinka
 566  
 567  =item {dv} : Divehi
 568  
 569  eq Maldivian.  (Formerly "div".)
 570  
 571  =item {doi} : Dogri
 572  
 573  NOT Dogrib!
 574  
 575  =item {dgr} : Dogrib
 576  
 577  NOT Dogri!
 578  
 579  =item [{dra} : Dravidian (Other)]
 580  
 581  =item {dua} : Duala
 582  
 583  =item {nl} : Dutch
 584  
 585  eq Netherlander.  Notable forms:
 586  {nl-nl} Netherlands Dutch;
 587  {nl-be} Belgian Dutch.
 588  
 589  =item {dum} : Middle Dutch (ca.1050-1350)
 590  
 591  (Historical)
 592  
 593  =item {dyu} : Dyula
 594  
 595  =item {dz} : Dzongkha
 596  
 597  =item {efi} : Efik
 598  
 599  =item {egy} : Ancient Egyptian
 600  
 601  (Historical)
 602  
 603  =item {eka} : Ekajuk
 604  
 605  =item {elx} : Elamite
 606  
 607  (Historical)
 608  
 609  =item {en} : English
 610  
 611  Notable forms:
 612  {en-au} Australian English;
 613  {en-bz} Belize English;
 614  {en-ca} Canadian English;
 615  {en-gb} UK English;
 616  {en-ie} Irish English;
 617  {en-jm} Jamaican English;
 618  {en-nz} New Zealand English;
 619  {en-ph} Philippine English;
 620  {en-tt} Trinidad English;
 621  {en-us} US English;
 622  {en-za} South African English;
 623  {en-zw} Zimbabwe English.
 624  
 625  =item {enm} : Old English (1100-1500)
 626  
 627  (Historical)
 628  
 629  =item {ang} : Old English (ca.450-1100)
 630  
 631  eq Anglo-Saxon.  (Historical)
 632  
 633  =item {i-enochian} : Enochian (Artificial)
 634  
 635  =item {myv} : Erzya
 636  
 637  =item {eo} : Esperanto
 638  
 639  (Artificial)
 640  
 641  =item {et} : Estonian
 642  
 643  =item {ee} : Ewe
 644  
 645  (Formerly "ewe".)
 646  
 647  =item {ewo} : Ewondo
 648  
 649  =item {fan} : Fang
 650  
 651  =item {fat} : Fanti
 652  
 653  =item {fo} : Faroese
 654  
 655  =item {fj} : Fijian
 656  
 657  =item {fi} : Finnish
 658  
 659  =item [{fiu} : Finno-Ugrian (Other)]
 660  
 661  eq Finno-Ugric.  NOT Ugaritic!
 662  
 663  =item {fon} : Fon
 664  
 665  =item {fr} : French
 666  
 667  Notable forms:
 668  {fr-fr} France French;
 669  {fr-be} Belgian French;
 670  {fr-ca} Canadian French;
 671  {fr-ch} Swiss French;
 672  {fr-lu} Luxembourg French;
 673  {fr-mc} Monaco French.
 674  
 675  =item {frm} : Middle French (ca.1400-1600)
 676  
 677  (Historical)
 678  
 679  =item {fro} : Old French (842-ca.1400)
 680  
 681  (Historical)
 682  
 683  =item {fy} : Frisian
 684  
 685  =item {fur} : Friulian
 686  
 687  =item {ff} : Fulah
 688  
 689  (Formerly "ful".)
 690  
 691  =item {gaa} : Ga
 692  
 693  =item {gd} : Scots Gaelic
 694  
 695  NOT Scots!
 696  
 697  =item {gl} : Gallegan
 698  
 699  eq Galician
 700  
 701  =item {lg} : Ganda
 702  
 703  (Formerly "lug".)
 704  
 705  =item {gay} : Gayo
 706  
 707  =item {gba} : Gbaya
 708  
 709  =item {gez} : Geez
 710  
 711  eq Ge'ez
 712  
 713  =item {ka} : Georgian
 714  
 715  =item {de} : German
 716  
 717  Notable forms:
 718  {de-at} Austrian German;
 719  {de-be} Belgian German;
 720  {de-ch} Swiss German;
 721  {de-de} Germany German;
 722  {de-li} Liechtenstein German;
 723  {de-lu} Luxembourg German.
 724  
 725  =item {gmh} : Middle High German (ca.1050-1500)
 726  
 727  (Historical)
 728  
 729  =item {goh} : Old High German (ca.750-1050)
 730  
 731  (Historical)
 732  
 733  =item [{gem} : Germanic (Other)]
 734  
 735  =item {gil} : Gilbertese
 736  
 737  =item {gon} : Gondi
 738  
 739  =item {gor} : Gorontalo
 740  
 741  =item {got} : Gothic
 742  
 743  (Historical)
 744  
 745  =item {grb} : Grebo
 746  
 747  =item {grc} : Ancient Greek
 748  
 749  (Historical)  (Until 15th century or so.)
 750  
 751  =item {el} : Modern Greek
 752  
 753  (Since 15th century or so.)
 754  
 755  =item {gn} : Guarani
 756  
 757  GuaranE<iacute>
 758  
 759  =item {gu} : Gujarati
 760  
 761  =item {gwi} : Gwich'in
 762  
 763  eq Gwichin
 764  
 765  =item {hai} : Haida
 766  
 767  =item {ht} : Haitian
 768  
 769  eq Haitian Creole
 770  
 771  =item {ha} : Hausa
 772  
 773  =item {haw} : Hawaiian
 774  
 775  Hawai'ian
 776  
 777  =item {he} : Hebrew
 778  
 779  (Formerly "iw".)
 780  
 781  =for etc
 782  {iw} Hebrew (old tag)
 783  
 784  =item {hz} : Herero
 785  
 786  =item {hil} : Hiligaynon
 787  
 788  =item {him} : Himachali
 789  
 790  =item {hi} : Hindi
 791  
 792  =item {ho} : Hiri Motu
 793  
 794  =item {hit} : Hittite
 795  
 796  (Historical)
 797  
 798  =item {hmn} : Hmong
 799  
 800  =item {hu} : Hungarian
 801  
 802  =item {hup} : Hupa
 803  
 804  =item {iba} : Iban
 805  
 806  =item {is} : Icelandic
 807  
 808  =item {io} : Ido
 809  
 810  (Artificial)
 811  
 812  =item {ig} : Igbo
 813  
 814  (Formerly "ibo".)
 815  
 816  =item {ijo} : Ijo
 817  
 818  =item {ilo} : Iloko
 819  
 820  =item [{inc} : Indic (Other)]
 821  
 822  =item [{ine} : Indo-European (Other)]
 823  
 824  =item {id} : Indonesian
 825  
 826  (Formerly "in".)
 827  
 828  =for etc
 829  {in} Indonesian (old tag)
 830  
 831  =item {inh} : Ingush
 832  
 833  =item {ia} : Interlingua (International Auxiliary Language Association)
 834  
 835  (Artificial)  NOT Interlingue!
 836  
 837  =item {ie} : Interlingue
 838  
 839  (Artificial)  NOT Interlingua!
 840  
 841  =item {iu} : Inuktitut
 842  
 843  A subform of "Eskimo".
 844  
 845  =item {ik} : Inupiaq
 846  
 847  A subform of "Eskimo".
 848  
 849  =item [{ira} : Iranian (Other)]
 850  
 851  =item {ga} : Irish
 852  
 853  =item {mga} : Middle Irish (900-1200)
 854  
 855  (Historical)
 856  
 857  =item {sga} : Old Irish (to 900)
 858  
 859  (Historical)
 860  
 861  =item [{iro} : Iroquoian languages]
 862  
 863  =item {it} : Italian
 864  
 865  Notable forms:
 866  {it-it} Italy Italian;
 867  {it-ch} Swiss Italian.
 868  
 869  =item {ja} : Japanese
 870  
 871  (NOT "jp"!)
 872  
 873  =item {jv} : Javanese
 874  
 875  (Formerly "jw" because of a typo.)
 876  
 877  =item {jrb} : Judeo-Arabic
 878  
 879  =item {jpr} : Judeo-Persian
 880  
 881  =item {kbd} : Kabardian
 882  
 883  =item {kab} : Kabyle
 884  
 885  =item {kac} : Kachin
 886  
 887  =item {kl} : Kalaallisut
 888  
 889  eq Greenlandic "Eskimo"
 890  
 891  =item {xal} : Kalmyk
 892  
 893  =item {kam} : Kamba
 894  
 895  =item {kn} : Kannada
 896  
 897  eq Kanarese.  NOT Canadian!
 898  
 899  =item {kr} : Kanuri
 900  
 901  (Formerly "kau".)
 902  
 903  =item {krc} : Karachay-Balkar
 904  
 905  =item {kaa} : Kara-Kalpak
 906  
 907  =item {kar} : Karen
 908  
 909  =item {ks} : Kashmiri
 910  
 911  =item {csb} : Kashubian
 912  
 913  eq Kashub
 914  
 915  =item {kaw} : Kawi
 916  
 917  =item {kk} : Kazakh
 918  
 919  =item {kha} : Khasi
 920  
 921  =item {km} : Khmer
 922  
 923  eq Cambodian.  eq Kampuchean.
 924  
 925  =item [{khi} : Khoisan (Other)]
 926  
 927  =item {kho} : Khotanese
 928  
 929  =item {ki} : Kikuyu
 930  
 931  eq Gikuyu.
 932  
 933  =item {kmb} : Kimbundu
 934  
 935  =item {rw} : Kinyarwanda
 936  
 937  =item {ky} : Kirghiz
 938  
 939  =item {i-klingon} : Klingon
 940  
 941  =item {kv} : Komi
 942  
 943  =item {kg} : Kongo
 944  
 945  (Formerly "kon".)
 946  
 947  =item {kok} : Konkani
 948  
 949  =item {ko} : Korean
 950  
 951  =item {kos} : Kosraean
 952  
 953  =item {kpe} : Kpelle
 954  
 955  =item {kro} : Kru
 956  
 957  =item {kj} : Kuanyama
 958  
 959  =item {kum} : Kumyk
 960  
 961  =item {ku} : Kurdish
 962  
 963  =item {kru} : Kurukh
 964  
 965  =item {kut} : Kutenai
 966  
 967  =item {lad} : Ladino
 968  
 969  eq Judeo-Spanish.  NOT Ladin (a minority language in Italy).
 970  
 971  =item {lah} : Lahnda
 972  
 973  NOT Lamba!
 974  
 975  =item {lam} : Lamba
 976  
 977  NOT Lahnda!
 978  
 979  =item {lo} : Lao
 980  
 981  eq Laotian.
 982  
 983  =item {la} : Latin
 984  
 985  (Historical)  NOT Ladin!  NOT Ladino!
 986  
 987  =item {lv} : Latvian
 988  
 989  eq Lettish.
 990  
 991  =item {lb} : Letzeburgesch
 992  
 993  eq Luxemburgian, eq Luxemburger.  (Formerly "i-lux".)
 994  
 995  =for etc
 996  {i-lux} Letzeburgesch (old tag)
 997  
 998  =item {lez} : Lezghian
 999  
1000  =item {li} : Limburgish
1001  
1002  eq Limburger, eq Limburgan.  NOT Letzeburgesch!
1003  
1004  =item {ln} : Lingala
1005  
1006  =item {lt} : Lithuanian
1007  
1008  =item {nds} : Low German
1009  
1010  eq Low Saxon.  eq Low German.  eq Low Saxon.
1011  
1012  =item {art-lojban} : Lojban (Artificial)
1013  
1014  =item {loz} : Lozi
1015  
1016  =item {lu} : Luba-Katanga
1017  
1018  (Formerly "lub".)
1019  
1020  =item {lua} : Luba-Lulua
1021  
1022  =item {lui} : Luiseno
1023  
1024  eq LuiseE<ntilde>o.
1025  
1026  =item {lun} : Lunda
1027  
1028  =item {luo} : Luo (Kenya and Tanzania)
1029  
1030  =item {lus} : Lushai
1031  
1032  =item {mk} : Macedonian
1033  
1034  eq the modern Slavic language spoken in what was Yugoslavia.
1035  NOT the form of Greek spoken in Greek Macedonia!
1036  
1037  =item {mad} : Madurese
1038  
1039  =item {mag} : Magahi
1040  
1041  =item {mai} : Maithili
1042  
1043  =item {mak} : Makasar
1044  
1045  =item {mg} : Malagasy
1046  
1047  =item {ms} : Malay
1048  
1049  NOT Malayalam!
1050  
1051  =item {ml} : Malayalam
1052  
1053  NOT Malay!
1054  
1055  =item {mt} : Maltese
1056  
1057  =item {mnc} : Manchu
1058  
1059  =item {mdr} : Mandar
1060  
1061  NOT Mandarin!
1062  
1063  =item {man} : Mandingo
1064  
1065  =item {mni} : Manipuri
1066  
1067  eq Meithei.
1068  
1069  =item [{mno} : Manobo languages]
1070  
1071  =item {gv} : Manx
1072  
1073  =item {mi} : Maori
1074  
1075  NOT Mari!
1076  
1077  =item {mr} : Marathi
1078  
1079  =item {chm} : Mari
1080  
1081  NOT Maori!
1082  
1083  =item {mh} : Marshall
1084  
1085  eq Marshallese.
1086  
1087  =item {mwr} : Marwari
1088  
1089  =item {mas} : Masai
1090  
1091  =item [{myn} : Mayan languages]
1092  
1093  =item {men} : Mende
1094  
1095  =item {mic} : Micmac
1096  
1097  =item {min} : Minangkabau
1098  
1099  =item {i-mingo} : Mingo
1100  
1101  eq the Irquoian language West Virginia Seneca.  NOT New York Seneca!
1102  
1103  =item [{mis} : Miscellaneous languages]
1104  
1105  Don't use this.
1106  
1107  =item {moh} : Mohawk
1108  
1109  =item {mdf} : Moksha
1110  
1111  =item {mo} : Moldavian
1112  
1113  eq Moldovan.
1114  
1115  =item [{mkh} : Mon-Khmer (Other)]
1116  
1117  =item {lol} : Mongo
1118  
1119  =item {mn} : Mongolian
1120  
1121  eq Mongol.
1122  
1123  =item {mos} : Mossi
1124  
1125  =item [{mul} : Multiple languages]
1126  
1127  Not for normal use.
1128  
1129  =item [{mun} : Munda languages]
1130  
1131  =item {nah} : Nahuatl
1132  
1133  =item {nap} : Neapolitan
1134  
1135  =item {na} : Nauru
1136  
1137  =item {nv} : Navajo
1138  
1139  eq Navaho.  (Formerly "i-navajo".)
1140  
1141  =for etc
1142  {i-navajo} Navajo (old tag)
1143  
1144  =item {nd} : North Ndebele
1145  
1146  =item {nr} : South Ndebele
1147  
1148  =item {ng} : Ndonga
1149  
1150  =item {ne} : Nepali
1151  
1152  eq Nepalese.  Notable forms:
1153  {ne-np} Nepal Nepali;
1154  {ne-in} India Nepali.
1155  
1156  =item {new} : Newari
1157  
1158  =item {nia} : Nias
1159  
1160  =item [{nic} : Niger-Kordofanian (Other)]
1161  
1162  =item [{ssa} : Nilo-Saharan (Other)]
1163  
1164  =item {niu} : Niuean
1165  
1166  =item {nog} : Nogai
1167  
1168  =item {non} : Old Norse
1169  
1170  (Historical)
1171  
1172  =item [{nai} : North American Indian]
1173  
1174  Do not use this.
1175  
1176  =item {no} : Norwegian
1177  
1178  Note the two following forms:
1179  
1180  =item {nb} : Norwegian Bokmal
1181  
1182  eq BokmE<aring>l, (A form of Norwegian.)  (Formerly "no-bok".)
1183  
1184  =for etc
1185  {no-bok} Norwegian Bokmal (old tag)
1186  
1187  =item {nn} : Norwegian Nynorsk
1188  
1189  (A form of Norwegian.)  (Formerly "no-nyn".)
1190  
1191  =for etc
1192  {no-nyn} Norwegian Nynorsk (old tag)
1193  
1194  =item [{nub} : Nubian languages]
1195  
1196  =item {nym} : Nyamwezi
1197  
1198  =item {nyn} : Nyankole
1199  
1200  =item {nyo} : Nyoro
1201  
1202  =item {nzi} : Nzima
1203  
1204  =item {oc} : Occitan (post 1500)
1205  
1206  eq ProvenE<ccedil>al, eq Provencal
1207  
1208  =item {oj} : Ojibwa
1209  
1210  eq Ojibwe.  (Formerly "oji".)
1211  
1212  =item {or} : Oriya
1213  
1214  =item {om} : Oromo
1215  
1216  =item {osa} : Osage
1217  
1218  =item {os} : Ossetian; Ossetic
1219  
1220  =item [{oto} : Otomian languages]
1221  
1222  Group of languages collectively called "OtomE<iacute>".
1223  
1224  =item {pal} : Pahlavi
1225  
1226  eq Pahlevi
1227  
1228  =item {i-pwn} : Paiwan
1229  
1230  eq Pariwan
1231  
1232  =item {pau} : Palauan
1233  
1234  =item {pi} : Pali
1235  
1236  (Historical?)
1237  
1238  =item {pam} : Pampanga
1239  
1240  =item {pag} : Pangasinan
1241  
1242  =item {pa} : Panjabi
1243  
1244  eq Punjabi
1245  
1246  =item {pap} : Papiamento
1247  
1248  eq Papiamentu.
1249  
1250  =item [{paa} : Papuan (Other)]
1251  
1252  =item {fa} : Persian
1253  
1254  eq Farsi.  eq Iranian.
1255  
1256  =item {peo} : Old Persian (ca.600-400 B.C.)
1257  
1258  =item [{phi} : Philippine (Other)]
1259  
1260  =item {phn} : Phoenician
1261  
1262  (Historical)
1263  
1264  =item {pon} : Pohnpeian
1265  
1266  NOT Pompeiian!
1267  
1268  =item {pl} : Polish
1269  
1270  =item {pt} : Portuguese
1271  
1272  eq Portugese.  Notable forms:
1273  {pt-pt} Portugal Portuguese;
1274  {pt-br} Brazilian Portuguese.
1275  
1276  =item [{pra} : Prakrit languages]
1277  
1278  =item {pro} : Old Provencal (to 1500)
1279  
1280  eq Old ProvenE<ccedil>al.  (Historical.)
1281  
1282  =item {ps} : Pushto
1283  
1284  eq Pashto.  eq Pushtu.
1285  
1286  =item {qu} : Quechua
1287  
1288  eq Quecha.
1289  
1290  =item {rm} : Raeto-Romance
1291  
1292  eq Romansh.
1293  
1294  =item {raj} : Rajasthani
1295  
1296  =item {rap} : Rapanui
1297  
1298  =item {rar} : Rarotongan
1299  
1300  =item [{qaa - qtz} : Reserved for local use.]
1301  
1302  =item [{roa} : Romance (Other)]
1303  
1304  NOT Romanian!  NOT Romany!  NOT Romansh!
1305  
1306  =item {ro} : Romanian
1307  
1308  eq Rumanian.  NOT Romany!
1309  
1310  =item {rom} : Romany
1311  
1312  eq Rom.  NOT Romanian!
1313  
1314  =item {rn} : Rundi
1315  
1316  =item {ru} : Russian
1317  
1318  NOT White Russian!  NOT Rusyn!
1319  
1320  =item [{sal} : Salishan languages]
1321  
1322  Large language group.
1323  
1324  =item {sam} : Samaritan Aramaic
1325  
1326  NOT Aramaic!
1327  
1328  =item {se} : Northern Sami
1329  
1330  eq Lappish.  eq Lapp.  eq (Northern) Saami.
1331  
1332  =item {sma} : Southern Sami
1333  
1334  =item {smn} : Inari Sami
1335  
1336  =item {smj} : Lule Sami
1337  
1338  =item {sms} : Skolt Sami
1339  
1340  =item [{smi} : Sami languages (Other)]
1341  
1342  =item {sm} : Samoan
1343  
1344  =item {sad} : Sandawe
1345  
1346  =item {sg} : Sango
1347  
1348  =item {sa} : Sanskrit
1349  
1350  (Historical)
1351  
1352  =item {sat} : Santali
1353  
1354  =item {sc} : Sardinian
1355  
1356  eq Sard.
1357  
1358  =item {sas} : Sasak
1359  
1360  =item {sco} : Scots
1361  
1362  NOT Scots Gaelic!
1363  
1364  =item {sel} : Selkup
1365  
1366  =item [{sem} : Semitic (Other)]
1367  
1368  =item {sr} : Serbian
1369  
1370  eq Serb.  NOT Sorbian.
1371  
1372  Notable forms:
1373  {sr-Cyrl} : Serbian in Cyrillic script;
1374  {sr-Latn} : Serbian in Latin script.
1375  
1376  =item {srr} : Serer
1377  
1378  =item {shn} : Shan
1379  
1380  =item {sn} : Shona
1381  
1382  =item {sid} : Sidamo
1383  
1384  =item {sgn-...} : Sign Languages
1385  
1386  Always use with a subtag.  Notable forms:
1387  {sgn-gb} British Sign Language (BSL);
1388  {sgn-ie} Irish Sign Language (ESL);
1389  {sgn-ni} Nicaraguan Sign Language (ISN);
1390  {sgn-us} American Sign Language (ASL).
1391  
1392  (And so on with other country codes as the subtag.)
1393  
1394  =item {bla} : Siksika
1395  
1396  eq Blackfoot.  eq Pikanii.
1397  
1398  =item {sd} : Sindhi
1399  
1400  =item {si} : Sinhalese
1401  
1402  eq Sinhala.
1403  
1404  =item [{sit} : Sino-Tibetan (Other)]
1405  
1406  =item [{sio} : Siouan languages]
1407  
1408  =item {den} : Slave (Athapascan)
1409  
1410  ("Slavey" is a subform.)
1411  
1412  =item [{sla} : Slavic (Other)]
1413  
1414  =item {sk} : Slovak
1415  
1416  eq Slovakian.
1417  
1418  =item {sl} : Slovenian
1419  
1420  eq Slovene.
1421  
1422  =item {sog} : Sogdian
1423  
1424  =item {so} : Somali
1425  
1426  =item {son} : Songhai
1427  
1428  =item {snk} : Soninke
1429  
1430  =item {wen} : Sorbian languages
1431  
1432  eq Wendish.  eq Sorb.  eq Lusatian.  eq Wend.  NOT Venda!  NOT Serbian!
1433  
1434  =item {nso} : Northern Sotho
1435  
1436  =item {st} : Southern Sotho
1437  
1438  eq Sutu.  eq Sesotho.
1439  
1440  =item [{sai} : South American Indian (Other)]
1441  
1442  =item {es} : Spanish
1443  
1444  Notable forms:
1445  {es-ar} Argentine Spanish;
1446  {es-bo} Bolivian Spanish;
1447  {es-cl} Chilean Spanish;
1448  {es-co} Colombian Spanish;
1449  {es-do} Dominican Spanish;
1450  {es-ec} Ecuadorian Spanish;
1451  {es-es} Spain Spanish;
1452  {es-gt} Guatemalan Spanish;
1453  {es-hn} Honduran Spanish;
1454  {es-mx} Mexican Spanish;
1455  {es-pa} Panamanian Spanish;
1456  {es-pe} Peruvian Spanish;
1457  {es-pr} Puerto Rican Spanish;
1458  {es-py} Paraguay Spanish;
1459  {es-sv} Salvadoran Spanish;
1460  {es-us} US Spanish;
1461  {es-uy} Uruguayan Spanish;
1462  {es-ve} Venezuelan Spanish.
1463  
1464  =item {suk} : Sukuma
1465  
1466  =item {sux} : Sumerian
1467  
1468  (Historical)
1469  
1470  =item {su} : Sundanese
1471  
1472  =item {sus} : Susu
1473  
1474  =item {sw} : Swahili
1475  
1476  eq Kiswahili
1477  
1478  =item {ss} : Swati
1479  
1480  =item {sv} : Swedish
1481  
1482  Notable forms:
1483  {sv-se} Sweden Swedish;
1484  {sv-fi} Finland Swedish.
1485  
1486  =item {syr} : Syriac
1487  
1488  =item {tl} : Tagalog
1489  
1490  =item {ty} : Tahitian
1491  
1492  =item [{tai} : Tai (Other)]
1493  
1494  NOT Thai!
1495  
1496  =item {tg} : Tajik
1497  
1498  =item {tmh} : Tamashek
1499  
1500  =item {ta} : Tamil
1501  
1502  =item {i-tao} : Tao
1503  
1504  eq Yami.
1505  
1506  =item {tt} : Tatar
1507  
1508  =item {i-tay} : Tayal
1509  
1510  eq Atayal.  eq Atayan.
1511  
1512  =item {te} : Telugu
1513  
1514  =item {ter} : Tereno
1515  
1516  =item {tet} : Tetum
1517  
1518  =item {th} : Thai
1519  
1520  NOT Tai!
1521  
1522  =item {bo} : Tibetan
1523  
1524  =item {tig} : Tigre
1525  
1526  =item {ti} : Tigrinya
1527  
1528  =item {tem} : Timne
1529  
1530  eq Themne.  eq Timene.
1531  
1532  =item {tiv} : Tiv
1533  
1534  =item {tli} : Tlingit
1535  
1536  =item {tpi} : Tok Pisin
1537  
1538  =item {tkl} : Tokelau
1539  
1540  =item {tog} : Tonga (Nyasa)
1541  
1542  NOT Tsonga!
1543  
1544  =item {to} : Tonga (Tonga Islands)
1545  
1546  (Pronounced "Tong-a", not "Tong-ga")
1547  
1548  NOT Tsonga!
1549  
1550  =item {tsi} : Tsimshian
1551  
1552  eq Sm'algyax
1553  
1554  =item {ts} : Tsonga
1555  
1556  NOT Tonga!
1557  
1558  =item {i-tsu} : Tsou
1559  
1560  =item {tn} : Tswana
1561  
1562  Same as Setswana.
1563  
1564  =item {tum} : Tumbuka
1565  
1566  =item [{tup} : Tupi languages]
1567  
1568  =item {tr} : Turkish
1569  
1570  (Typically in Roman script)
1571  
1572  =item {ota} : Ottoman Turkish (1500-1928)
1573  
1574  (Typically in Arabic script)  (Historical)
1575  
1576  =item {crh} : Crimean Turkish
1577  
1578  eq Crimean Tatar
1579  
1580  =item {tk} : Turkmen
1581  
1582  eq Turkmeni.
1583  
1584  =item {tvl} : Tuvalu
1585  
1586  =item {tyv} : Tuvinian
1587  
1588  eq Tuvan.  eq Tuvin.
1589  
1590  =item {tw} : Twi
1591  
1592  =item {udm} : Udmurt
1593  
1594  =item {uga} : Ugaritic
1595  
1596  NOT Ugric!
1597  
1598  =item {ug} : Uighur
1599  
1600  =item {uk} : Ukrainian
1601  
1602  =item {umb} : Umbundu
1603  
1604  =item {und} : Undetermined
1605  
1606  Not a tag for normal use.
1607  
1608  =item {ur} : Urdu
1609  
1610  =item {uz} : Uzbek
1611  
1612  eq E<Ouml>zbek
1613  
1614  Notable forms:
1615  {uz-Cyrl} Uzbek in Cyrillic script;
1616  {uz-Latn} Uzbek in Latin script.
1617  
1618  =item {vai} : Vai
1619  
1620  =item {ve} : Venda
1621  
1622  NOT Wendish!  NOT Wend!  NOT Avestan!  (Formerly "ven".)
1623  
1624  =item {vi} : Vietnamese
1625  
1626  eq Viet.
1627  
1628  =item {vo} : Volapuk
1629  
1630  eq VolapE<uuml>k.  (Artificial)
1631  
1632  =item {vot} : Votic
1633  
1634  eq Votian.  eq Vod.
1635  
1636  =item [{wak} : Wakashan languages]
1637  
1638  =item {wa} : Walloon
1639  
1640  =item {wal} : Walamo
1641  
1642  eq Wolaytta.
1643  
1644  =item {war} : Waray
1645  
1646  Presumably the Philippine language Waray-Waray (SamareE<ntilde>o),
1647  not the smaller Philippine language Waray Sorsogon, nor the extinct
1648  Australian language Waray.
1649  
1650  =item {was} : Washo
1651  
1652  eq Washoe
1653  
1654  =item {cy} : Welsh
1655  
1656  =item {wo} : Wolof
1657  
1658  =item {x-...} : Unregistered (Semi-Private Use)
1659  
1660  "x-" is a prefix for language tags that are not registered with ISO
1661  or IANA.  Example, x-double-dutch
1662  
1663  =item {xh} : Xhosa
1664  
1665  =item {sah} : Yakut
1666  
1667  =item {yao} : Yao
1668  
1669  (The Yao in Malawi?)
1670  
1671  =item {yap} : Yapese
1672  
1673  eq Yap
1674  
1675  =item {ii} : Sichuan Yi
1676  
1677  =item {yi} : Yiddish
1678  
1679  Formerly "ji".  Usually in Hebrew script.
1680  
1681  Notable forms:
1682  {yi-latn} Yiddish in Latin script
1683  
1684  =item {yo} : Yoruba
1685  
1686  =item [{ypk} : Yupik languages]
1687  
1688  Several "Eskimo" languages.
1689  
1690  =item {znd} : Zande
1691  
1692  =item [{zap} : Zapotec]
1693  
1694  (A group of languages.)
1695  
1696  =item {zen} : Zenaga
1697  
1698  NOT Zend.
1699  
1700  =item {za} : Zhuang
1701  
1702  =item {zu} : Zulu
1703  
1704  =item {zun} : Zuni
1705  
1706  eq ZuE<ntilde>i
1707  
1708  =back
1709  
1710  =for woohah END
1711  
1712  =head1 SEE ALSO
1713  
1714  L<I18N::LangTags|I18N::LangTags> and its "See Also" section.
1715  
1716  =head1 COPYRIGHT AND DISCLAIMER
1717  
1718  Copyright (c) 2001+ Sean M. Burke. All rights reserved.
1719  
1720  You can redistribute and/or
1721  modify this document under the same terms as Perl itself.
1722  
1723  This document is provided in the hope that it will be
1724  useful, but without any warranty;
1725  without even the implied warranty of accuracy, authoritativeness,
1726  completeness, merchantability, or fitness for a particular purpose.
1727  
1728  Email any corrections or questions to me.
1729  
1730  =head1 AUTHOR
1731  
1732  Sean M. Burke, sburkeE<64>cpan.org
1733  
1734  =cut
1735  
1736  
1737  # To generate a list of just the two and three-letter codes:
1738  
1739  #!/usr/local/bin/perl -w
1740  
1741  require 5; # Time-stamp: "2001-03-13 21:53:39 MST"
1742   # Sean M. Burke, sburke@cpan.org
1743   # This program is for generating the language_codes.txt file
1744  use strict;
1745  use LWP::Simple;
1746  use HTML::TreeBuilder 3.10;
1747  my $root = HTML::TreeBuilder->new();
1748  my $url = 'http://lcweb.loc.gov/standards/iso639-2/bibcodes.html';
1749  $root->parse(get($url) || die "Can't get $url");
1750  $root->eof();
1751  
1752  my @codes;
1753  
1754  foreach my $tr ($root->find_by_tag_name('tr')) {
1755    my @f = map $_->as_text(), $tr->content_list();
1756    #print map("<$_> ", @f), "\n";
1757    next unless @f == 5;
1758    pop @f; # nix the French name
1759    next if $f[-1] eq 'Language Name (English)'; # it's a header line
1760    my $xx = splice(@f, 2,1); # pull out the two-letter code
1761    $f[-1] =~ s/^\s+//;
1762    $f[-1] =~ s/\s+$//;
1763    if($xx =~ m/[a-zA-Z]/) {   # there's a two-letter code for it
1764      push   @codes, [ lc($f[-1]),   "$xx\t$f[-1]\n" ];
1765    } else { # print the three-letter codes.
1766      if($f[0] eq $f[1]) {
1767        push @codes, [ lc($f[-1]), "$f[1]\t$f[2]\n" ];
1768      } else { # shouldn't happen
1769        push @codes, [ lc($f[-1]), "@f !!!!!!!!!!\n" ]; 
1770      }
1771    }
1772  }
1773  
1774  print map $_->[1], sort {; $a->[0] cmp $b->[0] } @codes;
1775  print "[ based on $url\n at ", scalar(localtime), "]\n",
1776    "[Note: doesn't include IANA-registered codes.]\n";
1777  exit;
1778  __END__
1779  


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1