1N/A
1N/Arequire 5;
1N/Apackage I18N::LangTags::List;
1N/A# Time-stamp: "2003-10-10 17:39:45 ADT"
1N/Ause strict;
1N/Ause vars qw(%Name %Is_Disrec $Debug $VERSION);
1N/A$VERSION = '0.29';
1N/A# POD at the end.
1N/A
1N/A#----------------------------------------------------------------------
1N/A{
1N/A# read the table out of our own POD!
1N/A my $seeking = 1;
1N/A my $count = 0;
1N/A my($disrec,$tag,$name);
1N/A my $last_name = '';
1N/A while(<I18N::LangTags::List::DATA>) {
1N/A if($seeking) {
1N/A $seeking = 0 if m/=for woohah/;
1N/A } elsif( ($disrec, $tag, $name) =
1N/A m/(\[?)\{([-0-9a-zA-Z]+)\}(?:\s*:)?\s*([^\[\]]+)/
1N/A ) {
1N/A $name =~ s/\s*[;\.]*\s*$//g;
1N/A next unless $name;
1N/A ++$count;
1N/A print "<$tag> <$name>\n" if $Debug;
1N/A $last_name = $Name{$tag} = $name;
1N/A $Is_Disrec{$tag} = 1 if $disrec;
1N/A } elsif (m/[Ff]ormerly \"([-a-z0-9]+)\"/) {
1N/A $Name{$1} = "$last_name (old tag)" if $last_name;
1N/A $Is_Disrec{$1} = 1;
1N/A }
1N/A }
1N/A die "No tags read??" unless $count;
1N/A}
1N/A#----------------------------------------------------------------------
1N/A
1N/Asub name {
1N/A my $tag = lc($_[0] || return);
1N/A $tag =~ s/^\s+//s;
1N/A $tag =~ s/\s+$//s;
1N/A
1N/A my $alt;
1N/A if($tag =~ m/^x-(.+)/) {
1N/A $alt = "i-$1";
1N/A } elsif($tag =~ m/^i-(.+)/) {
1N/A $alt = "x-$1";
1N/A } else {
1N/A $alt = '';
1N/A }
1N/A
1N/A my $subform = '';
1N/A my $name = '';
1N/A print "Input: {$tag}\n" if $Debug;
1N/A while(length $tag) {
1N/A last if $name = $Name{$tag};
1N/A last if $name = $Name{$alt};
1N/A if($tag =~ s/(-[a-z0-9]+)$//s) {
1N/A print "Shaving off: $1 leaving $tag\n" if $Debug;
1N/A $subform = "$1$subform";
1N/A # and loop around again
1N/A
1N/A $alt =~ s/(-[a-z0-9]+)$//s && $Debug && print " alt -> $alt\n";
1N/A } else {
1N/A # we're trying to pull a subform off a primary tag. TILT!
1N/A print "Aborting on: {$name}{$subform}\n" if $Debug;
1N/A last;
1N/A }
1N/A }
1N/A print "Output: {$name}{$subform}\n" if $Debug;
1N/A
1N/A return unless $name; # Failure
1N/A return $name unless $subform; # Exact match
1N/A $subform =~ s/^-//s;
1N/A $subform =~ s/-$//s;
1N/A return "$name (Subform \"$subform\")";
1N/A}
1N/A
1N/A#--------------------------------------------------------------------------
1N/A
1N/Asub is_decent {
1N/A my $tag = lc($_[0] || return 0);
1N/A #require I18N::LangTags;
1N/A
1N/A return 0 unless
1N/A $tag =~
1N/A /^(?: # First subtag
1N/A [xi] | [a-z]{2,3}
1N/A )
1N/A (?: # Subtags thereafter
1N/A - # separator
1N/A [a-z0-9]{1,8} # subtag
1N/A )*
1N/A $/xs;
1N/A
1N/A my @supers = ();
1N/A foreach my $bit (split('-', $tag)) {
1N/A push @supers,
1N/A scalar(@supers) ? ($supers[-1] . '-' . $bit) : $bit;
1N/A }
1N/A return 0 unless @supers;
1N/A shift @supers if $supers[0] =~ m<^(i|x|sgn)$>s;
1N/A return 0 unless @supers;
1N/A
1N/A foreach my $f ($tag, @supers) {
1N/A return 0 if $Is_Disrec{$f};
1N/A return 2 if $Name{$f};
1N/A # so that decent subforms of indecent tags are decent
1N/A }
1N/A return 2 if $Name{$tag}; # not only is it decent, it's known!
1N/A return 1;
1N/A}
1N/A
1N/A#--------------------------------------------------------------------------
1N/A1;
1N/A
1N/A__DATA__
1N/A
1N/A=head1 NAME
1N/A
1N/AI18N::LangTags::List -- tags and names for human languages
1N/A
1N/A=head1 SYNOPSIS
1N/A
1N/A use I18N::LangTags::List;
1N/A print "Parlez-vous... ", join(', ',
1N/A I18N::LangTags::List::name('elx') || 'unknown_language',
1N/A I18N::LangTags::List::name('ar-Kw') || 'unknown_language',
1N/A I18N::LangTags::List::name('en') || 'unknown_language',
1N/A I18N::LangTags::List::name('en-CA') || 'unknown_language',
1N/A ), "?\n";
1N/A
1N/Aprints:
1N/A
1N/A Parlez-vous... Elamite, Kuwait Arabic, English, Canadian English?
1N/A
1N/A=head1 DESCRIPTION
1N/A
1N/AThis module provides a function
1N/AC<I18N::LangTags::List::name( I<langtag> ) > that takes
1N/Aa language tag (see L<I18N::LangTags|I18N::LangTags>)
1N/Aand returns the best attempt at an English name for it, or
1N/Aundef if it can't make sense of the tag.
1N/A
1N/AThe function I18N::LangTags::List::name(...) is not exported.
1N/A
1N/AThis module also provides a function
1N/AC<I18N::LangTags::List::is_decent( I<langtag> )> that returns true iff
1N/Athe language tag is syntactically valid and is for general use (like
1N/A"fr" or "fr-ca", below). That is, it returns false for tags that are
1N/Asyntactically invalid and for tags, like "aus", that are listed in
1N/Abrackets below. This function is not exported.
1N/A
1N/AThe map of tags-to-names that it uses is accessable as
1N/A%I18N::LangTags::List::Name, and it's the same as the list
1N/Athat follows in this documentation, which should be useful
1N/Ato you even if you don't use this module.
1N/A
1N/A=head1 ABOUT LANGUAGE TAGS
1N/A
1N/AInternet language tags, as defined in RFC 3066, are a formalism
1N/Afor denoting human languages. The two-letter ISO 639-1 language
1N/Acodes are well known (as "en" for English), as are their forms
1N/Awhen qualified by a country code ("en-US"). Less well-known are the
1N/Aarbitrary-length non-ISO codes (like "i-mingo"), and the
1N/Arecently (in 2001) introduced three-letter ISO-639-2 codes.
1N/A
1N/ARemember these important facts:
1N/A
1N/A=over
1N/A
1N/A=item *
1N/A
1N/ALanguage tags are not locale IDs. A locale ID is written with a "_"
1N/Ainstead of a "-", (almost?) always matches C<m/^\w\w_\w\w\b/>, and
1N/AI<means> something different than a language tag. A language tag
1N/Adenotes a language. A locale ID denotes a language I<as used in>
1N/Aa particular place, in combination with non-linguistic
1N/Alocation-specific information such as what currency is used
1N/Athere. Locales I<also> often denote character set information,
1N/Aas in "en_US.ISO8859-1".
1N/A
1N/A=item *
1N/A
1N/ALanguage tags are not for computer languages.
1N/A
1N/A=item *
1N/A
1N/A"Dialect" is not a useful term, since there is no objective
1N/Acriterion for establishing when two language-forms are
1N/Adialects of eachother, or are separate languages.
1N/A
1N/A=item *
1N/A
1N/ALanguage tags are not case-sensitive. en-US, en-us, En-Us, etc.,
1N/Aare all the same tag, and denote the same language.
1N/A
1N/A=item *
1N/A
1N/ANot every language tag really refers to a single language. Some
1N/Alanguage tags refer to conditions: i-default (system-message text
1N/Ain English plus maybe other languages), und (undetermined
1N/Alanguage). Others (notably lots of the three-letter codes) are
1N/Abibliographic tags that classify whole groups of languages, as
1N/Awith cus "Cushitic (Other)" (i.e., a
1N/Alanguage that has been classed as Cushtic, but which has no more
1N/Aspecific code) or the even less linguistically coherent
1N/Asai for "South American Indian (Other)". Though useful in
1N/Abibliography, B<SUCH TAGS ARE NOT
1N/AFOR GENERAL USE>. For further guidance, email me.
1N/A
1N/A=item *
1N/A
1N/ALanguage tags are not country codes. In fact, they are often
1N/Adistinct codes, as with language tag ja for Japanese, and
1N/AISO 3166 country code C<.jp> for Japan.
1N/A
1N/A=back
1N/A
1N/A=head1 LIST OF LANGUAGES
1N/A
1N/AThe first part of each item is the language tag, between
1N/A{...}. It
1N/Ais followed by an English name for the language or language-group.
1N/ALanguage tags that I judge to be not for general use, are bracketed.
1N/A
1N/AThis list is in alphabetical order by English name of the language.
1N/A
1N/A=for reminder
1N/A The name in the =item line MUST NOT have E<...>'s in it!!
1N/A
1N/A=for woohah START
1N/A
1N/A=over
1N/A
1N/A=item {ab} : Abkhazian
1N/A
1N/Aeq Abkhaz
1N/A
1N/A=item {ace} : Achinese
1N/A
1N/A=item {ach} : Acoli
1N/A
1N/A=item {ada} : Adangme
1N/A
1N/A=item {ady} : Adyghe
1N/A
1N/Aeq Adygei
1N/A
1N/A=item {aa} : Afar
1N/A
1N/A=item {afh} : Afrihili
1N/A
1N/A(Artificial)
1N/A
1N/A=item {af} : Afrikaans
1N/A
1N/A=item [{afa} : Afro-Asiatic (Other)]
1N/A
1N/A=item {ak} : Akan
1N/A
1N/A(Formerly "aka".)
1N/A
1N/A=item {akk} : Akkadian
1N/A
1N/A(Historical)
1N/A
1N/A=item {sq} : Albanian
1N/A
1N/A=item {ale} : Aleut
1N/A
1N/A=item [{alg} : Algonquian languages]
1N/A
1N/ANOT Algonquin!
1N/A
1N/A=item [{tut} : Altaic (Other)]
1N/A
1N/A=item {am} : Amharic
1N/A
1N/ANOT Aramaic!
1N/A
1N/A=item {i-ami} : Ami
1N/A
1N/Aeq Amis. eq 'Amis. eq Pangca.
1N/A
1N/A=item [{apa} : Apache languages]
1N/A
1N/A=item {ar} : Arabic
1N/A
1N/AMany forms are mutually un-intelligible in spoken media.
1N/ANotable forms:
1N/A{ar-ae} UAE Arabic;
1N/A{ar-bh} Bahrain Arabic;
1N/A{ar-dz} Algerian Arabic;
1N/A{ar-eg} Egyptian Arabic;
1N/A{ar-iq} Iraqi Arabic;
1N/A{ar-jo} Jordanian Arabic;
1N/A{ar-kw} Kuwait Arabic;
1N/A{ar-lb} Lebanese Arabic;
1N/A{ar-ly} Libyan Arabic;
1N/A{ar-ma} Moroccan Arabic;
1N/A{ar-om} Omani Arabic;
1N/A{ar-qa} Qatari Arabic;
1N/A{ar-sa} Sauda Arabic;
1N/A{ar-sy} Syrian Arabic;
1N/A{ar-tn} Tunisian Arabic;
1N/A{ar-ye} Yemen Arabic.
1N/A
1N/A=item {arc} : Aramaic
1N/A
1N/ANOT Amharic! NOT Samaritan Aramaic!
1N/A
1N/A=item {arp} : Arapaho
1N/A
1N/A=item {arn} : Araucanian
1N/A
1N/A=item {arw} : Arawak
1N/A
1N/A=item {hy} : Armenian
1N/A
1N/A=item {an} : Aragonese
1N/A
1N/A=item [{art} : Artificial (Other)]
1N/A
1N/A=item {ast} : Asturian
1N/A
1N/Aeq Bable.
1N/A
1N/A=item {as} : Assamese
1N/A
1N/A=item [{ath} : Athapascan languages]
1N/A
1N/Aeq Athabaskan. eq Athapaskan. eq Athabascan.
1N/A
1N/A=item [{aus} : Australian languages]
1N/A
1N/A=item [{map} : Austronesian (Other)]
1N/A
1N/A=item {av} : Avaric
1N/A
1N/A(Formerly "ava".)
1N/A
1N/A=item {ae} : Avestan
1N/A
1N/Aeq Zend
1N/A
1N/A=item {awa} : Awadhi
1N/A
1N/A=item {ay} : Aymara
1N/A
1N/A=item {az} : Azerbaijani
1N/A
1N/Aeq Azeri
1N/A
1N/ANotable forms:
1N/A{az-Arab} Azerbaijani in Arabic script;
1N/A{az-Cyrl} Azerbaijani in Cyrillic script;
1N/A{az-Latn} Azerbaijani in Latin script.
1N/A
1N/A=item {ban} : Balinese
1N/A
1N/A=item [{bat} : Baltic (Other)]
1N/A
1N/A=item {bal} : Baluchi
1N/A
1N/A=item {bm} : Bambara
1N/A
1N/A(Formerly "bam".)
1N/A
1N/A=item [{bai} : Bamileke languages]
1N/A
1N/A=item {bad} : Banda
1N/A
1N/A=item [{bnt} : Bantu (Other)]
1N/A
1N/A=item {bas} : Basa
1N/A
1N/A=item {ba} : Bashkir
1N/A
1N/A=item {eu} : Basque
1N/A
1N/A=item {btk} : Batak (Indonesia)
1N/A
1N/A=item {bej} : Beja
1N/A
1N/A=item {be} : Belarusian
1N/A
1N/Aeq Belarussian. eq Byelarussian.
1N/Aeq Belorussian. eq Byelorussian.
1N/Aeq White Russian. eq White Ruthenian.
1N/ANOT Ruthenian!
1N/A
1N/A=item {bem} : Bemba
1N/A
1N/A=item {bn} : Bengali
1N/A
1N/Aeq Bangla.
1N/A
1N/A=item [{ber} : Berber (Other)]
1N/A
1N/A=item {bho} : Bhojpuri
1N/A
1N/A=item {bh} : Bihari
1N/A
1N/A=item {bik} : Bikol
1N/A
1N/A=item {bin} : Bini
1N/A
1N/A=item {bi} : Bislama
1N/A
1N/Aeq Bichelamar.
1N/A
1N/A=item {bs} : Bosnian
1N/A
1N/A=item {bra} : Braj
1N/A
1N/A=item {br} : Breton
1N/A
1N/A=item {bug} : Buginese
1N/A
1N/A=item {bg} : Bulgarian
1N/A
1N/A=item {i-bnn} : Bunun
1N/A
1N/A=item {bua} : Buriat
1N/A
1N/A=item {my} : Burmese
1N/A
1N/A=item {cad} : Caddo
1N/A
1N/A=item {car} : Carib
1N/A
1N/A=item {ca} : Catalan
1N/A
1N/Aeq CatalE<aacute>n. eq Catalonian.
1N/A
1N/A=item [{cau} : Caucasian (Other)]
1N/A
1N/A=item {ceb} : Cebuano
1N/A
1N/A=item [{cel} : Celtic (Other)]
1N/A
1N/ANotable forms:
1N/A{cel-gaulish} Gaulish (Historical)
1N/A
1N/A=item [{cai} : Central American Indian (Other)]
1N/A
1N/A=item {chg} : Chagatai
1N/A
1N/A(Historical?)
1N/A
1N/A=item [{cmc} : Chamic languages]
1N/A
1N/A=item {ch} : Chamorro
1N/A
1N/A=item {ce} : Chechen
1N/A
1N/A=item {chr} : Cherokee
1N/A
1N/Aeq Tsalagi
1N/A
1N/A=item {chy} : Cheyenne
1N/A
1N/A=item {chb} : Chibcha
1N/A
1N/A(Historical) NOT Chibchan (which is a language family).
1N/A
1N/A=item {ny} : Chichewa
1N/A
1N/Aeq Nyanja. eq Chinyanja.
1N/A
1N/A=item {zh} : Chinese
1N/A
1N/AMany forms are mutually un-intelligible in spoken media.
1N/ANotable forms:
1N/A{zh-Hans} Chinese, in simplified script;
1N/A{zh-Hant} Chinese, in traditional script;
1N/A{zh-tw} Taiwan Chinese;
1N/A{zh-cn} PRC Chinese;
1N/A{zh-sg} Singapore Chinese;
1N/A{zh-mo} Macau Chinese;
1N/A{zh-hk} Hong Kong Chinese;
1N/A{zh-guoyu} Mandarin [Putonghua/Guoyu];
1N/A{zh-hakka} Hakka [formerly "i-hakka"];
1N/A{zh-min} Hokkien;
1N/A{zh-min-nan} Southern Hokkien;
1N/A{zh-wuu} Shanghaiese;
1N/A{zh-xiang} Hunanese;
1N/A{zh-gan} Gan;
1N/A{zh-yue} Cantonese.
1N/A
1N/A=for etc
1N/A{i-hakka} Hakka (old tag)
1N/A
1N/A=item {chn} : Chinook Jargon
1N/A
1N/Aeq Chinook Wawa.
1N/A
1N/A=item {chp} : Chipewyan
1N/A
1N/A=item {cho} : Choctaw
1N/A
1N/A=item {cu} : Church Slavic
1N/A
1N/Aeq Old Church Slavonic.
1N/A
1N/A=item {chk} : Chuukese
1N/A
1N/Aeq Trukese. eq Chuuk. eq Truk. eq Ruk.
1N/A
1N/A=item {cv} : Chuvash
1N/A
1N/A=item {cop} : Coptic
1N/A
1N/A=item {kw} : Cornish
1N/A
1N/A=item {co} : Corsican
1N/A
1N/Aeq Corse.
1N/A
1N/A=item {cr} : Cree
1N/A
1N/ANOT Creek! (Formerly "cre".)
1N/A
1N/A=item {mus} : Creek
1N/A
1N/ANOT Cree!
1N/A
1N/A=item [{cpe} : English-based Creoles and pidgins (Other)]
1N/A
1N/A=item [{cpf} : French-based Creoles and pidgins (Other)]
1N/A
1N/A=item [{cpp} : Portuguese-based Creoles and pidgins (Other)]
1N/A
1N/A=item [{crp} : Creoles and pidgins (Other)]
1N/A
1N/A=item {hr} : Croatian
1N/A
1N/Aeq Croat.
1N/A
1N/A=item [{cus} : Cushitic (Other)]
1N/A
1N/A=item {cs} : Czech
1N/A
1N/A=item {dak} : Dakota
1N/A
1N/Aeq Nakota. eq Latoka.
1N/A
1N/A=item {da} : Danish
1N/A
1N/A=item {dar} : Dargwa
1N/A
1N/A=item {day} : Dayak
1N/A
1N/A=item {i-default} : Default (Fallthru) Language
1N/A
1N/ADefined in RFC 2277, this is for tagging text
1N/A(which must include English text, and might/should include text
1N/Ain other appropriate languages) that is emitted in a context
1N/Awhere language-negotiation wasn't possible -- in SMTP mail failure
1N/Amessages, for example.
1N/A
1N/A=item {del} : Delaware
1N/A
1N/A=item {din} : Dinka
1N/A
1N/A=item {dv} : Divehi
1N/A
1N/Aeq Maldivian. (Formerly "div".)
1N/A
1N/A=item {doi} : Dogri
1N/A
1N/ANOT Dogrib!
1N/A
1N/A=item {dgr} : Dogrib
1N/A
1N/ANOT Dogri!
1N/A
1N/A=item [{dra} : Dravidian (Other)]
1N/A
1N/A=item {dua} : Duala
1N/A
1N/A=item {nl} : Dutch
1N/A
1N/Aeq Netherlander. Notable forms:
1N/A{nl-nl} Netherlands Dutch;
1N/A{nl-be} Belgian Dutch.
1N/A
1N/A=item {dum} : Middle Dutch (ca.1050-1350)
1N/A
1N/A(Historical)
1N/A
1N/A=item {dyu} : Dyula
1N/A
1N/A=item {dz} : Dzongkha
1N/A
1N/A=item {efi} : Efik
1N/A
1N/A=item {egy} : Ancient Egyptian
1N/A
1N/A(Historical)
1N/A
1N/A=item {eka} : Ekajuk
1N/A
1N/A=item {elx} : Elamite
1N/A
1N/A(Historical)
1N/A
1N/A=item {en} : English
1N/A
1N/ANotable forms:
1N/A{en-au} Australian English;
1N/A{en-bz} Belize English;
1N/A{en-ca} Canadian English;
1N/A{en-gb} UK English;
1N/A{en-ie} Irish English;
1N/A{en-jm} Jamaican English;
1N/A{en-nz} New Zealand English;
1N/A{en-ph} Philippine English;
1N/A{en-tt} Trinidad English;
1N/A{en-us} US English;
1N/A{en-za} South African English;
1N/A{en-zw} Zimbabwe English.
1N/A
1N/A=item {enm} : Old English (1100-1500)
1N/A
1N/A(Historical)
1N/A
1N/A=item {ang} : Old English (ca.450-1100)
1N/A
1N/Aeq Anglo-Saxon. (Historical)
1N/A
1N/A=item {i-enochian} : Enochian (Artificial)
1N/A
1N/A=item {myv} : Erzya
1N/A
1N/A=item {eo} : Esperanto
1N/A
1N/A(Artificial)
1N/A
1N/A=item {et} : Estonian
1N/A
1N/A=item {ee} : Ewe
1N/A
1N/A(Formerly "ewe".)
1N/A
1N/A=item {ewo} : Ewondo
1N/A
1N/A=item {fan} : Fang
1N/A
1N/A=item {fat} : Fanti
1N/A
1N/A=item {fo} : Faroese
1N/A
1N/A=item {fj} : Fijian
1N/A
1N/A=item {fi} : Finnish
1N/A
1N/A=item [{fiu} : Finno-Ugrian (Other)]
1N/A
1N/Aeq Finno-Ugric. NOT Ugaritic!
1N/A
1N/A=item {fon} : Fon
1N/A
1N/A=item {fr} : French
1N/A
1N/ANotable forms:
1N/A{fr-fr} France French;
1N/A{fr-be} Belgian French;
1N/A{fr-ca} Canadian French;
1N/A{fr-ch} Swiss French;
1N/A{fr-lu} Luxembourg French;
1N/A{fr-mc} Monaco French.
1N/A
1N/A=item {frm} : Middle French (ca.1400-1600)
1N/A
1N/A(Historical)
1N/A
1N/A=item {fro} : Old French (842-ca.1400)
1N/A
1N/A(Historical)
1N/A
1N/A=item {fy} : Frisian
1N/A
1N/A=item {fur} : Friulian
1N/A
1N/A=item {ff} : Fulah
1N/A
1N/A(Formerly "ful".)
1N/A
1N/A=item {gaa} : Ga
1N/A
1N/A=item {gd} : Scots Gaelic
1N/A
1N/ANOT Scots!
1N/A
1N/A=item {gl} : Gallegan
1N/A
1N/Aeq Galician
1N/A
1N/A=item {lg} : Ganda
1N/A
1N/A(Formerly "lug".)
1N/A
1N/A=item {gay} : Gayo
1N/A
1N/A=item {gba} : Gbaya
1N/A
1N/A=item {gez} : Geez
1N/A
1N/Aeq Ge'ez
1N/A
1N/A=item {ka} : Georgian
1N/A
1N/A=item {de} : German
1N/A
1N/ANotable forms:
1N/A{de-at} Austrian German;
1N/A{de-be} Belgian German;
1N/A{de-ch} Swiss German;
1N/A{de-de} Germany German;
1N/A{de-li} Liechtenstein German;
1N/A{de-lu} Luxembourg German.
1N/A
1N/A=item {gmh} : Middle High German (ca.1050-1500)
1N/A
1N/A(Historical)
1N/A
1N/A=item {goh} : Old High German (ca.750-1050)
1N/A
1N/A(Historical)
1N/A
1N/A=item [{gem} : Germanic (Other)]
1N/A
1N/A=item {gil} : Gilbertese
1N/A
1N/A=item {gon} : Gondi
1N/A
1N/A=item {gor} : Gorontalo
1N/A
1N/A=item {got} : Gothic
1N/A
1N/A(Historical)
1N/A
1N/A=item {grb} : Grebo
1N/A
1N/A=item {grc} : Ancient Greek
1N/A
1N/A(Historical) (Until 15th century or so.)
1N/A
1N/A=item {el} : Modern Greek
1N/A
1N/A(Since 15th century or so.)
1N/A
1N/A=item {gn} : Guarani
1N/A
1N/AGuaranE<iacute>
1N/A
1N/A=item {gu} : Gujarati
1N/A
1N/A=item {gwi} : Gwich'in
1N/A
1N/Aeq Gwichin
1N/A
1N/A=item {hai} : Haida
1N/A
1N/A=item {ht} : Haitian
1N/A
1N/Aeq Haitian Creole
1N/A
1N/A=item {ha} : Hausa
1N/A
1N/A=item {haw} : Hawaiian
1N/A
1N/AHawai'ian
1N/A
1N/A=item {he} : Hebrew
1N/A
1N/A(Formerly "iw".)
1N/A
1N/A=for etc
1N/A{iw} Hebrew (old tag)
1N/A
1N/A=item {hz} : Herero
1N/A
1N/A=item {hil} : Hiligaynon
1N/A
1N/A=item {him} : Himachali
1N/A
1N/A=item {hi} : Hindi
1N/A
1N/A=item {ho} : Hiri Motu
1N/A
1N/A=item {hit} : Hittite
1N/A
1N/A(Historical)
1N/A
1N/A=item {hmn} : Hmong
1N/A
1N/A=item {hu} : Hungarian
1N/A
1N/A=item {hup} : Hupa
1N/A
1N/A=item {iba} : Iban
1N/A
1N/A=item {is} : Icelandic
1N/A
1N/A=item {io} : Ido
1N/A
1N/A(Artificial)
1N/A
1N/A=item {ig} : Igbo
1N/A
1N/A(Formerly "ibo".)
1N/A
1N/A=item {ijo} : Ijo
1N/A
1N/A=item {ilo} : Iloko
1N/A
1N/A=item [{inc} : Indic (Other)]
1N/A
1N/A=item [{ine} : Indo-European (Other)]
1N/A
1N/A=item {id} : Indonesian
1N/A
1N/A(Formerly "in".)
1N/A
1N/A=for etc
1N/A{in} Indonesian (old tag)
1N/A
1N/A=item {inh} : Ingush
1N/A
1N/A=item {ia} : Interlingua (International Auxiliary Language Association)
1N/A
1N/A(Artificial) NOT Interlingue!
1N/A
1N/A=item {ie} : Interlingue
1N/A
1N/A(Artificial) NOT Interlingua!
1N/A
1N/A=item {iu} : Inuktitut
1N/A
1N/AA subform of "Eskimo".
1N/A
1N/A=item {ik} : Inupiaq
1N/A
1N/AA subform of "Eskimo".
1N/A
1N/A=item [{ira} : Iranian (Other)]
1N/A
1N/A=item {ga} : Irish
1N/A
1N/A=item {mga} : Middle Irish (900-1200)
1N/A
1N/A(Historical)
1N/A
1N/A=item {sga} : Old Irish (to 900)
1N/A
1N/A(Historical)
1N/A
1N/A=item [{iro} : Iroquoian languages]
1N/A
1N/A=item {it} : Italian
1N/A
1N/ANotable forms:
1N/A{it-it} Italy Italian;
1N/A{it-ch} Swiss Italian.
1N/A
1N/A=item {ja} : Japanese
1N/A
1N/A(NOT "jp"!)
1N/A
1N/A=item {jv} : Javanese
1N/A
1N/A(Formerly "jw" because of a typo.)
1N/A
1N/A=item {jrb} : Judeo-Arabic
1N/A
1N/A=item {jpr} : Judeo-Persian
1N/A
1N/A=item {kbd} : Kabardian
1N/A
1N/A=item {kab} : Kabyle
1N/A
1N/A=item {kac} : Kachin
1N/A
1N/A=item {kl} : Kalaallisut
1N/A
1N/Aeq Greenlandic "Eskimo"
1N/A
1N/A=item {xal} : Kalmyk
1N/A
1N/A=item {kam} : Kamba
1N/A
1N/A=item {kn} : Kannada
1N/A
1N/Aeq Kanarese. NOT Canadian!
1N/A
1N/A=item {kr} : Kanuri
1N/A
1N/A(Formerly "kau".)
1N/A
1N/A=item {krc} : Karachay-Balkar
1N/A
1N/A=item {kaa} : Kara-Kalpak
1N/A
1N/A=item {kar} : Karen
1N/A
1N/A=item {ks} : Kashmiri
1N/A
1N/A=item {csb} : Kashubian
1N/A
1N/Aeq Kashub
1N/A
1N/A=item {kaw} : Kawi
1N/A
1N/A=item {kk} : Kazakh
1N/A
1N/A=item {kha} : Khasi
1N/A
1N/A=item {km} : Khmer
1N/A
1N/Aeq Cambodian. eq Kampuchean.
1N/A
1N/A=item [{khi} : Khoisan (Other)]
1N/A
1N/A=item {kho} : Khotanese
1N/A
1N/A=item {ki} : Kikuyu
1N/A
1N/Aeq Gikuyu.
1N/A
1N/A=item {kmb} : Kimbundu
1N/A
1N/A=item {rw} : Kinyarwanda
1N/A
1N/A=item {ky} : Kirghiz
1N/A
1N/A=item {i-klingon} : Klingon
1N/A
1N/A=item {kv} : Komi
1N/A
1N/A=item {kg} : Kongo
1N/A
1N/A(Formerly "kon".)
1N/A
1N/A=item {kok} : Konkani
1N/A
1N/A=item {ko} : Korean
1N/A
1N/A=item {kos} : Kosraean
1N/A
1N/A=item {kpe} : Kpelle
1N/A
1N/A=item {kro} : Kru
1N/A
1N/A=item {kj} : Kuanyama
1N/A
1N/A=item {kum} : Kumyk
1N/A
1N/A=item {ku} : Kurdish
1N/A
1N/A=item {kru} : Kurukh
1N/A
1N/A=item {kut} : Kutenai
1N/A
1N/A=item {lad} : Ladino
1N/A
1N/Aeq Judeo-Spanish. NOT Ladin (a minority language in Italy).
1N/A
1N/A=item {lah} : Lahnda
1N/A
1N/ANOT Lamba!
1N/A
1N/A=item {lam} : Lamba
1N/A
1N/ANOT Lahnda!
1N/A
1N/A=item {lo} : Lao
1N/A
1N/Aeq Laotian.
1N/A
1N/A=item {la} : Latin
1N/A
1N/A(Historical) NOT Ladin! NOT Ladino!
1N/A
1N/A=item {lv} : Latvian
1N/A
1N/Aeq Lettish.
1N/A
1N/A=item {lb} : Letzeburgesch
1N/A
1N/Aeq Luxemburgian, eq Luxemburger. (Formerly "i-lux".)
1N/A
1N/A=for etc
1N/A{i-lux} Letzeburgesch (old tag)
1N/A
1N/A=item {lez} : Lezghian
1N/A
1N/A=item {li} : Limburgish
1N/A
1N/Aeq Limburger, eq Limburgan. NOT Letzeburgesch!
1N/A
1N/A=item {ln} : Lingala
1N/A
1N/A=item {lt} : Lithuanian
1N/A
1N/A=item {nds} : Low German
1N/A
1N/Aeq Low Saxon. eq Low German. eq Low Saxon.
1N/A
1N/A=item {art-lojban} : Lojban (Artificial)
1N/A
1N/A=item {loz} : Lozi
1N/A
1N/A=item {lu} : Luba-Katanga
1N/A
1N/A(Formerly "lub".)
1N/A
1N/A=item {lua} : Luba-Lulua
1N/A
1N/A=item {lui} : Luiseno
1N/A
1N/Aeq LuiseE<ntilde>o.
1N/A
1N/A=item {lun} : Lunda
1N/A
1N/A=item {luo} : Luo (Kenya and Tanzania)
1N/A
1N/A=item {lus} : Lushai
1N/A
1N/A=item {mk} : Macedonian
1N/A
1N/Aeq the modern Slavic language spoken in what was Yugoslavia.
1N/ANOT the form of Greek spoken in Greek Macedonia!
1N/A
1N/A=item {mad} : Madurese
1N/A
1N/A=item {mag} : Magahi
1N/A
1N/A=item {mai} : Maithili
1N/A
1N/A=item {mak} : Makasar
1N/A
1N/A=item {mg} : Malagasy
1N/A
1N/A=item {ms} : Malay
1N/A
1N/ANOT Malayalam!
1N/A
1N/A=item {ml} : Malayalam
1N/A
1N/ANOT Malay!
1N/A
1N/A=item {mt} : Maltese
1N/A
1N/A=item {mnc} : Manchu
1N/A
1N/A=item {mdr} : Mandar
1N/A
1N/ANOT Mandarin!
1N/A
1N/A=item {man} : Mandingo
1N/A
1N/A=item {mni} : Manipuri
1N/A
1N/Aeq Meithei.
1N/A
1N/A=item [{mno} : Manobo languages]
1N/A
1N/A=item {gv} : Manx
1N/A
1N/A=item {mi} : Maori
1N/A
1N/ANOT Mari!
1N/A
1N/A=item {mr} : Marathi
1N/A
1N/A=item {chm} : Mari
1N/A
1N/ANOT Maori!
1N/A
1N/A=item {mh} : Marshall
1N/A
1N/Aeq Marshallese.
1N/A
1N/A=item {mwr} : Marwari
1N/A
1N/A=item {mas} : Masai
1N/A
1N/A=item [{myn} : Mayan languages]
1N/A
1N/A=item {men} : Mende
1N/A
1N/A=item {mic} : Micmac
1N/A
1N/A=item {min} : Minangkabau
1N/A
1N/A=item {i-mingo} : Mingo
1N/A
1N/Aeq the Irquoian language West Virginia Seneca. NOT New York Seneca!
1N/A
1N/A=item [{mis} : Miscellaneous languages]
1N/A
1N/ADon't use this.
1N/A
1N/A=item {moh} : Mohawk
1N/A
1N/A=item {mdf} : Moksha
1N/A
1N/A=item {mo} : Moldavian
1N/A
1N/Aeq Moldovan.
1N/A
1N/A=item [{mkh} : Mon-Khmer (Other)]
1N/A
1N/A=item {lol} : Mongo
1N/A
1N/A=item {mn} : Mongolian
1N/A
1N/Aeq Mongol.
1N/A
1N/A=item {mos} : Mossi
1N/A
1N/A=item [{mul} : Multiple languages]
1N/A
1N/ANot for normal use.
1N/A
1N/A=item [{mun} : Munda languages]
1N/A
1N/A=item {nah} : Nahuatl
1N/A
1N/A=item {nap} : Neapolitan
1N/A
1N/A=item {na} : Nauru
1N/A
1N/A=item {nv} : Navajo
1N/A
1N/Aeq Navaho. (Formerly "i-navajo".)
1N/A
1N/A=for etc
1N/A{i-navajo} Navajo (old tag)
1N/A
1N/A=item {nd} : North Ndebele
1N/A
1N/A=item {nr} : South Ndebele
1N/A
1N/A=item {ng} : Ndonga
1N/A
1N/A=item {ne} : Nepali
1N/A
1N/Aeq Nepalese. Notable forms:
1N/A{ne-np} Nepal Nepali;
1N/A{ne-in} India Nepali.
1N/A
1N/A=item {new} : Newari
1N/A
1N/A=item {nia} : Nias
1N/A
1N/A=item [{nic} : Niger-Kordofanian (Other)]
1N/A
1N/A=item [{ssa} : Nilo-Saharan (Other)]
1N/A
1N/A=item {niu} : Niuean
1N/A
1N/A=item {nog} : Nogai
1N/A
1N/A=item {non} : Old Norse
1N/A
1N/A(Historical)
1N/A
1N/A=item [{nai} : North American Indian]
1N/A
1N/ADo not use this.
1N/A
1N/A=item {no} : Norwegian
1N/A
1N/ANote the two following forms:
1N/A
1N/A=item {nb} : Norwegian Bokmal
1N/A
1N/Aeq BokmE<aring>l, (A form of Norwegian.) (Formerly "no-bok".)
1N/A
1N/A=for etc
1N/A{no-bok} Norwegian Bokmal (old tag)
1N/A
1N/A=item {nn} : Norwegian Nynorsk
1N/A
1N/A(A form of Norwegian.) (Formerly "no-nyn".)
1N/A
1N/A=for etc
1N/A{no-nyn} Norwegian Nynorsk (old tag)
1N/A
1N/A=item [{nub} : Nubian languages]
1N/A
1N/A=item {nym} : Nyamwezi
1N/A
1N/A=item {nyn} : Nyankole
1N/A
1N/A=item {nyo} : Nyoro
1N/A
1N/A=item {nzi} : Nzima
1N/A
1N/A=item {oc} : Occitan (post 1500)
1N/A
1N/Aeq ProvenE<ccedil>al, eq Provencal
1N/A
1N/A=item {oj} : Ojibwa
1N/A
1N/Aeq Ojibwe. (Formerly "oji".)
1N/A
1N/A=item {or} : Oriya
1N/A
1N/A=item {om} : Oromo
1N/A
1N/A=item {osa} : Osage
1N/A
1N/A=item {os} : Ossetian; Ossetic
1N/A
1N/A=item [{oto} : Otomian languages]
1N/A
1N/AGroup of languages collectively called "OtomE<iacute>".
1N/A
1N/A=item {pal} : Pahlavi
1N/A
1N/Aeq Pahlevi
1N/A
1N/A=item {i-pwn} : Paiwan
1N/A
1N/Aeq Pariwan
1N/A
1N/A=item {pau} : Palauan
1N/A
1N/A=item {pi} : Pali
1N/A
1N/A(Historical?)
1N/A
1N/A=item {pam} : Pampanga
1N/A
1N/A=item {pag} : Pangasinan
1N/A
1N/A=item {pa} : Panjabi
1N/A
1N/Aeq Punjabi
1N/A
1N/A=item {pap} : Papiamento
1N/A
1N/Aeq Papiamentu.
1N/A
1N/A=item [{paa} : Papuan (Other)]
1N/A
1N/A=item {fa} : Persian
1N/A
1N/Aeq Farsi. eq Iranian.
1N/A
1N/A=item {peo} : Old Persian (ca.600-400 B.C.)
1N/A
1N/A=item [{phi} : Philippine (Other)]
1N/A
1N/A=item {phn} : Phoenician
1N/A
1N/A(Historical)
1N/A
1N/A=item {pon} : Pohnpeian
1N/A
1N/ANOT Pompeiian!
1N/A
1N/A=item {pl} : Polish
1N/A
1N/A=item {pt} : Portuguese
1N/A
1N/Aeq Portugese. Notable forms:
1N/A{pt-pt} Portugal Portuguese;
1N/A{pt-br} Brazilian Portuguese.
1N/A
1N/A=item [{pra} : Prakrit languages]
1N/A
1N/A=item {pro} : Old Provencal (to 1500)
1N/A
1N/Aeq Old ProvenE<ccedil>al. (Historical.)
1N/A
1N/A=item {ps} : Pushto
1N/A
1N/Aeq Pashto. eq Pushtu.
1N/A
1N/A=item {qu} : Quechua
1N/A
1N/Aeq Quecha.
1N/A
1N/A=item {rm} : Raeto-Romance
1N/A
1N/Aeq Romansh.
1N/A
1N/A=item {raj} : Rajasthani
1N/A
1N/A=item {rap} : Rapanui
1N/A
1N/A=item {rar} : Rarotongan
1N/A
1N/A=item [{qaa - qtz} : Reserved for local use.]
1N/A
1N/A=item [{roa} : Romance (Other)]
1N/A
1N/ANOT Romanian! NOT Romany! NOT Romansh!
1N/A
1N/A=item {ro} : Romanian
1N/A
1N/Aeq Rumanian. NOT Romany!
1N/A
1N/A=item {rom} : Romany
1N/A
1N/Aeq Rom. NOT Romanian!
1N/A
1N/A=item {rn} : Rundi
1N/A
1N/A=item {ru} : Russian
1N/A
1N/ANOT White Russian! NOT Rusyn!
1N/A
1N/A=item [{sal} : Salishan languages]
1N/A
1N/ALarge language group.
1N/A
1N/A=item {sam} : Samaritan Aramaic
1N/A
1N/ANOT Aramaic!
1N/A
1N/A=item {se} : Northern Sami
1N/A
1N/Aeq Lappish. eq Lapp. eq (Northern) Saami.
1N/A
1N/A=item {sma} : Southern Sami
1N/A
1N/A=item {smn} : Inari Sami
1N/A
1N/A=item {smj} : Lule Sami
1N/A
1N/A=item {sms} : Skolt Sami
1N/A
1N/A=item [{smi} : Sami languages (Other)]
1N/A
1N/A=item {sm} : Samoan
1N/A
1N/A=item {sad} : Sandawe
1N/A
1N/A=item {sg} : Sango
1N/A
1N/A=item {sa} : Sanskrit
1N/A
1N/A(Historical)
1N/A
1N/A=item {sat} : Santali
1N/A
1N/A=item {sc} : Sardinian
1N/A
1N/Aeq Sard.
1N/A
1N/A=item {sas} : Sasak
1N/A
1N/A=item {sco} : Scots
1N/A
1N/ANOT Scots Gaelic!
1N/A
1N/A=item {sel} : Selkup
1N/A
1N/A=item [{sem} : Semitic (Other)]
1N/A
1N/A=item {sr} : Serbian
1N/A
1N/Aeq Serb. NOT Sorbian.
1N/A
1N/ANotable forms:
1N/A{sr-Cyrl} : Serbian in Cyrillic script;
1N/A{sr-Latn} : Serbian in Latin script.
1N/A
1N/A=item {srr} : Serer
1N/A
1N/A=item {shn} : Shan
1N/A
1N/A=item {sn} : Shona
1N/A
1N/A=item {sid} : Sidamo
1N/A
1N/A=item {sgn-...} : Sign Languages
1N/A
1N/AAlways use with a subtag. Notable forms:
1N/A{sgn-gb} British Sign Language (BSL);
1N/A{sgn-ie} Irish Sign Language (ESL);
1N/A{sgn-ni} Nicaraguan Sign Language (ISN);
1N/A{sgn-us} American Sign Language (ASL).
1N/A
1N/A(And so on with other country codes as the subtag.)
1N/A
1N/A=item {bla} : Siksika
1N/A
1N/Aeq Blackfoot. eq Pikanii.
1N/A
1N/A=item {sd} : Sindhi
1N/A
1N/A=item {si} : Sinhalese
1N/A
1N/Aeq Sinhala.
1N/A
1N/A=item [{sit} : Sino-Tibetan (Other)]
1N/A
1N/A=item [{sio} : Siouan languages]
1N/A
1N/A=item {den} : Slave (Athapascan)
1N/A
1N/A("Slavey" is a subform.)
1N/A
1N/A=item [{sla} : Slavic (Other)]
1N/A
1N/A=item {sk} : Slovak
1N/A
1N/Aeq Slovakian.
1N/A
1N/A=item {sl} : Slovenian
1N/A
1N/Aeq Slovene.
1N/A
1N/A=item {sog} : Sogdian
1N/A
1N/A=item {so} : Somali
1N/A
1N/A=item {son} : Songhai
1N/A
1N/A=item {snk} : Soninke
1N/A
1N/A=item {wen} : Sorbian languages
1N/A
1N/Aeq Wendish. eq Sorb. eq Lusatian. eq Wend. NOT Venda! NOT Serbian!
1N/A
1N/A=item {nso} : Northern Sotho
1N/A
1N/A=item {st} : Southern Sotho
1N/A
1N/Aeq Sutu. eq Sesotho.
1N/A
1N/A=item [{sai} : South American Indian (Other)]
1N/A
1N/A=item {es} : Spanish
1N/A
1N/ANotable forms:
1N/A{es-ar} Argentine Spanish;
1N/A{es-bo} Bolivian Spanish;
1N/A{es-cl} Chilean Spanish;
1N/A{es-co} Colombian Spanish;
1N/A{es-do} Dominican Spanish;
1N/A{es-ec} Ecuadorian Spanish;
1N/A{es-es} Spain Spanish;
1N/A{es-gt} Guatemalan Spanish;
1N/A{es-hn} Honduran Spanish;
1N/A{es-mx} Mexican Spanish;
1N/A{es-pa} Panamanian Spanish;
1N/A{es-pe} Peruvian Spanish;
1N/A{es-pr} Puerto Rican Spanish;
1N/A{es-py} Paraguay Spanish;
1N/A{es-sv} Salvadoran Spanish;
1N/A{es-us} US Spanish;
1N/A{es-uy} Uruguayan Spanish;
1N/A{es-ve} Venezuelan Spanish.
1N/A
1N/A=item {suk} : Sukuma
1N/A
1N/A=item {sux} : Sumerian
1N/A
1N/A(Historical)
1N/A
1N/A=item {su} : Sundanese
1N/A
1N/A=item {sus} : Susu
1N/A
1N/A=item {sw} : Swahili
1N/A
1N/Aeq Kiswahili
1N/A
1N/A=item {ss} : Swati
1N/A
1N/A=item {sv} : Swedish
1N/A
1N/ANotable forms:
1N/A{sv-se} Sweden Swedish;
1N/A{sv-fi} Finland Swedish.
1N/A
1N/A=item {syr} : Syriac
1N/A
1N/A=item {tl} : Tagalog
1N/A
1N/A=item {ty} : Tahitian
1N/A
1N/A=item [{tai} : Tai (Other)]
1N/A
1N/ANOT Thai!
1N/A
1N/A=item {tg} : Tajik
1N/A
1N/A=item {tmh} : Tamashek
1N/A
1N/A=item {ta} : Tamil
1N/A
1N/A=item {i-tao} : Tao
1N/A
1N/Aeq Yami.
1N/A
1N/A=item {tt} : Tatar
1N/A
1N/A=item {i-tay} : Tayal
1N/A
1N/Aeq Atayal. eq Atayan.
1N/A
1N/A=item {te} : Telugu
1N/A
1N/A=item {ter} : Tereno
1N/A
1N/A=item {tet} : Tetum
1N/A
1N/A=item {th} : Thai
1N/A
1N/ANOT Tai!
1N/A
1N/A=item {bo} : Tibetan
1N/A
1N/A=item {tig} : Tigre
1N/A
1N/A=item {ti} : Tigrinya
1N/A
1N/A=item {tem} : Timne
1N/A
1N/Aeq Themne. eq Timene.
1N/A
1N/A=item {tiv} : Tiv
1N/A
1N/A=item {tli} : Tlingit
1N/A
1N/A=item {tpi} : Tok Pisin
1N/A
1N/A=item {tkl} : Tokelau
1N/A
1N/A=item {tog} : Tonga (Nyasa)
1N/A
1N/ANOT Tsonga!
1N/A
1N/A=item {to} : Tonga (Tonga Islands)
1N/A
1N/A(Pronounced "Tong-a", not "Tong-ga")
1N/A
1N/ANOT Tsonga!
1N/A
1N/A=item {tsi} : Tsimshian
1N/A
1N/Aeq Sm'algyax
1N/A
1N/A=item {ts} : Tsonga
1N/A
1N/ANOT Tonga!
1N/A
1N/A=item {i-tsu} : Tsou
1N/A
1N/A=item {tn} : Tswana
1N/A
1N/ASame as Setswana.
1N/A
1N/A=item {tum} : Tumbuka
1N/A
1N/A=item [{tup} : Tupi languages]
1N/A
1N/A=item {tr} : Turkish
1N/A
1N/A(Typically in Roman script)
1N/A
1N/A=item {ota} : Ottoman Turkish (1500-1928)
1N/A
1N/A(Typically in Arabic script) (Historical)
1N/A
1N/A=item {crh} : Crimean Turkish
1N/A
1N/Aeq Crimean Tatar
1N/A
1N/A=item {tk} : Turkmen
1N/A
1N/Aeq Turkmeni.
1N/A
1N/A=item {tvl} : Tuvalu
1N/A
1N/A=item {tyv} : Tuvinian
1N/A
1N/Aeq Tuvan. eq Tuvin.
1N/A
1N/A=item {tw} : Twi
1N/A
1N/A=item {udm} : Udmurt
1N/A
1N/A=item {uga} : Ugaritic
1N/A
1N/ANOT Ugric!
1N/A
1N/A=item {ug} : Uighur
1N/A
1N/A=item {uk} : Ukrainian
1N/A
1N/A=item {umb} : Umbundu
1N/A
1N/A=item {und} : Undetermined
1N/A
1N/ANot a tag for normal use.
1N/A
1N/A=item {ur} : Urdu
1N/A
1N/A=item {uz} : Uzbek
1N/A
1N/Aeq E<Ouml>zbek
1N/A
1N/ANotable forms:
1N/A{uz-Cyrl} Uzbek in Cyrillic script;
1N/A{uz-Latn} Uzbek in Latin script.
1N/A
1N/A=item {vai} : Vai
1N/A
1N/A=item {ve} : Venda
1N/A
1N/ANOT Wendish! NOT Wend! NOT Avestan! (Formerly "ven".)
1N/A
1N/A=item {vi} : Vietnamese
1N/A
1N/Aeq Viet.
1N/A
1N/A=item {vo} : Volapuk
1N/A
1N/Aeq VolapE<uuml>k. (Artificial)
1N/A
1N/A=item {vot} : Votic
1N/A
1N/Aeq Votian. eq Vod.
1N/A
1N/A=item [{wak} : Wakashan languages]
1N/A
1N/A=item {wa} : Walloon
1N/A
1N/A=item {wal} : Walamo
1N/A
1N/Aeq Wolaytta.
1N/A
1N/A=item {war} : Waray
1N/A
1N/APresumably the Philippine language Waray-Waray (SamareE<ntilde>o),
1N/Anot the smaller Philippine language Waray Sorsogon, nor the extinct
1N/AAustralian language Waray.
1N/A
1N/A=item {was} : Washo
1N/A
1N/Aeq Washoe
1N/A
1N/A=item {cy} : Welsh
1N/A
1N/A=item {wo} : Wolof
1N/A
1N/A=item {x-...} : Unregistered (Semi-Private Use)
1N/A
1N/A"x-" is a prefix for language tags that are not registered with ISO
1N/Aor IANA. Example, x-double-dutch
1N/A
1N/A=item {xh} : Xhosa
1N/A
1N/A=item {sah} : Yakut
1N/A
1N/A=item {yao} : Yao
1N/A
1N/A(The Yao in Malawi?)
1N/A
1N/A=item {yap} : Yapese
1N/A
1N/Aeq Yap
1N/A
1N/A=item {ii} : Sichuan Yi
1N/A
1N/A=item {yi} : Yiddish
1N/A
1N/AFormerly "ji". Usually in Hebrew script.
1N/A
1N/ANotable forms:
1N/A{yi-latn} Yiddish in Latin script
1N/A
1N/A=item {yo} : Yoruba
1N/A
1N/A=item [{ypk} : Yupik languages]
1N/A
1N/ASeveral "Eskimo" languages.
1N/A
1N/A=item {znd} : Zande
1N/A
1N/A=item [{zap} : Zapotec]
1N/A
1N/A(A group of languages.)
1N/A
1N/A=item {zen} : Zenaga
1N/A
1N/ANOT Zend.
1N/A
1N/A=item {za} : Zhuang
1N/A
1N/A=item {zu} : Zulu
1N/A
1N/A=item {zun} : Zuni
1N/A
1N/Aeq ZuE<ntilde>i
1N/A
1N/A=back
1N/A
1N/A=for woohah END
1N/A
1N/A=head1 SEE ALSO
1N/A
1N/AL<I18N::LangTags|I18N::LangTags> and its "See Also" section.
1N/A
1N/A=head1 COPYRIGHT AND DISCLAIMER
1N/A
1N/ACopyright (c) 2001,2002,2003 Sean M. Burke. All rights reserved.
1N/A
1N/AYou can redistribute and/or
1N/Amodify this document under the same terms as Perl itself.
1N/A
1N/AThis document is provided in the hope that it will be
1N/Auseful, but without any warranty;
1N/Awithout even the implied warranty of accuracy, authoritativeness,
1N/Acompleteness, merchantability, or fitness for a particular purpose.
1N/A
1N/AEmail any corrections or questions to me.
1N/A
1N/A=head1 AUTHOR
1N/A
1N/ASean M. Burke, sburkeE<64>cpan.org
1N/A
1N/A=cut
1N/A
1N/A
1N/A# To generate a list of just the two and three-letter codes:
1N/A
1N/A#!/usr/local/bin/perl -w
1N/A
1N/Arequire 5; # Time-stamp: "2001-03-13 21:53:39 MST"
1N/A # Sean M. Burke, sburke@cpan.org
1N/A # This program is for generating the language_codes.txt file
1N/Ause strict;
1N/Ause LWP::Simple;
1N/Ause HTML::TreeBuilder 3.10;
1N/Amy $root = HTML::TreeBuilder->new();
1N/Amy $url = 'http://lcweb.loc.gov/standards/iso639-2/bibcodes.html';
1N/A$root->parse(get($url) || die "Can't get $url");
1N/A$root->eof();
1N/A
1N/Amy @codes;
1N/A
1N/Aforeach my $tr ($root->find_by_tag_name('tr')) {
1N/A my @f = map $_->as_text(), $tr->content_list();
1N/A #print map("<$_> ", @f), "\n";
1N/A next unless @f == 5;
1N/A pop @f; # nix the French name
1N/A next if $f[-1] eq 'Language Name (English)'; # it's a header line
1N/A my $xx = splice(@f, 2,1); # pull out the two-letter code
1N/A $f[-1] =~ s/^\s+//;
1N/A $f[-1] =~ s/\s+$//;
1N/A if($xx =~ m/[a-zA-Z]/) { # there's a two-letter code for it
1N/A push @codes, [ lc($f[-1]), "$xx\t$f[-1]\n" ];
1N/A } else { # print the three-letter codes.
1N/A if($f[0] eq $f[1]) {
1N/A push @codes, [ lc($f[-1]), "$f[1]\t$f[2]\n" ];
1N/A } else { # shouldn't happen
1N/A push @codes, [ lc($f[-1]), "@f !!!!!!!!!!\n" ];
1N/A }
1N/A }
1N/A}
1N/A
1N/Aprint map $_->[1], sort {; $a->[0] cmp $b->[0] } @codes;
1N/Aprint "[ based on $url\n at ", scalar(localtime), "]\n",
1N/A "[Note: doesn't include IANA-registered codes.]\n";
1N/Aexit;
1N/A__END__
1N/A