]> git.deb.at Git - deb/packages.git/blob - lib/Packages/I18N/Locale.pm
Packages::Dispatcher: Work around breakage in etch's CGI.pm
[deb/packages.git] / lib / Packages / I18N / Locale.pm
1 package Packages::I18N::Locale;
2
3 use strict;
4 use warnings;
5
6 use Exporter;
7 use Locale::gettext;
8
9 our @ISA = qw( Exporter );
10 # the reason we have both _g and _ is simply that there
11 # seem to be some situations where Perl doesn't handle _
12 # correctly. If in doubt use _g
13 our @EXPORT = qw( get_locale get_charset _g N_ );
14
15 my %lang2loc = ( en => "en_US",
16                  cs => "cs_CZ",
17                  da => "da_DK",
18                  ja => "ja_JP",
19                  sv => "sv_SE",
20                  uk => "uk_UA",
21                  default => "en_US",
22                  );
23
24 # this can probably be removed now that all locales are available in UTF-8
25 my %lang2charset = (
26                     default => 'UTF-8',
27                     );
28
29 sub get_locale {
30     my $lang = shift;
31     my $locale = $lang;
32
33     return "$lang2loc{default}.".get_charset() unless $lang;
34
35     if ( length($lang) == 2 ) {
36         $locale = $lang2loc{$lang} || ( "${lang}_" . uc $lang );
37     } elsif ( $lang !~ /^[a-z][a-z]_[A-Z][A-Z]$/ ) {
38         warn "get_locale: couldn't determine locale\n";
39         return;
40     }
41     $locale .= ".".get_charset($lang);
42     return $locale;
43 }
44
45 sub get_charset {
46     my $lang = shift;
47
48     return $lang2charset{default} unless $lang;
49     return $lang2charset{$lang} || $lang2charset{default};
50 }
51
52 sub _g { return gettext( $_[0] ) }
53 sub N_ { return $_[0] }
54
55 1;