Description: Adjustments due to handling of languages Forwarded: not-needed Author: Gunnar Hjalmarsson Index: lightdm/liblightdm-gobject/language.c =================================================================== --- lightdm.orig/liblightdm-gobject/language.c +++ lightdm/liblightdm-gobject/language.c @@ -63,7 +63,7 @@ update_languages (void) if (have_languages) return; - const gchar *command = "locale -a"; + const gchar *command = "/usr/share/language-tools/language-options"; g_autofree gchar *stdout_text = NULL; g_autofree gchar *stderr_text = NULL; gint exit_status; @@ -150,14 +150,30 @@ get_locale_name (const gchar *code) LightDMLanguage * lightdm_get_language (void) { - const gchar *lang = g_getenv ("LANG"); - if (!lang) - return NULL; + static const gchar *short_lang = NULL; + if (!short_lang) + { + const gchar *lang = g_getenv ("LANG"); + if (!lang) + return NULL; + + /* Convert to a short form language code */ + g_autofree gchar *command = g_strconcat ("/usr/share/language-tools/language-validate ", lang, NULL); + g_autofree gchar *out = NULL; + g_autoptr(GError) error = NULL; + if (g_spawn_command_line_sync (command, &out, NULL, NULL, &error)) + short_lang = g_strdup (g_strchomp (out)); + else + { + g_warning ("Failed to run '%s': %s", command, error->message); + return NULL; + } + } for (GList *link = lightdm_get_languages (); link; link = link->next) { LightDMLanguage *language = link->data; - if (lightdm_language_matches (language, lang)) + if (lightdm_language_matches (language, short_lang)) return language; } Index: lightdm/tests/scripts/language-env.conf =================================================================== --- lightdm.orig/tests/scripts/language-env.conf +++ lightdm/tests/scripts/language-env.conf @@ -24,8 +24,8 @@ user-session=default #?SESSION-X-0 CONNECT-XSERVER # Check environment variables -#?*SESSION-X-0 READ-ENV NAME=LANG -#?SESSION-X-0 READ-ENV NAME=LANG VALUE=en_AU +#?*SESSION-X-0 READ-ENV NAME=LANGUAGE +#?SESSION-X-0 READ-ENV NAME=LANGUAGE VALUE=en_AU #?*SESSION-X-0 READ-ENV NAME=GDM_LANG #?SESSION-X-0 READ-ENV NAME=GDM_LANG VALUE=en_AU Index: lightdm/src/seat.c =================================================================== --- lightdm.orig/src/seat.c +++ lightdm/src/seat.c @@ -987,7 +987,10 @@ configure_session (Session *session, Se } if (language && language[0] != '\0') { - session_set_env (session, "LANG", language); + /* Only set LANGUAGE if not in a live session + https://launchpad.net/bugs/1861481 */ + if (system ("df | grep -q ^/cow") != 0) + session_set_env (session, "LANGUAGE", language); session_set_env (session, "GDM_LANG", language); } }