diff options
Diffstat (limited to 'perl-install/lang.pm')
-rw-r--r-- | perl-install/lang.pm | 60 |
1 files changed, 27 insertions, 33 deletions
diff --git a/perl-install/lang.pm b/perl-install/lang.pm index b6d404792..3b2c65614 100644 --- a/perl-install/lang.pm +++ b/perl-install/lang.pm @@ -233,8 +233,7 @@ my %charsets = ( "iso-8859-4" => [ "lat4u-16", undef, "iso04", "iso8859-4", "775", std_("iso8859-4") ], "iso-8859-5" => [ "iso05.f16", "iso05", "trivial.trans", - "iso8859-5", "855", - std2("iso8859-5", 10), std2("iso8859-5", 8) ], + "iso8859-5", "855", sub { std("microsoft-cp1251", @_) } ], #-#- arabic needs special console driver for text mode [acon] #-#- (and gtk support isn't done yet) "iso-8859-6" => [ "iso06.f16", "iso06", "trivial.trans", @@ -311,16 +310,16 @@ my %bigfonts = ( #-###################################################################################### sub list { keys %languages } -sub lang2text { $languages{$_[0]} && $languages{$_[0]}[0] } -sub lang2charset { $languages{$_[0]} && $languages{$_[0]}[1] } -sub lang2LANG { $languages{$_[0]} && $languages{$_[0]}[2] } -sub lang2LANGUAGE { $languages{$_[0]} && $languages{$_[0]}[3] } +sub lang2text { exists $languages{$_[0]} && $languages{$_[0]}[0] } +sub lang2charset { exists $languages{$_[0]} && $languages{$_[0]}[1] } +sub lang2LANG { exists $languages{$_[0]} && $languages{$_[0]}[2] } +sub lang2LANGUAGE { exists $languages{$_[0]} && $languages{$_[0]}[3] } sub getxim { $xim{$_[0]} } sub set { my ($lang) = @_; - if ($lang && $languages{$lang}) { + if ($lang && exists $languages{$lang}) { #- use "packdrake -x" that follow symlinks and expand directory. #- it is necessary as there is a lot of symlinks inside locale.cz2, #- using a compressed cpio archive is nighmare to extract all files. @@ -333,10 +332,7 @@ sub set { eval { require packdrake; my $packer = new packdrake("$ENV{SHARE_PATH}/locale.cz2", quiet => 1); - # "UTF-8" locale directory is always needed - $packer->extract_archive("$ENV{SHARE_PATH}/locale", "UTF-8"); - $packer->extract_archive("$ENV{SHARE_PATH}/locale", $languages{$lang}[2]); - $packer->extract_archive("$ENV{SHARE_PATH}/locale", split(":", $languages{$lang}[3])); + $packer->extract_archive("$ENV{SHARE_PATH}/locale", lang2LANG($lang)); }; } @@ -353,10 +349,10 @@ sub set { $ENV{LC_MEASUREMENT} = "C"; $ENV{LC_IDENTIFICATION} = "C"; - $ENV{LC_CTYPE} = $languages{$lang}[2]; - $ENV{LC_MESSAGES} = $languages{$lang}[2]; - $ENV{LANG} = $languages{$lang}[2]; - $ENV{LANGUAGE} = $languages{$lang}[3]; + $ENV{LC_CTYPE} = lang2LANG($lang); + $ENV{LC_MESSAGES} = lang2LANG($lang); + $ENV{LANG} = lang2LANG($lang); + $ENV{LANGUAGE} = lang2LANGUAGE($lang); load_mo(); } else { @@ -376,19 +372,19 @@ sub langs { sub langsLANGUAGE { my ($l) = @_; my @l = $l->{all} ? list() : langs($l); - uniq(map { split ':', $languages{$_}[3] } @l); + uniq(map { split ':', lang2LANGUAGE($_) } @l); } sub pack_langs { my ($l) = @_; - my $s = $l->{all} ? 'all' : join ':', uniq(map { $languages{$_}[3] } langs($l)); + my $s = $l->{all} ? 'all' : join ':', uniq(map { lang2LANGUAGE($_) } langs($l)); $ENV{RPM_INSTALL_LANG} = $s; $s; } sub unpack_langs { my ($s) = @_; - my @l = uniq(map { split ':', $languages{$_}[3] } split(':', $s)); + my @l = uniq(map { split ':', lang2LANGUAGE($_) } split(':', $s)); my @l2 = intersection(\@l, [ keys %languages ]); +{ map { $_ => 1 } @l2 }; } @@ -416,10 +412,10 @@ sub write { my $h = {}; $h->{$_} = $lang foreach qw(LC_COLLATE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_MONETARY LC_TIME); - if (my $l = $languages{$lang}) { - add2hash $h, { LANG => $l->[2], LANGUAGE => $l->[3] }; + if ($lang && exists $languages{$lang}) { + add2hash $h, { LANG => lang2LANG($lang), LANGUAGE => lang2LANGUAGE($lang) }; - my $c = $charsets{$l->[1] || ''}; + my $c = $charsets{lang2charset($lang) || ''}; if ($c) { my $p = "$prefix/usr/lib/kbd"; if ($c->[0]) { @@ -487,14 +483,12 @@ sub console_font_files { sub load_console_font { my ($lang) = @_; - my ($charset) = $languages{$lang} && $languages{$lang}[1] ; - my ($f, $u, $m) = @{$charsets{$charset} || []}; + my ($f, $u, $m) = @{$charsets{lang2charset($lang)} || []}; require run_program; - run_program::run(if_($ENV{LD_LOADER}, $ENV{LD_LOADER}), 'consolechars', '-v', - ('-f', $f || 'lat0-sun16'), - $u ? ('-u', $u) : (), - $m ? ('-m', $m) : ()); + run_program::run(if_($ENV{LD_LOADER}, $ENV{LD_LOADER}), + 'consolechars', '-v', '-f', $f || 'lat0-sun16', + if_($u, '-u', $u), if_($m, '-m', $m)); } #-sub load_font { @@ -516,9 +510,9 @@ sub load_console_font { sub get_x_fontset { my ($lang, $size) = @_; - my $l = $languages{$lang} or return; - my $c = $charsets{$l->[1]} or return; - if (my $f = $bigfonts{$l->[1]}) { + my $charset = lang2charset($lang) or return; + my $c = $charsets{$charset} or return; + if (my $f = $bigfonts{$charset}) { my $dir = "/usr/X11R6/lib/X11/fonts"; if (! -e "$dir/$f" && $::isInstall && common::usingRamdisk()) { unlink "$dir/$_" foreach values %bigfonts; @@ -533,15 +527,15 @@ sub get_x_fontset { sub fs_options { my ($lang) = @_; - my $l = $languages{$lang} or return; - my $c = $charsets{$l->[1]} or return; + my $charset = lang2charset($lang) or return; + my $c = $charsets{$charset} or return; my ($iocharset, $codepage) = @$c[3..4]; $iocharset, $codepage; } sub charset { my ($lang, $prefix) = @_; - my $l = $languages{$lang} && $languages{$lang}[2]; + my $l = lang2LANG($lang); foreach (cat_("$prefix/usr/X11R6/lib/X11/locale/locale.alias")) { /$l:\s+.*\.(\S+)/ and return $1; } |