Locale can be accepted from the browser just like language

This commit is contained in:
iliajie
2023-02-05 03:57:25 +02:00
parent 6b3d776bc1
commit 19a5766762
4 changed files with 27 additions and 16 deletions

File diff suppressed because one or more lines are too long

View File

@@ -26,8 +26,9 @@ if (!$@) {
$locale++;
my $locales = &list_locales();
my %localesrev = reverse %{$locales};
my $locale_auto = &parse_accepted_language();
print &ui_table_row($text{'lang_locale'},
&ui_select("locale", $uconfig{'locale'} || "en-US",
&ui_select("locale", $uconfig{'locale'} || $locale_auto || "en-US",
[ map { [ $localesrev{$_}, $_ ] } sort values %{$locales} ]).
&ui_hidden("dateformat", $uconfig{'dateformat'}));
}

View File

@@ -1993,7 +1993,8 @@ my ($secs, $only, $fmt) = @_;
eval "use DateTime; use DateTime::Locale; use DateTime::TimeZone;";
if (!$@) {
my $opts = ref($only) ? $only : {};
my $locale_name = $opts->{'locale'} || $gconfig{'locale_'.$remote_user} || $gconfig{'locale'} || 'en-US';
my $locale_auto = &parse_accepted_language();
my $locale_name = $opts->{'locale'} || $gconfig{'locale_'.$remote_user} || $gconfig{'locale'} || $locale_auto || 'en-US';
my $tz = $opts->{'tz'} ||
DateTime::TimeZone->new( name => 'local' )->name(); # Asia/Nicosia
my $locale = DateTime::Locale->load($locale_name);
@@ -5222,17 +5223,8 @@ $webmin_logfile = $gconfig{'webmin_log'} ? $gconfig{'webmin_log'}
# Load language strings into %text
my @langs = &list_languages();
my $accepted_lang;
if ($gconfig{'acceptlang'}) {
foreach my $a (split(/,/, $ENV{'HTTP_ACCEPT_LANGUAGE'})) {
$a =~ s/;.*//; # Remove ;q=0.5 or similar
my ($al) = grep { $_->{'lang'} eq $a } @langs;
if ($al) {
$accepted_lang = $al->{'lang'};
last;
}
}
}
my $accepted_lang = &parse_accepted_language();
$current_lang = safe_language($force_lang ? $force_lang :
$accepted_lang ? $accepted_lang :
$remote_user_attrs{'lang'} ? $remote_user_attrs{'lang'} :
@@ -12867,6 +12859,23 @@ if ($float =~ /^[-]?(\.\d+|\d+\.\d+)$/) {
return 0;
}
sub parse_accepted_language
{
my @langs = &list_languages();
my $accepted_lang;
if ($gconfig{'acceptlang'}) {
foreach my $a (split(/,/, $ENV{'HTTP_ACCEPT_LANGUAGE'})) {
$a =~ s/;.*//; # Remove ;q=0.5 or similar
my ($al) = grep { $_->{'lang'} eq $a } @langs;
if ($al) {
$accepted_lang = $al->{'lang'};
last;
}
}
}
return $accepted_lang;
}
$done_web_lib_funcs = 1;
1;

View File

@@ -25,10 +25,11 @@ my $locale;
eval "use DateTime; use DateTime::Locale; use DateTime::TimeZone;";
if (!$@) {
$locale++;
my $locales = list_locales();
my $locales = &list_locales();
my %localesrev = reverse %{$locales};
my $locale_auto = &parse_accepted_language();
print &ui_table_row($text{'lang_locale'},
&ui_select("locale", $gconfig{'locale'} || "en-US",
&ui_select("locale", $gconfig{'locale'} || $locale_auto || "en-US",
[ map { [ $localesrev{$_}, $_ ] } sort values %{$locales} ]).
&ui_hidden("dateformat", $gconfig{'dateformat'}),
undef, [ "valign=middle","valign=middle" ]);