diff --git a/change-user/index.cgi b/change-user/index.cgi index e311c5f3f..d49595270 100755 --- a/change-user/index.cgi +++ b/change-user/index.cgi @@ -23,8 +23,8 @@ print &ui_table_start(undef, undef, 2); if ($access{'lang'}) { # Show personal language - my @langs = &list_languages(); my $glang = $gconfig{"lang"} || $default_lang; + my @langs = &list_languages($user->{'lang'} || $glang); my ($linfo) = grep { $_->{'lang'} eq $glang } @langs; print &ui_table_row($text{'index_lang'}, &ui_radio("lang_def", $user->{'lang'} ? 0 : 1, diff --git a/web-lib-funcs.pl b/web-lib-funcs.pl index 188bba462..3c0876fad 100755 --- a/web-lib-funcs.pl +++ b/web-lib-funcs.pl @@ -5268,7 +5268,7 @@ $rv{"dir"} = $_[0]; return %rv; } -=head2 list_languages +=head2 list_languages(current-lang) Returns an array of supported languages, taken from Webmin's os_list.txt file. Each is a hash reference with the following keys : @@ -5286,6 +5286,7 @@ Each is a hash reference with the following keys : =cut sub list_languages { +my ($current) = @_; if (!@main::list_languages_cache) { my $o; local $_; @@ -5314,6 +5315,7 @@ if (!@main::list_languages_cache) { $ul->{'lang'} = $utf8lang; $ul->{'index'} = scalar(@main::list_languages_cache); + $l->{'utf8_variant'} = $ul; push(@main::list_languages_cache, $ul); } } @@ -5322,6 +5324,12 @@ if (!@main::list_languages_cache) { @main::list_languages_cache = sort { $a->{'desc'} cmp $b->{'desc'} } @main::list_languages_cache; } +if ($current && $current =~ /\.UTF-8$/) { + # If the user is already using a UTF-8 language encoding, filter out + # languages that have a UTF-8 variant + return grep { $_->{'charset'} eq 'UTF-8' || + !$_->{'utf8_variant'} } @main::list_languages_cache; + } return @main::list_languages_cache; } diff --git a/web-lib.pl b/web-lib.pl index de6c64da2..e70776a19 100755 --- a/web-lib.pl +++ b/web-lib.pl @@ -7,7 +7,7 @@ $main::default_debug_log_size = 10*1024*1024; $webmin_feedback_address = "feedback\@webmin.com"; -$default_lang = "en"; +$default_lang = "en.UTF-8"; $default_charset = "iso-8859-1"; =head2 unique(string, ...) diff --git a/webmin/edit_lang.cgi b/webmin/edit_lang.cgi index 091a656f3..3d10c2f6f 100755 --- a/webmin/edit_lang.cgi +++ b/webmin/edit_lang.cgi @@ -15,16 +15,16 @@ $clang = $gconfig{'lang'} ? $gconfig{'lang'} : $default_lang; print &ui_table_row($text{'lang_lang'}, &ui_select("lang", $clang, [ map { [ $_->{'lang'}, "$_->{'desc'} (".uc($_->{'lang'}).")" ] } - &list_languages() ]), undef, [ "valign=middle","valign=middle" ]); + &list_languages($clang) ])); # Character set print &ui_table_row($text{'lang_charset'}, &ui_opt_textbox("charset", $gconfig{'charset'}, 15, - $text{'lang_chardef'}), undef, [ "valign=middle","valign=middle" ]); + $text{'lang_chardef'})); # Use language from browser? print &ui_table_row($text{'lang_accept'}, - &ui_yesno_radio("acceptlang", int($gconfig{'acceptlang'})), undef, [ "valign=middle","valign=middle" ]); + &ui_yesno_radio("acceptlang", int($gconfig{'acceptlang'}))); print &ui_table_end(); print &ui_form_end([ [ "", $text{'lang_ok'} ] ]);