]> git.deb.at Git - deb/packages.git/blobdiff - lib/Packages/I18N/Languages.pm
Add basic l10n support.
[deb/packages.git] / lib / Packages / I18N / Languages.pm
diff --git a/lib/Packages/I18N/Languages.pm b/lib/Packages/I18N/Languages.pm
new file mode 100644 (file)
index 0000000..9f30453
--- /dev/null
@@ -0,0 +1,143 @@
+# $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;