summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlpsolit%gmail.com <>2008-03-28 20:15:42 +0100
committerlpsolit%gmail.com <>2008-03-28 20:15:42 +0100
commit1d505b299eca198af30c201f65a2cccd5dc6722e (patch)
treeea1a418b8e4a089b951dad129200e9246d91aa30
parent1d08cb2f7abb8d56855ff05d68d3e803b7e66c38 (diff)
downloadbugzilla-1d505b299eca198af30c201f65a2cccd5dc6722e.tar.gz
bugzilla-1d505b299eca198af30c201f65a2cccd5dc6722e.tar.xz
Bug 425288: checksetup.pl displays messages using the first language available, alphabetically, rather than falling back to english if the desired language is not found - Patch by Frédéric Buclin <LpSolit@gmail.com> r=wurblzap a=mkanat
-rw-r--r--Bugzilla/Install/Util.pm34
-rwxr-xr-xchecksetup.pl5
2 files changed, 24 insertions, 15 deletions
diff --git a/Bugzilla/Install/Util.pm b/Bugzilla/Install/Util.pm
index 67aeb4873..5d873aee8 100644
--- a/Bugzilla/Install/Util.pm
+++ b/Bugzilla/Install/Util.pm
@@ -29,7 +29,7 @@ use strict;
use Bugzilla::Constants;
use File::Basename;
-use POSIX ();
+use POSIX qw(setlocale LC_CTYPE);
use Safe;
use base qw(Exporter);
@@ -40,6 +40,7 @@ our @EXPORT_OK = qw(
install_string
template_include_path
vers_cmp
+ get_console_locale
);
sub bin_loc {
@@ -165,17 +166,6 @@ sub template_include_path {
}
}
- # If we didn't want *any* of the languages we support, just use all
- # of the languages we said we support, in the order they were specified.
- # This is only done when you ask for a certain set of languages, because
- # otherwise @supported just came off the disk in alphabetical order,
- # and it could give you de (German) when you speak English.
- # (If @supported came off the disk, we fall back on English if no language
- # is available--that happens below.)
- if (!@usedlanguages && $params->{use_languages}) {
- @usedlanguages = @supported;
- }
-
# We always include English at the bottom if it's not there, even if
# somebody removed it from use_languages.
if (!grep($_ eq 'en', @usedlanguages)) {
@@ -304,6 +294,21 @@ sub _sort_accept_language {
return map($_->{'language'}, (sort sortQvalue @qlanguages));
}
+sub get_console_locale {
+ my $locale = setlocale(LC_CTYPE);
+ # Some distros set e.g. LC_CTYPE = fr_CH.UTF-8. We clean it up.
+ if ($locale =~ /^([^\.]+)/) {
+ $locale = $1;
+ }
+ $locale =~ s/_/-/;
+ # It's pretty sure that there is no language pack of the form fr-CH
+ # installed, so we also include fr as a wanted language.
+ if ($locale =~ /^(\S+)\-/) {
+ $locale .= ",$1";
+ }
+ return $locale;
+}
+
# This is like request_cache, but it's used only by installation code
# for setup.cgi and things like that.
@@ -366,6 +371,11 @@ binary, if the binary is in the C<PATH>.
Returns a hash containing information about what version of Bugzilla we're
running, what perl version we're using, and what OS we're running on.
+=item C<get_console_locale>
+
+Returns the language to use based on the LC_CTYPE value returned by the OS.
+If LC_CTYPE is of the form fr-CH, then fr is appended to the list.
+
=item C<indicate_progress>
=over
diff --git a/checksetup.pl b/checksetup.pl
index b8f9e325b..d624c8775 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -47,14 +47,13 @@ use 5.008001;
use File::Basename;
use Getopt::Long qw(:config bundling);
use Pod::Usage;
-use POSIX qw(setlocale LC_CTYPE);
use Safe;
BEGIN { chdir dirname($0); }
use lib qw(. lib);
use Bugzilla::Constants;
use Bugzilla::Install::Requirements;
-use Bugzilla::Install::Util qw(install_string get_version_and_os);
+use Bugzilla::Install::Util qw(install_string get_version_and_os get_console_locale);
######################################################################
# Live Code
@@ -62,7 +61,7 @@ use Bugzilla::Install::Util qw(install_string get_version_and_os);
# When we're running at the command line, we need to pick the right
# language before ever displaying any string.
-$ENV{'HTTP_ACCEPT_LANGUAGE'} ||= setlocale(LC_CTYPE);
+$ENV{'HTTP_ACCEPT_LANGUAGE'} ||= get_console_locale();
my %switch;
GetOptions(\%switch, 'help|h|?', 'check-modules', 'no-templates|t',