Tadashi Okoshi
slash****@users*****
2005年 10月 25日 (火) 04:20:50 JST
Index: affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/ChangeLog diff -u affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/ChangeLog:1.1.1.1 affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/ChangeLog:removed --- affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/ChangeLog:1.1.1.1 Tue Oct 25 04:14:40 2005 +++ affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/ChangeLog Tue Oct 25 04:20:50 2005 @@ -1,180 +0,0 @@ -Revision history for Perl module I18N::LangTags. - Time-stamp: "2004-07-01 14:28:23 ADT" - -2004-07-01 Sean M. Burke sburk****@cpan***** - - * Release 0.33 - - Minor bugfix version: - The test 80_all_env.t was erroneously failing for people with - LC_ALL or LC_MESSAGES set. Fixed. Thanks to everyone, especially - Nicholas Clark, who patiently helped out with this. - - -2004-06-20 Sean M. Burke sburk****@cpan***** - - * Release 0.32 - - Minor bugfix version: - The test 80_all_env.t was erroneously failing under MSWins that - had Win32::Locale installed. A workaround added. - - -2004-06-17 Sean M. Burke sburk****@cpan***** - - * Release 0.31 - - Corrected some unevennesses in when/whether the return values from - I18N::LangTags::Detect's various internal functions would be - downcased. Now they're /always/ downcased, and are /always/ fed - thru alternate_language_tags()! - - Also, spiffed up and generally improved the earlier test - 80_all_env.t, which not even I could make sense of, and I wrote - the damned thing. Now it's sane, and checks both scalar and - list return values. Thanks to Rafael Garcia-Suarez and the - various CPAN-Testers for prodding me to fix this. (Hopefully the - earlier problems /are/ now fixed! Otherwise there'll be another - version of this module out real soon!) - - -2004-03-30 Sean M. Burke sburk****@cpan***** - - * Release 0.30 - - New in I18N::LangTags : implicate_supers and - implicate_supers_strictly. - - New module: I18N::LangTags::Detect. - - Some new tests. - - Thanks to Autrijus Tang for catching some errors in my makefile! - - - -2003-10-10 Sean M. Burke sburk****@cpan***** - - * Release 0.29 - - Minor bugfix to I18N::LangTags::List code. Addition of the - is_decent function, and the 02decency.t test for it. - - Better Makefile. Thanks to everyone who told me about the - INSTALLDIRS trick. - - - -2003-07-20 Sean M. Burke sburk****@cpan***** - - * Release 0.28 - Doc fixes in I18N::LangTags, plus a few added variances (jw/jv, - cre/cr, etc.) - Lots of updates to I18N::LangTags::List - Deleted rfc3066.txt from dist. - Moved test.pl to t/01test.t and added more tests. - -2002-02-02 Sean M. Burke sburk****@cpan***** - - * Release 0.27 -- minor mods to ::List: - Fixing its entries for sv-se and sv-fi. - Typo-fixes and rewordings in the incidental Pod text elsewhere. - -2001-06-21 Sean M. Burke sburk****@cpan***** - - * Release 0.26 -- just making cosmetic changes - to test.pl, at Jarkko's request. - -2001-06-20 Sean M. Burke sburk****@cpan***** - - * Release 0.25 -- just tweaking panic_languages behavior - for Scandinavian languages. Much better now. - Slight tweak to ::List's entries for Greek. - -2001-06-20 Sean M. Burke sburk****@cpan***** - - * Release 0.24 - - * I18N::LangTags -- some elaborate hacks to make us - recognize legacy aliases like no-nyn == nn. - Added panic_languages(). - Added :ALL export tag. - Minor docs fixes, and spiffing up test.pl. - - * I18N::LangTags::List -- minor corrections; added - a few aliases. - -2001-05-29 Sean M. Burke sburk****@cpan***** - - * Release 0.23 - - * I18N::LangTags::List -- minor corrections. And is now - a module, not just documentation. - -2001-05-27 Sean M. Burke sburk****@cpan***** - - * Release 0.22 - - * Now bundling I18N::LangTags::List, a reference for lang tags, - replacing generate_language_table.plx and language_codes.txt - -2001-05-25 Sean M. Burke sburk****@cpan***** - - * Release 0.21 - - * extract_language_tags and locale2langauge_tag now - return untainted output. Useful if you feed tainted - things, like $ENV{'LANG'}. - -2001-03-13 Sean M. Burke sburk****@cpan***** - - * Release 0.20 - - * Added support for RFC 3066 tags: allowing three-letter primary - tags ("nav"), and allowing digits in subtags ("x-borg-prot3252"). - - * Changed all references from RFC 1766 to RFC 3066. - - * Now bundling fulltext of RFC 3066 in the dist. - - * Now bundling generate_language_table.plx and language_codes.txt - - * Added some nice tests to test.pl - - * Inverting order of listings in this ChangeLog file. - -2000-05-13 Sean M. Burke sburk****@cpan***** - - * Release 0.13 - - * Just noting my new email address. - -1999-03-06 Sean M. Burke sburk****@netad***** - - * Release 0.11 - - * Added functions - similarity_language_tag, is_dialect_of, - locale2language_tag, alternate_language_tags, and - encode_language_tag - -1998-12-14 Sean M. Burke sburk****@netad***** - - * Release 0.09 - - * Added function super_languages() - -1998-10-31 Sean M. Burke sburk****@netad***** - - * Release 0.08 - - * Just changes in the docs and bundle -- no change - in functionality. - -1998-04-02 Sean M. Burke sburk****@netad***** - - * Release 0.07 - - * First public release. - -[END OF CHANGELOG] Index: affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/Detect.pm diff -u affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/Detect.pm:1.1.1.1 affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/Detect.pm:removed --- affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/Detect.pm:1.1.1.1 Tue Oct 25 04:14:40 2005 +++ affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/Detect.pm Tue Oct 25 04:20:50 2005 @@ -1,237 +0,0 @@ - -# Time-stamp: "2004-06-20 21:47:55 ADT" - -require 5; -package I18N::LangTags::Detect; -use strict; - -use vars qw( @ISA $VERSION $MATCH_SUPERS $USING_LANGUAGE_TAGS - $USE_LITERALS $MATCH_SUPERS_TIGHTLY); - -BEGIN { unless(defined &DEBUG) { *DEBUG = sub () {0} } } - # define the constant 'DEBUG' at compile-time - -$VERSION = "1.03"; - @ ISA = (); -use I18N::LangTags qw(alternate_language_tags locale2language_tag); - -sub _uniq { my %seen; return grep(!($seen{$_}++), @_); } -sub _normalize { - my(@languages) = - map lc($_), - grep $_, - map {; $_, alternate_language_tags($_) } @_; - return _uniq(@languages) if wantarray; - return $languages[0]; -} - -#--------------------------------------------------------------------------- -# The extent of our functional interface: - -sub detect () { return __PACKAGE__->ambient_langprefs; } - -#=========================================================================== - -sub ambient_langprefs { # always returns things untainted - my $base_class = $_[0]; - - return $base_class->http_accept_langs - if length( $ENV{'REQUEST_METHOD'} || '' ); # I'm a CGI - # it's off in its own routine because it's complicated - - # Not running as a CGI: try to puzzle out from the environment - my @languages; - - foreach my $envname (qw( LANGUAGE LC_ALL LC_MESSAGES LANG )) { - next unless $ENV{$envname}; - DEBUG and print "Noting \$$envname: $ENV{$envname}\n"; - push @languages, - map locale2language_tag($_), - # if it's a lg tag, fine, pass thru (untainted) - # if it's a locale ID, try converting to a lg tag (untainted), - # otherwise nix it. - - split m/[,:]/, - $ENV{$envname} - ; - last; # first one wins - } - - if($ENV{'IGNORE_WIN32_LOCALE'}) { - # no-op - } elsif(&_try_use('Win32::Locale')) { - # If we have that module installed... - push @languages, Win32::Locale::get_language() || '' - if defined &Win32::Locale::get_language; - } - return _normalize @languages; -} - -#--------------------------------------------------------------------------- - -sub http_accept_langs { - # Deal with HTTP "Accept-Language:" stuff. Hassle. - # This code is more lenient than RFC 3282, which you must read. - # Hm. Should I just move this into I18N::LangTags at some point? - no integer; - - my $in = (@_ > 1) ? $_[1] : $ENV{'HTTP_ACCEPT_LANGUAGE'}; - # (always ends up untainting) - - return() unless defined $in and length $in; - - $in =~ s/\([^\)]*\)//g; # nix just about any comment - - if( $in =~ m/^\s*([a-zA-Z][-a-zA-Z]+)\s*$/s ) { - # Very common case: just one language tag - return _normalize $1; - } elsif( $in =~ m/^\s*[a-zA-Z][-a-zA-Z]+(?:\s*,\s*[a-zA-Z][-a-zA-Z]+)*\s*$/s ) { - # Common case these days: just "foo, bar, baz" - return _normalize( $in =~ m/([a-zA-Z][-a-zA-Z]+)/g ); - } - - # Else it's complicated... - - $in =~ s/\s+//g; # Yes, we can just do without the WS! - my @in = $in =~ m/([^,]+)/g; - my %pref; - - my $q; - foreach my $tag (@in) { - next unless $tag =~ - m/^([a-zA-Z][-a-zA-Z]+) - (?: - ;q= - ( - \d* # a bit too broad of a RE, but so what. - (?: - \.\d+ - )? - ) - )? - $ - /sx - ; - $q = (defined $2 and length $2) ? $2 : 1; - #print "$1 with q=$q\n"; - push @{ $pref{$q} }, lc $1; - } - - return _normalize( - # Read off %pref, in descending key order... - map @{$pref{$_}}, - sort {$b <=> $a} - keys %pref - ); -} - -#=========================================================================== - -my %tried = (); - # memoization of whether we've used this module, or found it unusable. - -sub _try_use { # Basically a wrapper around "require Modulename" - # "Many men have tried..." "They tried and failed?" "They tried and died." - return $tried{$_[0]} if exists $tried{$_[0]}; # memoization - - my $module = $_[0]; # ASSUME sane module name! - { no strict 'refs'; - return($tried{$module} = 1) - if defined(%{$module . "::Lexicon"}) or defined(@{$module . "::ISA"}); - # weird case: we never use'd it, but there it is! - } - - print " About to use $module ...\n" if DEBUG; - { - local $SIG{'__DIE__'}; - eval "require $module"; # used to be "use $module", but no point in that. - } - if($@) { - print "Error using $module \: $@\n" if DEBUG > 1; - return $tried{$module} = 0; - } else { - print " OK, $module is used\n" if DEBUG; - return $tried{$module} = 1; - } -} - -#--------------------------------------------------------------------------- -1; -__END__ - - -=head1 NAME - -I18N::LangTags::Detect - detect the user's language preferences - -=head1 SYNOPSIS - - use I18N::LangTags::Detect; - my @user_wants = I18N::LangTags::Detect::detect(); - -=head1 DESCRIPTION - -It is a common problem to want to detect what language(s) the user would -prefer output in. - -=head1 FUNCTIONS - -This module defines one public function, -C<I18N::LangTags::Detect::detect()>. This function is not exported -(nor is even exportable), and it takes no parameters. - -In scalar context, the function returns the most preferred language -tag (or undef if no preference was seen). - -In list context (which is usually what you want), -the function returns a -(possibly empty) list of language tags representing (best first) what -languages the user apparently would accept output in. You will -probably want to pass the output of this through -C<I18N::LangTags::implicate_supers_tightly(...)> -or -C<I18N::LangTags::implicate_supers(...)>, like so: - - my @languages = - I18N::LangTags::implicate_supers_tightly( - I18N::LangTags::Detect::detect() - ); - - -=head1 ENVIRONMENT - -This module looks for several environment variables, including -REQUEST_METHOD, HTTP_ACCEPT_LANGUAGE, -LANGUAGE, LC_ALL, LC_MESSAGES, and LANG. - -It will also use the L<Win32::Locale> module, if it's installed. - - -=head1 SEE ALSO - -L<I18N::LangTags>, L<Win32::Locale>, L<Locale::Maketext>. - -(This module's core code started out as a routine in Locale::Maketext; -but I moved it here once I realized it was more generally useful.) - - -=head1 COPYRIGHT - -Copyright (c) 1998-2004 Sean M. Burke. All rights reserved. - -This library is free software; you can redistribute it and/or -modify it under the same terms as Perl itself. - -The programs and documentation in this dist are distributed in -the hope that they will be useful, but without any warranty; without -even the implied warranty of merchantability or fitness for a -particular purpose. - - -=head1 AUTHOR - -Sean M. Burke C<sburk****@cpan*****> - -=cut - -# a tip: Put a bit of chopped up pickled ginger in your salad. It's tasty! Index: affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/List.pm diff -u affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/List.pm:1.1.1.1 affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/List.pm:removed --- affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/List.pm:1.1.1.1 Tue Oct 25 04:14:40 2005 +++ affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/List.pm Tue Oct 25 04:20:50 2005 @@ -1,1779 +0,0 @@ - -require 5; -package I18N::LangTags::List; -# Time-stamp: "2004-10-06 23:26:21 ADT" -use strict; -use vars qw(%Name %Is_Disrec $Debug $VERSION); -$VERSION = '0.35'; -# POD at the end. - -#---------------------------------------------------------------------- -{ -# read the table out of our own POD! - my $seeking = 1; - my $count = 0; - my($disrec,$tag,$name); - my $last_name = ''; - while(<I18N::LangTags::List::DATA>) { - if($seeking) { - $seeking = 0 if m/=for woohah/; - } elsif( ($disrec, $tag, $name) = - m/(\[?)\{([-0-9a-zA-Z]+)\}(?:\s*:)?\s*([^\[\]]+)/ - ) { - $name =~ s/\s*[;\.]*\s*$//g; - next unless $name; - ++$count; - print "<$tag> <$name>\n" if $Debug; - $last_name = $Name{$tag} = $name; - $Is_Disrec{$tag} = 1 if $disrec; - } elsif (m/[Ff]ormerly \"([-a-z0-9]+)\"/) { - $Name{$1} = "$last_name (old tag)" if $last_name; - $Is_Disrec{$1} = 1; - } - } - die "No tags read??" unless $count; -} -#---------------------------------------------------------------------- - -sub name { - my $tag = lc($_[0] || return); - $tag =~ s/^\s+//s; - $tag =~ s/\s+$//s; - - my $alt; - if($tag =~ m/^x-(.+)/) { - $alt = "i-$1"; - } elsif($tag =~ m/^i-(.+)/) { - $alt = "x-$1"; - } else { - $alt = ''; - } - - my $subform = ''; - my $name = ''; - print "Input: {$tag}\n" if $Debug; - while(length $tag) { - last if $name = $Name{$tag}; - last if $name = $Name{$alt}; - if($tag =~ s/(-[a-z0-9]+)$//s) { - print "Shaving off: $1 leaving $tag\n" if $Debug; - $subform = "$1$subform"; - # and loop around again - - $alt =~ s/(-[a-z0-9]+)$//s && $Debug && print " alt -> $alt\n"; - } else { - # we're trying to pull a subform off a primary tag. TILT! - print "Aborting on: {$name}{$subform}\n" if $Debug; - last; - } - } - print "Output: {$name}{$subform}\n" if $Debug; - - return unless $name; # Failure - return $name unless $subform; # Exact match - $subform =~ s/^-//s; - $subform =~ s/-$//s; - return "$name (Subform \"$subform\")"; -} - -#-------------------------------------------------------------------------- - -sub is_decent { - my $tag = lc($_[0] || return 0); - #require I18N::LangTags; - - return 0 unless - $tag =~ - /^(?: # First subtag - [xi] | [a-z]{2,3} - ) - (?: # Subtags thereafter - - # separator - [a-z0-9]{1,8} # subtag - )* - $/xs; - - my @supers = (); - foreach my $bit (split('-', $tag)) { - push @supers, - scalar(@supers) ? ($supers[-1] . '-' . $bit) : $bit; - } - return 0 unless @supers; - shift @supers if $supers[0] =~ m<^(i|x|sgn)$>s; - return 0 unless @supers; - - foreach my $f ($tag, @supers) { - return 0 if $Is_Disrec{$f}; - return 2 if $Name{$f}; - # so that decent subforms of indecent tags are decent - } - return 2 if $Name{$tag}; # not only is it decent, it's known! - return 1; -} - -#-------------------------------------------------------------------------- -1; - -__DATA__ - -=head1 NAME - -I18N::LangTags::List -- tags and names for human languages - -=head1 SYNOPSIS - - use I18N::LangTags::List; - print "Parlez-vous... ", join(', ', - I18N::LangTags::List::name('elx') || 'unknown_language', - I18N::LangTags::List::name('ar-Kw') || 'unknown_language', - I18N::LangTags::List::name('en') || 'unknown_language', - I18N::LangTags::List::name('en-CA') || 'unknown_language', - ), "?\n"; - -prints: - - Parlez-vous... Elamite, Kuwait Arabic, English, Canadian English? - -=head1 DESCRIPTION - -This module provides a function -C<I18N::LangTags::List::name( I<langtag> ) > that takes -a language tag (see L<I18N::LangTags|I18N::LangTags>) -and returns the best attempt at an English name for it, or -undef if it can't make sense of the tag. - -The function I18N::LangTags::List::name(...) is not exported. - -This module also provides a function -C<I18N::LangTags::List::is_decent( I<langtag> )> that returns true iff -the language tag is syntactically valid and is for general use (like -"fr" or "fr-ca", below). That is, it returns false for tags that are -syntactically invalid and for tags, like "aus", that are listed in -brackets below. This function is not exported. - -The map of tags-to-names that it uses is accessable as -%I18N::LangTags::List::Name, and it's the same as the list -that follows in this documentation, which should be useful -to you even if you don't use this module. - -=head1 ABOUT LANGUAGE TAGS - -Internet language tags, as defined in RFC 3066, are a formalism -for denoting human languages. The two-letter ISO 639-1 language -codes are well known (as "en" for English), as are their forms -when qualified by a country code ("en-US"). Less well-known are the -arbitrary-length non-ISO codes (like "i-mingo"), and the -recently (in 2001) introduced three-letter ISO-639-2 codes. - -Remember these important facts: - -=over - -=item * - -Language tags are not locale IDs. A locale ID is written with a "_" -instead of a "-", (almost?) always matches C<m/^\w\w_\w\w\b/>, and -I<means> something different than a language tag. A language tag -denotes a language. A locale ID denotes a language I<as used in> -a particular place, in combination with non-linguistic -location-specific information such as what currency is used -there. Locales I<also> often denote character set information, -as in "en_US.ISO8859-1". - -=item * - -Language tags are not for computer languages. - -=item * - -"Dialect" is not a useful term, since there is no objective -criterion for establishing when two language-forms are -dialects of eachother, or are separate languages. - -=item * - -Language tags are not case-sensitive. en-US, en-us, En-Us, etc., -are all the same tag, and denote the same language. - -=item * - -Not every language tag really refers to a single language. Some -language tags refer to conditions: i-default (system-message text -in English plus maybe other languages), und (undetermined -language). Others (notably lots of the three-letter codes) are -bibliographic tags that classify whole groups of languages, as -with cus "Cushitic (Other)" (i.e., a -language that has been classed as Cushtic, but which has no more -specific code) or the even less linguistically coherent -sai for "South American Indian (Other)". Though useful in -bibliography, B<SUCH TAGS ARE NOT -FOR GENERAL USE>. For further guidance, email me. - -=item * - -Language tags are not country codes. In fact, they are often -distinct codes, as with language tag ja for Japanese, and -ISO 3166 country code C<.jp> for Japan. - -=back - -=head1 LIST OF LANGUAGES - -The first part of each item is the language tag, between -{...}. It -is followed by an English name for the language or language-group. -Language tags that I judge to be not for general use, are bracketed. - -This list is in alphabetical order by English name of the language. - -=for reminder - The name in the =item line MUST NOT have E<...>'s in it!! - -=for woohah START - -=over - -=item {ab} : Abkhazian - -eq Abkhaz - -=item {ace} : Achinese - -=item {ach} : Acoli - -=item {ada} : Adangme - -=item {ady} : Adyghe - -eq Adygei - -=item {aa} : Afar - -=item {afh} : Afrihili - -(Artificial) - -=item {af} : Afrikaans - -=item [{afa} : Afro-Asiatic (Other)] - -=item {ak} : Akan - -(Formerly "aka".) - -=item {akk} : Akkadian - -(Historical) - -=item {sq} : Albanian - -=item {ale} : Aleut - -=item [{alg} : Algonquian languages] - -NOT Algonquin! - -=item [{tut} : Altaic (Other)] - -=item {am} : Amharic - -NOT Aramaic! - -=item {i-ami} : Ami - -eq Amis. eq 'Amis. eq Pangca. - -=item [{apa} : Apache languages] - -=item {ar} : Arabic - -Many forms are mutually un-intelligible in spoken media. -Notable forms: -{ar-ae} UAE Arabic; -{ar-bh} Bahrain Arabic; -{ar-dz} Algerian Arabic; -{ar-eg} Egyptian Arabic; -{ar-iq} Iraqi Arabic; -{ar-jo} Jordanian Arabic; -{ar-kw} Kuwait Arabic; -{ar-lb} Lebanese Arabic; -{ar-ly} Libyan Arabic; -{ar-ma} Moroccan Arabic; -{ar-om} Omani Arabic; -{ar-qa} Qatari Arabic; -{ar-sa} Sauda Arabic; -{ar-sy} Syrian Arabic; -{ar-tn} Tunisian Arabic; -{ar-ye} Yemen Arabic. - -=item {arc} : Aramaic - -NOT Amharic! NOT Samaritan Aramaic! - -=item {arp} : Arapaho - -=item {arn} : Araucanian - -=item {arw} : Arawak - -=item {hy} : Armenian - -=item {an} : Aragonese - -=item [{art} : Artificial (Other)] - -=item {ast} : Asturian - -eq Bable. - -=item {as} : Assamese - -=item [{ath} : Athapascan languages] - -eq Athabaskan. eq Athapaskan. eq Athabascan. - -=item [{aus} : Australian languages] - -=item [{map} : Austronesian (Other)] - -=item {av} : Avaric - -(Formerly "ava".) - -=item {ae} : Avestan - -eq Zend - -=item {awa} : Awadhi - -=item {ay} : Aymara - -=item {az} : Azerbaijani - -eq Azeri - -Notable forms: -{az-Arab} Azerbaijani in Arabic script; -{az-Cyrl} Azerbaijani in Cyrillic script; -{az-Latn} Azerbaijani in Latin script. - -=item {ban} : Balinese - -=item [{bat} : Baltic (Other)] - -=item {bal} : Baluchi - -=item {bm} : Bambara - -(Formerly "bam".) - -=item [{bai} : Bamileke languages] - -=item {bad} : Banda - -=item [{bnt} : Bantu (Other)] - -=item {bas} : Basa - -=item {ba} : Bashkir - -=item {eu} : Basque - -=item {btk} : Batak (Indonesia) - -=item {bej} : Beja - -=item {be} : Belarusian - -eq Belarussian. eq Byelarussian. -eq Belorussian. eq Byelorussian. -eq White Russian. eq White Ruthenian. -NOT Ruthenian! - -=item {bem} : Bemba - -=item {bn} : Bengali - -eq Bangla. - -=item [{ber} : Berber (Other)] - -=item {bho} : Bhojpuri - -=item {bh} : Bihari - -=item {bik} : Bikol - -=item {bin} : Bini - -=item {bi} : Bislama - -eq Bichelamar. - -=item {bs} : Bosnian - -=item {bra} : Braj - -=item {br} : Breton - -=item {bug} : Buginese - -=item {bg} : Bulgarian - -=item {i-bnn} : Bunun - -=item {bua} : Buriat - -=item {my} : Burmese - -=item {cad} : Caddo - -=item {car} : Carib - -=item {ca} : Catalan - -eq CatalE<aacute>n. eq Catalonian. - -=item [{cau} : Caucasian (Other)] - -=item {ceb} : Cebuano - -=item [{cel} : Celtic (Other)] - -Notable forms: -{cel-gaulish} Gaulish (Historical) - -=item [{cai} : Central American Indian (Other)] - -=item {chg} : Chagatai - -(Historical?) - -=item [{cmc} : Chamic languages] - -=item {ch} : Chamorro - -=item {ce} : Chechen - -=item {chr} : Cherokee - -eq Tsalagi - -=item {chy} : Cheyenne - -=item {chb} : Chibcha - -(Historical) NOT Chibchan (which is a language family). - -=item {ny} : Chichewa - -eq Nyanja. eq Chinyanja. - -=item {zh} : Chinese - -Many forms are mutually un-intelligible in spoken media. -Notable forms: -{zh-Hans} Chinese, in simplified script; -{zh-Hant} Chinese, in traditional script; -{zh-tw} Taiwan Chinese; -{zh-cn} PRC Chinese; -{zh-sg} Singapore Chinese; -{zh-mo} Macau Chinese; -{zh-hk} Hong Kong Chinese; -{zh-guoyu} Mandarin [Putonghua/Guoyu]; -{zh-hakka} Hakka [formerly "i-hakka"]; -{zh-min} Hokkien; -{zh-min-nan} Southern Hokkien; -{zh-wuu} Shanghaiese; -{zh-xiang} Hunanese; -{zh-gan} Gan; -{zh-yue} Cantonese. - -=for etc -{i-hakka} Hakka (old tag) - -=item {chn} : Chinook Jargon - -eq Chinook Wawa. - -=item {chp} : Chipewyan - -=item {cho} : Choctaw - -=item {cu} : Church Slavic - -eq Old Church Slavonic. - -=item {chk} : Chuukese - -eq Trukese. eq Chuuk. eq Truk. eq Ruk. - -=item {cv} : Chuvash - -=item {cop} : Coptic - -=item {kw} : Cornish - -=item {co} : Corsican - -eq Corse. - -=item {cr} : Cree - -NOT Creek! (Formerly "cre".) - -=item {mus} : Creek - -NOT Cree! - -=item [{cpe} : English-based Creoles and pidgins (Other)] - -=item [{cpf} : French-based Creoles and pidgins (Other)] - -=item [{cpp} : Portuguese-based Creoles and pidgins (Other)] - -=item [{crp} : Creoles and pidgins (Other)] - -=item {hr} : Croatian - -eq Croat. - -=item [{cus} : Cushitic (Other)] - -=item {cs} : Czech - -=item {dak} : Dakota - -eq Nakota. eq Latoka. - -=item {da} : Danish - -=item {dar} : Dargwa - -=item {day} : Dayak - -=item {i-default} : Default (Fallthru) Language - -Defined in RFC 2277, this is for tagging text -(which must include English text, and might/should include text -in other appropriate languages) that is emitted in a context -where language-negotiation wasn't possible -- in SMTP mail failure -messages, for example. - -=item {del} : Delaware - -=item {din} : Dinka - -=item {dv} : Divehi - -eq Maldivian. (Formerly "div".) - -=item {doi} : Dogri - -NOT Dogrib! - -=item {dgr} : Dogrib - -NOT Dogri! - -=item [{dra} : Dravidian (Other)] - -=item {dua} : Duala - -=item {nl} : Dutch - -eq Netherlander. Notable forms: -{nl-nl} Netherlands Dutch; -{nl-be} Belgian Dutch. - -=item {dum} : Middle Dutch (ca.1050-1350) - -(Historical) - -=item {dyu} : Dyula - -=item {dz} : Dzongkha - -=item {efi} : Efik - -=item {egy} : Ancient Egyptian - -(Historical) - -=item {eka} : Ekajuk - -=item {elx} : Elamite - -(Historical) - -=item {en} : English - -Notable forms: -{en-au} Australian English; -{en-bz} Belize English; -{en-ca} Canadian English; -{en-gb} UK English; -{en-ie} Irish English; -{en-jm} Jamaican English; -{en-nz} New Zealand English; -{en-ph} Philippine English; -{en-tt} Trinidad English; -{en-us} US English; -{en-za} South African English; -{en-zw} Zimbabwe English. - -=item {enm} : Old English (1100-1500) - -(Historical) - -=item {ang} : Old English (ca.450-1100) - -eq Anglo-Saxon. (Historical) - -=item {i-enochian} : Enochian (Artificial) - -=item {myv} : Erzya - -=item {eo} : Esperanto - -(Artificial) - -=item {et} : Estonian - -=item {ee} : Ewe - -(Formerly "ewe".) - -=item {ewo} : Ewondo - -=item {fan} : Fang - -=item {fat} : Fanti - -=item {fo} : Faroese - -=item {fj} : Fijian - -=item {fi} : Finnish - -=item [{fiu} : Finno-Ugrian (Other)] - -eq Finno-Ugric. NOT Ugaritic! - -=item {fon} : Fon - -=item {fr} : French - -Notable forms: -{fr-fr} France French; -{fr-be} Belgian French; -{fr-ca} Canadian French; -{fr-ch} Swiss French; -{fr-lu} Luxembourg French; -{fr-mc} Monaco French. - -=item {frm} : Middle French (ca.1400-1600) - -(Historical) - -=item {fro} : Old French (842-ca.1400) - -(Historical) - -=item {fy} : Frisian - -=item {fur} : Friulian - -=item {ff} : Fulah - -(Formerly "ful".) - -=item {gaa} : Ga - -=item {gd} : Scots Gaelic - -NOT Scots! - -=item {gl} : Gallegan - -eq Galician - -=item {lg} : Ganda - -(Formerly "lug".) - -=item {gay} : Gayo - -=item {gba} : Gbaya - -=item {gez} : Geez - -eq Ge'ez - -=item {ka} : Georgian - -=item {de} : German - -Notable forms: -{de-at} Austrian German; -{de-be} Belgian German; -{de-ch} Swiss German; -{de-de} Germany German; -{de-li} Liechtenstein German; -{de-lu} Luxembourg German. - -=item {gmh} : Middle High German (ca.1050-1500) - -(Historical) - -=item {goh} : Old High German (ca.750-1050) - -(Historical) - -=item [{gem} : Germanic (Other)] - -=item {gil} : Gilbertese - -=item {gon} : Gondi - -=item {gor} : Gorontalo - -=item {got} : Gothic - -(Historical) - -=item {grb} : Grebo - -=item {grc} : Ancient Greek - -(Historical) (Until 15th century or so.) - -=item {el} : Modern Greek - -(Since 15th century or so.) - -=item {gn} : Guarani - -GuaranE<iacute> - -=item {gu} : Gujarati - -=item {gwi} : Gwich'in - -eq Gwichin - -=item {hai} : Haida - -=item {ht} : Haitian - -eq Haitian Creole - -=item {ha} : Hausa - -=item {haw} : Hawaiian - -Hawai'ian - -=item {he} : Hebrew - -(Formerly "iw".) - -=for etc -{iw} Hebrew (old tag) - -=item {hz} : Herero - -=item {hil} : Hiligaynon - -=item {him} : Himachali - -=item {hi} : Hindi - -=item {ho} : Hiri Motu - -=item {hit} : Hittite - -(Historical) - -=item {hmn} : Hmong - -=item {hu} : Hungarian - -=item {hup} : Hupa - -=item {iba} : Iban - -=item {is} : Icelandic - -=item {io} : Ido - -(Artificial) - -=item {ig} : Igbo - -(Formerly "ibo".) - -=item {ijo} : Ijo - -=item {ilo} : Iloko - -=item [{inc} : Indic (Other)] - -=item [{ine} : Indo-European (Other)] - -=item {id} : Indonesian - -(Formerly "in".) - -=for etc -{in} Indonesian (old tag) - -=item {inh} : Ingush - -=item {ia} : Interlingua (International Auxiliary Language Association) - -(Artificial) NOT Interlingue! - -=item {ie} : Interlingue - -(Artificial) NOT Interlingua! - -=item {iu} : Inuktitut - -A subform of "Eskimo". - -=item {ik} : Inupiaq - -A subform of "Eskimo". - -=item [{ira} : Iranian (Other)] - -=item {ga} : Irish - -=item {mga} : Middle Irish (900-1200) - -(Historical) - -=item {sga} : Old Irish (to 900) - -(Historical) - -=item [{iro} : Iroquoian languages] - -=item {it} : Italian - -Notable forms: -{it-it} Italy Italian; -{it-ch} Swiss Italian. - -=item {ja} : Japanese - -(NOT "jp"!) - -=item {jv} : Javanese - -(Formerly "jw" because of a typo.) - -=item {jrb} : Judeo-Arabic - -=item {jpr} : Judeo-Persian - -=item {kbd} : Kabardian - -=item {kab} : Kabyle - -=item {kac} : Kachin - -=item {kl} : Kalaallisut - -eq Greenlandic "Eskimo" - -=item {xal} : Kalmyk - -=item {kam} : Kamba - -=item {kn} : Kannada - -eq Kanarese. NOT Canadian! - -=item {kr} : Kanuri - -(Formerly "kau".) - -=item {krc} : Karachay-Balkar - -=item {kaa} : Kara-Kalpak - -=item {kar} : Karen - -=item {ks} : Kashmiri - -=item {csb} : Kashubian - -eq Kashub - -=item {kaw} : Kawi - -=item {kk} : Kazakh - -=item {kha} : Khasi - -=item {km} : Khmer - -eq Cambodian. eq Kampuchean. - -=item [{khi} : Khoisan (Other)] - -=item {kho} : Khotanese - -=item {ki} : Kikuyu - -eq Gikuyu. - -=item {kmb} : Kimbundu - -=item {rw} : Kinyarwanda - -=item {ky} : Kirghiz - -=item {i-klingon} : Klingon - -=item {kv} : Komi - -=item {kg} : Kongo - -(Formerly "kon".) - -=item {kok} : Konkani - -=item {ko} : Korean - -=item {kos} : Kosraean - -=item {kpe} : Kpelle - -=item {kro} : Kru - -=item {kj} : Kuanyama - -=item {kum} : Kumyk - -=item {ku} : Kurdish - -=item {kru} : Kurukh - -=item {kut} : Kutenai - -=item {lad} : Ladino - -eq Judeo-Spanish. NOT Ladin (a minority language in Italy). - -=item {lah} : Lahnda - -NOT Lamba! - -=item {lam} : Lamba - -NOT Lahnda! - -=item {lo} : Lao - -eq Laotian. - -=item {la} : Latin - -(Historical) NOT Ladin! NOT Ladino! - -=item {lv} : Latvian - -eq Lettish. - -=item {lb} : Letzeburgesch - -eq Luxemburgian, eq Luxemburger. (Formerly "i-lux".) - -=for etc -{i-lux} Letzeburgesch (old tag) - -=item {lez} : Lezghian - -=item {li} : Limburgish - -eq Limburger, eq Limburgan. NOT Letzeburgesch! - -=item {ln} : Lingala - -=item {lt} : Lithuanian - -=item {nds} : Low German - -eq Low Saxon. eq Low German. eq Low Saxon. - -=item {art-lojban} : Lojban (Artificial) - -=item {loz} : Lozi - -=item {lu} : Luba-Katanga - -(Formerly "lub".) - -=item {lua} : Luba-Lulua - -=item {lui} : Luiseno - -eq LuiseE<ntilde>o. - -=item {lun} : Lunda - -=item {luo} : Luo (Kenya and Tanzania) - -=item {lus} : Lushai - -=item {mk} : Macedonian - -eq the modern Slavic language spoken in what was Yugoslavia. -NOT the form of Greek spoken in Greek Macedonia! - -=item {mad} : Madurese - -=item {mag} : Magahi - -=item {mai} : Maithili - -=item {mak} : Makasar - -=item {mg} : Malagasy - -=item {ms} : Malay - -NOT Malayalam! - -=item {ml} : Malayalam - -NOT Malay! - -=item {mt} : Maltese - -=item {mnc} : Manchu - -=item {mdr} : Mandar - -NOT Mandarin! - -=item {man} : Mandingo - -=item {mni} : Manipuri - -eq Meithei. - -=item [{mno} : Manobo languages] - -=item {gv} : Manx - -=item {mi} : Maori - -NOT Mari! - -=item {mr} : Marathi - -=item {chm} : Mari - -NOT Maori! - -=item {mh} : Marshall - -eq Marshallese. - -=item {mwr} : Marwari - -=item {mas} : Masai - -=item [{myn} : Mayan languages] - -=item {men} : Mende - -=item {mic} : Micmac - -=item {min} : Minangkabau - -=item {i-mingo} : Mingo - -eq the Irquoian language West Virginia Seneca. NOT New York Seneca! - -=item [{mis} : Miscellaneous languages] - -Don't use this. - -=item {moh} : Mohawk - -=item {mdf} : Moksha - -=item {mo} : Moldavian - -eq Moldovan. - -=item [{mkh} : Mon-Khmer (Other)] - -=item {lol} : Mongo - -=item {mn} : Mongolian - -eq Mongol. - -=item {mos} : Mossi - -=item [{mul} : Multiple languages] - -Not for normal use. - -=item [{mun} : Munda languages] - -=item {nah} : Nahuatl - -=item {nap} : Neapolitan - -=item {na} : Nauru - -=item {nv} : Navajo - -eq Navaho. (Formerly "i-navajo".) - -=for etc -{i-navajo} Navajo (old tag) - -=item {nd} : North Ndebele - -=item {nr} : South Ndebele - -=item {ng} : Ndonga - -=item {ne} : Nepali - -eq Nepalese. Notable forms: -{ne-np} Nepal Nepali; -{ne-in} India Nepali. - -=item {new} : Newari - -=item {nia} : Nias - -=item [{nic} : Niger-Kordofanian (Other)] - -=item [{ssa} : Nilo-Saharan (Other)] - -=item {niu} : Niuean - -=item {nog} : Nogai - -=item {non} : Old Norse - -(Historical) - -=item [{nai} : North American Indian] - -Do not use this. - -=item {no} : Norwegian - -Note the two following forms: - -=item {nb} : Norwegian Bokmal - -eq BokmE<aring>l, (A form of Norwegian.) (Formerly "no-bok".) - -=for etc -{no-bok} Norwegian Bokmal (old tag) - -=item {nn} : Norwegian Nynorsk - -(A form of Norwegian.) (Formerly "no-nyn".) - -=for etc -{no-nyn} Norwegian Nynorsk (old tag) - -=item [{nub} : Nubian languages] - -=item {nym} : Nyamwezi - -=item {nyn} : Nyankole - -=item {nyo} : Nyoro - -=item {nzi} : Nzima - -=item {oc} : Occitan (post 1500) - -eq ProvenE<ccedil>al, eq Provencal - -=item {oj} : Ojibwa - -eq Ojibwe. (Formerly "oji".) - -=item {or} : Oriya - -=item {om} : Oromo - -=item {osa} : Osage - -=item {os} : Ossetian; Ossetic - -=item [{oto} : Otomian languages] - -Group of languages collectively called "OtomE<iacute>". - -=item {pal} : Pahlavi - -eq Pahlevi - -=item {i-pwn} : Paiwan - -eq Pariwan - -=item {pau} : Palauan - -=item {pi} : Pali - -(Historical?) - -=item {pam} : Pampanga - -=item {pag} : Pangasinan - -=item {pa} : Panjabi - -eq Punjabi - -=item {pap} : Papiamento - -eq Papiamentu. - -=item [{paa} : Papuan (Other)] - -=item {fa} : Persian - -eq Farsi. eq Iranian. - -=item {peo} : Old Persian (ca.600-400 B.C.) - -=item [{phi} : Philippine (Other)] - -=item {phn} : Phoenician - -(Historical) - -=item {pon} : Pohnpeian - -NOT Pompeiian! - -=item {pl} : Polish - -=item {pt} : Portuguese - -eq Portugese. Notable forms: -{pt-pt} Portugal Portuguese; -{pt-br} Brazilian Portuguese. - -=item [{pra} : Prakrit languages] - -=item {pro} : Old Provencal (to 1500) - -eq Old ProvenE<ccedil>al. (Historical.) - -=item {ps} : Pushto - -eq Pashto. eq Pushtu. - -=item {qu} : Quechua - -eq Quecha. - -=item {rm} : Raeto-Romance - -eq Romansh. - -=item {raj} : Rajasthani - -=item {rap} : Rapanui - -=item {rar} : Rarotongan - -=item [{qaa - qtz} : Reserved for local use.] - -=item [{roa} : Romance (Other)] - -NOT Romanian! NOT Romany! NOT Romansh! - -=item {ro} : Romanian - -eq Rumanian. NOT Romany! - -=item {rom} : Romany - -eq Rom. NOT Romanian! - -=item {rn} : Rundi - -=item {ru} : Russian - -NOT White Russian! NOT Rusyn! - -=item [{sal} : Salishan languages] - -Large language group. - -=item {sam} : Samaritan Aramaic - -NOT Aramaic! - -=item {se} : Northern Sami - -eq Lappish. eq Lapp. eq (Northern) Saami. - -=item {sma} : Southern Sami - -=item {smn} : Inari Sami - -=item {smj} : Lule Sami - -=item {sms} : Skolt Sami - -=item [{smi} : Sami languages (Other)] - -=item {sm} : Samoan - -=item {sad} : Sandawe - -=item {sg} : Sango - -=item {sa} : Sanskrit - -(Historical) - -=item {sat} : Santali - -=item {sc} : Sardinian - -eq Sard. - -=item {sas} : Sasak - -=item {sco} : Scots - -NOT Scots Gaelic! - -=item {sel} : Selkup - -=item [{sem} : Semitic (Other)] - -=item {sr} : Serbian - -eq Serb. NOT Sorbian. - -Notable forms: -{sr-Cyrl} : Serbian in Cyrillic script; -{sr-Latn} : Serbian in Latin script. - -=item {srr} : Serer - -=item {shn} : Shan - -=item {sn} : Shona - -=item {sid} : Sidamo - -=item {sgn-...} : Sign Languages - -Always use with a subtag. Notable forms: -{sgn-gb} British Sign Language (BSL); -{sgn-ie} Irish Sign Language (ESL); -{sgn-ni} Nicaraguan Sign Language (ISN); -{sgn-us} American Sign Language (ASL). - -(And so on with other country codes as the subtag.) - -=item {bla} : Siksika - -eq Blackfoot. eq Pikanii. - -=item {sd} : Sindhi - -=item {si} : Sinhalese - -eq Sinhala. - -=item [{sit} : Sino-Tibetan (Other)] - -=item [{sio} : Siouan languages] - -=item {den} : Slave (Athapascan) - -("Slavey" is a subform.) - -=item [{sla} : Slavic (Other)] - -=item {sk} : Slovak - -eq Slovakian. - -=item {sl} : Slovenian - -eq Slovene. - -=item {sog} : Sogdian - -=item {so} : Somali - -=item {son} : Songhai - -=item {snk} : Soninke - -=item {wen} : Sorbian languages - -eq Wendish. eq Sorb. eq Lusatian. eq Wend. NOT Venda! NOT Serbian! - -=item {nso} : Northern Sotho - -=item {st} : Southern Sotho - -eq Sutu. eq Sesotho. - -=item [{sai} : South American Indian (Other)] - -=item {es} : Spanish - -Notable forms: -{es-ar} Argentine Spanish; -{es-bo} Bolivian Spanish; -{es-cl} Chilean Spanish; -{es-co} Colombian Spanish; -{es-do} Dominican Spanish; -{es-ec} Ecuadorian Spanish; -{es-es} Spain Spanish; -{es-gt} Guatemalan Spanish; -{es-hn} Honduran Spanish; -{es-mx} Mexican Spanish; -{es-pa} Panamanian Spanish; -{es-pe} Peruvian Spanish; -{es-pr} Puerto Rican Spanish; -{es-py} Paraguay Spanish; -{es-sv} Salvadoran Spanish; -{es-us} US Spanish; -{es-uy} Uruguayan Spanish; -{es-ve} Venezuelan Spanish. - -=item {suk} : Sukuma - -=item {sux} : Sumerian - -(Historical) - -=item {su} : Sundanese - -=item {sus} : Susu - -=item {sw} : Swahili - -eq Kiswahili - -=item {ss} : Swati - -=item {sv} : Swedish - -Notable forms: -{sv-se} Sweden Swedish; -{sv-fi} Finland Swedish. - -=item {syr} : Syriac - -=item {tl} : Tagalog - -=item {ty} : Tahitian - -=item [{tai} : Tai (Other)] - -NOT Thai! - -=item {tg} : Tajik - -=item {tmh} : Tamashek - -=item {ta} : Tamil - -=item {i-tao} : Tao - -eq Yami. - -=item {tt} : Tatar - -=item {i-tay} : Tayal - -eq Atayal. eq Atayan. - -=item {te} : Telugu - -=item {ter} : Tereno - -=item {tet} : Tetum - -=item {th} : Thai - -NOT Tai! - -=item {bo} : Tibetan - -=item {tig} : Tigre - -=item {ti} : Tigrinya - -=item {tem} : Timne - -eq Themne. eq Timene. - -=item {tiv} : Tiv - -=item {tli} : Tlingit - -=item {tpi} : Tok Pisin - -=item {tkl} : Tokelau - -=item {tog} : Tonga (Nyasa) - -NOT Tsonga! - -=item {to} : Tonga (Tonga Islands) - -(Pronounced "Tong-a", not "Tong-ga") - -NOT Tsonga! - -=item {tsi} : Tsimshian - -eq Sm'algyax - -=item {ts} : Tsonga - -NOT Tonga! - -=item {i-tsu} : Tsou - -=item {tn} : Tswana - -Same as Setswana. - -=item {tum} : Tumbuka - -=item [{tup} : Tupi languages] - -=item {tr} : Turkish - -(Typically in Roman script) - -=item {ota} : Ottoman Turkish (1500-1928) - -(Typically in Arabic script) (Historical) - -=item {crh} : Crimean Turkish - -eq Crimean Tatar - -=item {tk} : Turkmen - -eq Turkmeni. - -=item {tvl} : Tuvalu - -=item {tyv} : Tuvinian - -eq Tuvan. eq Tuvin. - -=item {tw} : Twi - -=item {udm} : Udmurt - -=item {uga} : Ugaritic - -NOT Ugric! - -=item {ug} : Uighur - -=item {uk} : Ukrainian - -=item {umb} : Umbundu - -=item {und} : Undetermined - -Not a tag for normal use. - -=item {ur} : Urdu - -=item {uz} : Uzbek - -eq E<Ouml>zbek - -Notable forms: -{uz-Cyrl} Uzbek in Cyrillic script; -{uz-Latn} Uzbek in Latin script. - -=item {vai} : Vai - -=item {ve} : Venda - -NOT Wendish! NOT Wend! NOT Avestan! (Formerly "ven".) - -=item {vi} : Vietnamese - -eq Viet. - -=item {vo} : Volapuk - -eq VolapE<uuml>k. (Artificial) - -=item {vot} : Votic - -eq Votian. eq Vod. - -=item [{wak} : Wakashan languages] - -=item {wa} : Walloon - -=item {wal} : Walamo - -eq Wolaytta. - -=item {war} : Waray - -Presumably the Philippine language Waray-Waray (SamareE<ntilde>o), -not the smaller Philippine language Waray Sorsogon, nor the extinct -Australian language Waray. - -=item {was} : Washo - -eq Washoe - -=item {cy} : Welsh - -=item {wo} : Wolof - -=item {x-...} : Unregistered (Semi-Private Use) - -"x-" is a prefix for language tags that are not registered with ISO -or IANA. Example, x-double-dutch - -=item {xh} : Xhosa - -=item {sah} : Yakut - -=item {yao} : Yao - -(The Yao in Malawi?) - -=item {yap} : Yapese - -eq Yap - -=item {ii} : Sichuan Yi - -=item {yi} : Yiddish - -Formerly "ji". Usually in Hebrew script. - -Notable forms: -{yi-latn} Yiddish in Latin script - -=item {yo} : Yoruba - -=item [{ypk} : Yupik languages] - -Several "Eskimo" languages. - -=item {znd} : Zande - -=item [{zap} : Zapotec] - -(A group of languages.) - -=item {zen} : Zenaga - -NOT Zend. - -=item {za} : Zhuang - -=item {zu} : Zulu - -=item {zun} : Zuni - -eq ZuE<ntilde>i - -=back - -=for woohah END - -=head1 SEE ALSO - -L<I18N::LangTags|I18N::LangTags> and its "See Also" section. - -=head1 COPYRIGHT AND DISCLAIMER - -Copyright (c) 2001+ Sean M. Burke. All rights reserved. - -You can redistribute and/or -modify this document under the same terms as Perl itself. - -This document is provided in the hope that it will be -useful, but without any warranty; -without even the implied warranty of accuracy, authoritativeness, -completeness, merchantability, or fitness for a particular purpose. - -Email any corrections or questions to me. - -=head1 AUTHOR - -Sean M. Burke, sburkeE<64>cpan.org - -=cut - - -# To generate a list of just the two and three-letter codes: - -#!/usr/local/bin/perl -w - -require 5; # Time-stamp: "2001-03-13 21:53:39 MST" - # Sean M. Burke, sburk****@cpan***** - # This program is for generating the language_codes.txt file -use strict; -use LWP::Simple; -use HTML::TreeBuilder 3.10; -my $root = HTML::TreeBuilder->new(); -my $url = 'http://lcweb.loc.gov/standards/iso639-2/bibcodes.html'; -$root->parse(get($url) || die "Can't get $url"); -$root->eof(); - -my @codes; - -foreach my $tr ($root->find_by_tag_name('tr')) { - my @f = map $_->as_text(), $tr->content_list(); - #print map("<$_> ", @f), "\n"; - next unless @f == 5; - pop @f; # nix the French name - next if $f[-1] eq 'Language Name (English)'; # it's a header line - my $xx = splice(@f, 2,1); # pull out the two-letter code - $f[-1] =~ s/^\s+//; - $f[-1] =~ s/\s+$//; - if($xx =~ m/[a-zA-Z]/) { # there's a two-letter code for it - push @codes, [ lc($f[-1]), "$xx\t$f[-1]\n" ]; - } else { # print the three-letter codes. - if($f[0] eq $f[1]) { - push @codes, [ lc($f[-1]), "$f[1]\t$f[2]\n" ]; - } else { # shouldn't happen - push @codes, [ lc($f[-1]), "@f !!!!!!!!!!\n" ]; - } - } -} - -print map $_->[1], sort {; $a->[0] cmp $b->[0] } @codes; -print "[ based on $url\n at ", scalar(localtime), "]\n", - "[Note: doesn't include IANA-registered codes.]\n"; -exit; -__END__ - Index: affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/README diff -u affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/README:1.1.1.1 affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/README:removed --- affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/README:1.1.1.1 Tue Oct 25 04:14:40 2005 +++ affelio_farm/admin/skelton/affelio/extlib/I18N/LangTags/README Tue Oct 25 04:20:50 2005 @@ -1,78 +0,0 @@ -README for I18N::LangTags - Time-stamp: "2001-05-29 21:52:15 MDT" - - I18N::LangTags - -I18N::LangTags - functions for dealing with RFC3066-style language -tags - -Language tags are a formalism, described in RFC 3066 (obsoleting -1766), for declaring what language form (language and possibly -dialect) a given chunk of information is in. - -This library provides functions for common tasks involving language -tags (notably the extraction of them, comparing them, and testing the -formal validity of them) as is needed in a variety of protocols and -applications. - - -I18N::LangTags::List -- tags and names for human languages. This -module goes from known language tag names ("fr-CA") to their English -names ("Canadian French"). Its documentation also lists the several -hundred known tags and some common subforms. You may find this useful -as a reference. - - -See the POD for more information. - - -INSTALLATION - -You install I18N::LangTags and I18N::LangTags::List, as you would -install any perl module library, by running these commands: - - perl Makefile.PL - make - make test - make install - -If you want to install a private copy of I18N::LangTags in your home -directory, then you should try to produce the initial Makefile with -something like this command: - - perl Makefile.PL LIB=~/perl - -See perldoc perlmodinstall for more information on installing modules. - - -DOCUMENTATION - -POD-format documentation is included in LangTags.pm. POD is readable -with the 'perldoc' utility. See ChangeLog for recent changes. - - -SUPPORT - -Questions, bug reports, useful code bits, and suggestions for -I18N::LangTags should just be sent to me at sburk****@cpan***** - - -AVAILABILITY - -The latest version of I18N::LangTags is available from the -Comprehensive Perl Archive Network (CPAN). Visit -<http://www.perl.com/CPAN/> to find a CPAN site near you. - - -COPYRIGHT - -Copyright 1998-2001, Sean M. Burke <sburk****@cpan*****>, all rights -reserved. - -The programs and documentation in this dist are distributed in -the hope that they will be useful, but without any warranty; without -even the implied warranty of merchantability or fitness for a -particular purpose. - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself.