chiark / gitweb /
locale: support $LANGUAGE too
authorLennart Poettering <lennart@poettering.net>
Wed, 31 Aug 2011 12:09:14 +0000 (14:09 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 31 Aug 2011 12:10:50 +0000 (14:10 +0200)
$LANGUAGE is a GNU extension that is probably worth supporting, since it
allows specifiying an order of languages.

https://bugs.freedesktop.org/show_bug.cgi?id=40510

man/locale.conf.xml
src/locale-setup.c
src/localed.c
units/getty@.service.m4

index 742c5ebb2d61c0b0455b2a562cf254d7416121ce..37239974b6dc4b9a99c284cb1a8b7b2929385bf4 100644 (file)
@@ -69,6 +69,7 @@
 
                 <para>Note that the kernel command line options
                 <varname>locale.LANG=</varname>,
 
                 <para>Note that the kernel command line options
                 <varname>locale.LANG=</varname>,
+                <varname>locale.LANGUAGE=</varname>,
                 <varname>locale.LC_CTYPE=</varname>,
                 <varname>locale.LC_NUMERIC=</varname>,
                 <varname>locale.LC_TIME=</varname>,
                 <varname>locale.LC_CTYPE=</varname>,
                 <varname>locale.LC_NUMERIC=</varname>,
                 <varname>locale.LC_TIME=</varname>,
                 <para>The following locale settings may be set using
                 <filename>/etc/locale.conf</filename>:
                 <varname>LANG=</varname>,
                 <para>The following locale settings may be set using
                 <filename>/etc/locale.conf</filename>:
                 <varname>LANG=</varname>,
+                <varname>LANGUAGE=</varname>,
                 <varname>LC_CTYPE=</varname>,
                 <varname>LC_NUMERIC=</varname>,
                 <varname>LC_TIME=</varname>,
                 <varname>LC_CTYPE=</varname>,
                 <varname>LC_NUMERIC=</varname>,
                 <varname>LC_TIME=</varname>,
index 33111da2187804d25215b3b85370d295fc2c0049..41eb50bbba7f486bba3bc3bffddea9a83ece0967 100644 (file)
@@ -32,6 +32,7 @@ enum {
          * using LANG instead. */
 
         VARIABLE_LANG,
          * using LANG instead. */
 
         VARIABLE_LANG,
+        VARIABLE_LANGUAGE,
         VARIABLE_LC_CTYPE,
         VARIABLE_LC_NUMERIC,
         VARIABLE_LC_TIME,
         VARIABLE_LC_CTYPE,
         VARIABLE_LC_NUMERIC,
         VARIABLE_LC_TIME,
@@ -49,6 +50,7 @@ enum {
 
 static const char * const variable_names[_VARIABLE_MAX] = {
         [VARIABLE_LANG] = "LANG",
 
 static const char * const variable_names[_VARIABLE_MAX] = {
         [VARIABLE_LANG] = "LANG",
+        [VARIABLE_LANGUAGE] = "LANGUAGE",
         [VARIABLE_LC_CTYPE] = "LC_CTYPE",
         [VARIABLE_LC_NUMERIC] = "LC_NUMERIC",
         [VARIABLE_LC_TIME] = "LC_TIME",
         [VARIABLE_LC_CTYPE] = "LC_CTYPE",
         [VARIABLE_LC_NUMERIC] = "LC_NUMERIC",
         [VARIABLE_LC_TIME] = "LC_TIME",
@@ -75,6 +77,7 @@ int locale_setup(void) {
                                         "LANG",                     &variables[VARIABLE_LANG],
 #endif
                                         "locale.LANG",              &variables[VARIABLE_LANG],
                                         "LANG",                     &variables[VARIABLE_LANG],
 #endif
                                         "locale.LANG",              &variables[VARIABLE_LANG],
+                                        "locale.LANGUAGE",          &variables[VARIABLE_LANGUAGE],
                                         "locale.LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
                                         "locale.LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
                                         "locale.LC_TIME",           &variables[VARIABLE_LC_TIME],
                                         "locale.LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
                                         "locale.LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
                                         "locale.LC_TIME",           &variables[VARIABLE_LC_TIME],
@@ -98,6 +101,7 @@ int locale_setup(void) {
         if (r <= 0 &&
             (r = parse_env_file("/etc/locale.conf", NEWLINE,
                                "LANG",              &variables[VARIABLE_LANG],
         if (r <= 0 &&
             (r = parse_env_file("/etc/locale.conf", NEWLINE,
                                "LANG",              &variables[VARIABLE_LANG],
+                               "LANGUAGE",          &variables[VARIABLE_LANGUAGE],
                                "LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
                                "LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
                                "LC_TIME",           &variables[VARIABLE_LC_TIME],
                                "LC_CTYPE",          &variables[VARIABLE_LC_CTYPE],
                                "LC_NUMERIC",        &variables[VARIABLE_LC_NUMERIC],
                                "LC_TIME",           &variables[VARIABLE_LC_TIME],
@@ -212,8 +216,8 @@ int locale_setup(void) {
                                 "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION],
                                 NULL)) < 0) {
 
                                 "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION],
                                 NULL)) < 0) {
 
-               if (r != -ENOENT)
-                       log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r));
+                if (r != -ENOENT)
+                        log_warning("Failed to read /etc/sysconfig/i18n: %s", strerror(-r));
         }
 
 #endif
         }
 
 #endif
index cb8acf2079e841c44d5d197efc3bc170e2215c7d..d7dcc9e95bbb465761ff368e5c490f2c314ec61e 100644 (file)
@@ -59,6 +59,7 @@ enum {
          * using LANG instead. */
 
         PROP_LANG,
          * using LANG instead. */
 
         PROP_LANG,
+        PROP_LANGUAGE,
         PROP_LC_CTYPE,
         PROP_LC_NUMERIC,
         PROP_LC_TIME,
         PROP_LC_CTYPE,
         PROP_LC_NUMERIC,
         PROP_LC_TIME,
@@ -76,6 +77,7 @@ enum {
 
 static const char * const names[_PROP_MAX] = {
         [PROP_LANG] = "LANG",
 
 static const char * const names[_PROP_MAX] = {
         [PROP_LANG] = "LANG",
+        [PROP_LANGUAGE] = "LANGUAGE",
         [PROP_LC_CTYPE] = "LC_CTYPE",
         [PROP_LC_NUMERIC] = "LC_NUMERIC",
         [PROP_LC_TIME] = "LC_TIME",
         [PROP_LC_CTYPE] = "LC_CTYPE",
         [PROP_LC_NUMERIC] = "LC_NUMERIC",
         [PROP_LC_TIME] = "LC_TIME",
@@ -132,6 +134,7 @@ static int read_data(void) {
 
         r = parse_env_file("/etc/locale.conf", NEWLINE,
                            "LANG",              &data[PROP_LANG],
 
         r = parse_env_file("/etc/locale.conf", NEWLINE,
                            "LANG",              &data[PROP_LANG],
+                           "LANGUAGE",          &data[PROP_LANGUAGE],
                            "LC_CTYPE",          &data[PROP_LC_CTYPE],
                            "LC_NUMERIC",        &data[PROP_LC_NUMERIC],
                            "LC_TIME",           &data[PROP_LC_TIME],
                            "LC_CTYPE",          &data[PROP_LC_CTYPE],
                            "LC_NUMERIC",        &data[PROP_LC_NUMERIC],
                            "LC_TIME",           &data[PROP_LC_TIME],
index b1115672bb99026240ffd68a2051d9f66ff27439..14d8187269a80233630a6d31ef75d5720c2a177f 100644 (file)
@@ -44,7 +44,7 @@ KillMode=process
 
 # Unset locale for the console getty since the console has problems
 # displaying some internationalized messages.
 
 # Unset locale for the console getty since the console has problems
 # displaying some internationalized messages.
-Environment=LANG= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
+Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
 
 # Some login implementations ignore SIGTERM, so we send SIGHUP
 # instead, to ensure that login terminates cleanly.
 
 # Some login implementations ignore SIGTERM, so we send SIGHUP
 # instead, to ensure that login terminates cleanly.