+# $Id$
+#
+# 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",
+ bulgarian => "bg",
+ catalan => "ca",
+ czech => "cs",
+ danish => "da",
+ german => "de",
+ greek => "el",
+ esperanto => "eo",
+ spanish => "es",
+ finnish => "fi",
+ french => "fr",
+ croatian => "hr",
+ hungarian => "hu",
+ indonesian => "id",
+ italian => "it",
+ japanese => "ja",
+ korean => "ko",
+ lithuanian => "lt",
+ dutch => "nl",
+ norwegian => "no",
+ polish => "pl",
+ portuguese => "pt",
+ romanian => "ro",
+ russian => "ru",
+ swedish => "sv",
+ slovene => "sl",
+ slovak => "sk",
+ turkish => "tr",
+ chinese => "zh",
+ );
+
+# language directory name => native name of the language
+# non-ASCII letters must be escaped (using entities)!
+my %selflang = (
+ ar => 'عربية',
+ bg => 'Български',
+ ca => 'català',
+ zh => '中文',
+ hr => 'hrvatski',
+ cs => 'česky',
+ da => 'dansk',
+ nl => 'Nederlands',
+ en => 'English',
+ eo => 'Esperanto',
+ fi => 'suomi',
+ fr => 'français',
+ de => 'Deutsch',
+ el => 'Ελληνικά',
+ hu => 'magyar',
+ id => 'Indonesia',
+ it => 'Italiano',
+ ja => '日本語',
+ ko => '한국어',
+ lt => 'Lietuvių',
+ "no" => 'norsk (bokmål)',
+ pl => 'polski',
+ pt_PT => 'Português (pt)',
+ pt_BR => 'Português (br)',
+ ro => 'română',
+ ru => 'Русский',
+ es => 'español',
+ sk => 'slovak', #FIXME
+ sv_SE => 'svenska',
+ sl => 'slovenščina',
+ tr => 'Türkçe',
+ uk => 'ukrainian', #FIXME
+ );
+
+# 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",
+ zh => "Zhongzu", # Not printed due to Chinese-specific code; kept for sort order
+ el => "Ellinika",
+ ja => "Nihongo",
+ ko => "Hangul", # Not sure. "Hanguk-Mal" (=Spoken Korean)?
+ ru => "Russkij",
+ );
+
+# 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;