diff options
Diffstat (limited to 'perl-install/lang.pm')
-rw-r--r-- | perl-install/lang.pm | 144 |
1 files changed, 113 insertions, 31 deletions
diff --git a/perl-install/lang.pm b/perl-install/lang.pm index 9a30749a7..7888b120f 100644 --- a/perl-install/lang.pm +++ b/perl-install/lang.pm @@ -8,22 +8,86 @@ use commands; use cpio; use log; +# key (to be used in $LC_ALL), [0] = english name, [1] = charset encoding, +# [2] = value for $LANG, [3] = value for LANGUAGE (a list of possible +# languages, carefully choosen) my @fields = my %languages = ( - "en" => [ "English", undef, undef, "en_US" ], - "fr" => [ "French", "lat0-sun16", "iso15", "fr_FR" ], - "de" => [ "German", "lat0-sun16", "iso15", "de_DE" ], - "hu" => [ "Hungarian", "lat2-sun16", "iso02", "hu_HU" ], - "is" => [ "Icelandic", "lat0-sun16", "iso15", "is_IS" ], - "id" => [ "Indonesian","lat0-sun16", "iso15", "id" ], - "it" => [ "Italian", "lat0-sun16", "iso15", "it_IT" ], - "no" => [ "Norwegian", "lat0-sun16", "iso15", "no_NO" ], - "ro" => [ "Romanian", "lat2-sun16", "iso02", "ro_RO" ], - "sk" => [ "Slovak", "lat2-sun16", "iso02", "sk_SK" ], - "es" => [ "Spanish", "lat0-sun16", "iso15", "es" ], - "ru" => [ "Russian", "Cyr_a8x16", "koi2alt", "ru_SU" ], - "uk" => [ "Ukrainian", "ruscii_8x16", "koi2alt", "uk_UA" ], - "wa" => [ "Walon", "lat0-sun16", "iso15", "wa" ], + "en" => [ "English", undef, "en", "en_US" ], +"fr_FR" => [ "French (France)", "iso-8859-1", "fr", "fr_FR" ], +"de_DE" => [ "German (Germany)", "iso-8859-1", "de", "de_DE" ], + "hu" => [ "Hungarian", "iso-8859-2", "hu", "hu" ], + "is" => [ "Icelandic", "iso-8859-1", "is", "is" ], + "id" => [ "Indonesian", "iso-8859-1", "id", "id" ], + "it" => [ "Italian", "iso-8859-1", "it", "it_IT" ], + "ja" => [ "Japanese", "jisx0208", "ja", "ja_JP.ujis" ], + "no" => [ "Norwegian (Bokmaal)", "iso-8859-1", "no", "no:no\@nynorsk" ], +"no\@nynorsk" => [ "Norwegian (Nynorsk)","iso-8859-1","no", "no\@nynorsk" ], +"pt_BR" => [ "Portuguese (Brazil)", "iso-8859-1", "pt", "pt_BR:pt_PT" ], +"pt_PT" => [ "Portuguese (Portugal)", "iso-8859-1", "pt", "pt_PT:pt_BR" ], + "ro" => [ "Romanian", "iso-8859-2", "ro", "ro" ], + "ru" => [ "Russian", "koi8-r", "ru", "ru" ], + "sk" => [ "Slovak", "iso-8859-2", "sk", "sk" ], +"es_ES" => [ "Spanish (Spain)", "iso-8859-1", "es", "es" ], + "tr" => [ "Turkish", "iso-8859-9", "tr", "tr" ], + "uk" => [ "Ukrainian", "koi8-u", "uk", "uk" ], + "wa" => [ "Walon", "iso-8859-1", "wa", "wa:fr_BE" ], +); + +my %charsets = ( + "armscii-8" => [ "arm8.fnt", "armscii8", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-*helv*-medium-r-normal--14-*-*-*-*-armscii-8" ], + "iso-8859-1" => [ "lat0-sun16.psf", "iso15", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1" ], + "iso-8859-2" => [ "lat2-sun16.psf", "iso02", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-2" ], + "iso-8859-3" => [ "iso03.f16", "iso03", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-3" ], + "iso-8859-4" => [ "lat4u-16.psf", "iso04", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-4" ], + "iso-8859-5" => [ "iso05.f16", "iso05", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-5" ], +# arabic needs special console driver for text mode [acon] +# (and gtk support isn't done yet) + "iso-8859-6" => [ "iso06.f16", "iso06", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-6" ], + "iso-8859-7" => [ "iso07.f16", "iso07", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-7" ], +# hebrew needs special console driver for text mode (none yet) +# (and gtk support isn't done yet) + "iso-8859-8" => [ "iso08.f16", "iso08", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-8" ], + "iso-8859-9" => [ "lat5-16.psf", "iso09", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-9" ], + "iso-8859-15" => [ "lat0-sun16.psf", "iso15", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-15" ], +# japanese needs special console driver for text mode [kon2] + "jisx0208" => [ "????", "????", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "-*-*-medium-r-normal--14-*-*-*-*-*-jisx0208.1983-0," . + "-*-*-medium-r-normal--14-*-*-*-*-*-jisx0201.1976-0" ], + "koi8-r" => [ "Cyr_a8x16.psf", "koi2alt", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-koi8-r" ], + "koi8-u" => [ "ruscii_8x16.psf", "koi2alt", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-koi8-u" ], + "tcvn" => [ "tcvn8x16.psf", "tcvn", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-tcvn-5712" ], + "viscii" => [ "viscii10-8x16.psf", "viscii", + "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1," . + "*-helvetica-medium-r-normal--14-*-*-*-*-viscii1.1-1" ], ); 1; @@ -42,9 +106,10 @@ sub set { my $lang = shift; if ($lang) { - $ENV{LANG} = $ENV{LINGUAS} = $lang; - $ENV{LC_ALL} = $languages{$lang}[3]; - #if (my $f = $languages{$lang}[1]) { load_font($f) } + $ENV{LC_ALL} = $lang; + $ENV{LANG} = $languages{$lang}[2]; + $ENV{LANGUAGES} = $languages{$lang}[3]; + if (my $f = $languages{$lang}[1]) { load_font($f) } } else { # stick with the default (English) */ delete $ENV{LANG}; @@ -55,32 +120,49 @@ sub set { sub write { my ($prefix) = @_; - my $lang = $ENV{LANG}; + my $lang = $ENV{LC_ALL}; $lang or return; local *F; open F, "> $prefix/etc/sysconfig/i18n" or die "failed to reset $prefix/etc/sysconfig/i18n for writing"; my $f = sub { $_[1] and print F "$_[0]=$_[1]\n"; }; - &$f("LANG", $lang); - &$f("LINGUAS", $lang); + &$f("LC_ALL", $lang); if (my $l = $languages{$lang}) { - &$f("LC_ALL", $l->[3]); + &$f("LANG", $l->[2]); + &$f("LANGUAGE", $l->[3]); + $l->[1] or return; - &$f("SYSFONT", $l->[1]); - &$f("SYSFONTACM", $l->[2]); + if (my $c = $charsets{$l->[1]}) { + &$f("SYSFONT", $c->[0]); + &$f("SYSFONTACM", $c->[1]); - my $p = "$prefix/usr/lib/kbd"; - commands::cp("-f", - "$p/consolefonts/$l->[1].psf.gz", - glob_("$p/consoletrans/$l->[2]*"), + my $p = "$prefix/usr/lib/kbd"; + commands::cp("-f", + "$p/consolefonts/$c->[0].gz", + glob_("$p/consoletrans/$c->[1]*"), "$prefix/etc/sysconfig/console"); + } } } sub load_font { - my ($fontFile) = @_; - log::l("loading font /usr/share/consolefonts/$fontFile.psf"); - c::loadFont("/tmp/$fontFile") or log::l("error in loadFont: one of PIO_FONT PIO_UNIMAPCLR PIO_UNIMAP PIO_UNISCRNMAP failed: $!"); - print STDERR "\033(K"; + my ($charset) = @_; + my $fontFile = "lat0-sun16"; + my $fontSet = "*-helvetica-medium-r-normal--14-*-*-*-*-iso8859-1"; + + if (my $c = $charsets{$charset}) { + log::l("loading " . $c . " font"); + $fontFile = $c->[0]; + $fontSet = $c->[2]; + } + + # text mode font + log::l("loading font /usr/share/consolefonts/$fontFile"); + #c::loadFont("/tmp/$fontFile") or log::l("error in loadFont: one of PIO_FONT PIO_UNIMAPCLR PIO_UNIMAP PIO_UNISCRNMAP failed: $!"); + #print STDERR "\033(K"; + + # X11 font + log::l("fontset: " . $fontSet); + Gtk::Gdk::Font::fontset_load("*",$fontSet); } |