# Taken from the webwml CVS tree (english/templates/languages.wml) package Packages::I18N::Languages; use strict; use warnings; use Exporter; our @ISA = qw( Exporter ); our @EXPORT = qw( langcmp get_transliteration get_selfname ); # language directory name => ISO 639 two-letter code for the language name my %langs = ( english => "en", arabic => "ar", armenian => "hy", bulgarian => "bg", catalan => "ca", chinese => "zh", croatian => "hr", czech => "cs", danish => "da", dutch => "nl", german => "de", greek => "el", esperanto => "eo", spanish => "es", finnish => "fi", french => "fr", hungarian => "hu", indonesian => "id", italian => "it", japanese => "ja", korean => "ko", lithuanian => "lt", norwegian => "no", persian => "fa", polish => "pl", portuguese => "pt", romanian => "ro", russian => "ru", swedish => "sv", slovene => "sl", slovak => "sk", turkish => "tr", ); # language directory name => native name of the language # non-ASCII letters must be escaped (using entities)! my %selflang = ( ar => 'عربية', bg => 'Български', ca => 'català', cs => 'česky', da => 'dansk', de => 'Deutsch', el => 'Ελληνικά', en => 'English', eo => 'Esperanto', es => 'español', fa => 'فارسی', fi => 'suomi', fr => 'français', hu => 'magyar', hr => 'hrvatski', hy => 'Հայերեն', id => 'Indonesia', it => 'Italiano', ja => '日本語', ko => '한국어', lt => 'Lietuvių', nl => 'Nederlands', "no" => 'norsk (bokmål)', pl => 'polski', pt => 'Português (pt)', pt_PT => 'Português (pt)', pt_BR => 'Português (br)', ro => 'română', ru => 'Русский', sk => 'slovensky', sv => 'svenska', sv_SE => 'svenska', sl => 'slovenščina', tr => 'Türkçe', uk => 'українська', zh => '中文', zh_CN => '簡體中文', zh_HK => '正體中文', zh_TW => '正體中文', ); # language directory name => Latin transliteration of the language name # This is used for language names which consist entirely of non-Latin # characters, to aid those that have browsers which cannot show different # character sets at once. my %translit = ( ar => "Arabiya", bg => "Bəlgarski", el => "Ellinika", fa => "Farsi", hy => "hayeren", ja => "Nihongo", ko => "Hangul", # Not sure. "Hanguk-Mal" (=Spoken Korean)? ru => "Russkij", uk => "ukrajins'ka", zh => "Zhongzu", # Not printed due to Chinese-specific code; kept for sort order zh_CN => "Simplified Chinese", zh_HK => "Traditional Chinese", zh_TW => "Traditional Chinese", ); # second transliteration table, used for languages starting with a latin # diacritic letter my %translit2 = ( cs => "cesky", ); sub langcmp ($$) { my ($first, $second) = @_; # Handle sorting of non-latin characters # If there is a transliteration for this language available, use it $first = $translit{$first} if defined $translit{$first}; $second = $translit{$second} if defined $translit{$second}; # Then handle special cases (initial latin letters with diacritics) $first = $translit2{$first} if defined $translit2{$first}; $second = $translit2{$second} if defined $translit2{$second}; # Put remaining entity-only names last in the list if (substr($first,0,1) eq '&') { $first =~ s/^&/ZZZ&/; } if (substr($second,0,1) eq '&') { $second =~ s/^&/ZZZ&/; } # There seems to be a bug with localization in # Perl 5.005 so we need those extra variables. my ($ufirst, $usecond) = (uc($first), uc($second)); return $ufirst cmp $usecond; } sub get_selfname { return $selflang{$_[0]} if exists $selflang{$_[0]}; return undef; } sub get_transliteration { return $translit{$_[0]} if exists $translit{$_[0]}; return undef; } 1;