]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 425288: checksetup.pl displays messages using the first language available, alpha...
authorlpsolit%gmail.com <>
Fri, 28 Mar 2008 19:15:42 +0000 (19:15 +0000)
committerlpsolit%gmail.com <>
Fri, 28 Mar 2008 19:15:42 +0000 (19:15 +0000)
Bugzilla/Install/Util.pm
checksetup.pl

index 67aeb4873297668366ae92e46295fd8be9c59482..5d873aee8c23e82aff65f3fa6e18d9b39bf62a75 100644 (file)
@@ -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
index b8f9e325bff99e998280bfde8276300af1e6e6de..d624c87750090de846a8a4821e85980ef3ad3cdb 100755 (executable)
@@ -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',