@@ -6,49 +6,43 @@ Index: lightdm/liblightdm-gobject/language.c
66===================================================================
77--- lightdm.orig/liblightdm-gobject/language.c
88+++ lightdm/liblightdm-gobject/language.c
9- @@ -60 ,7 +60 ,7 @@ static GList *languages = NULL;
10- static void
11- update_languages (void)
12- {
13- - gchar *command = "locale -a";
14- + gchar *command = "/usr/share/language-tools/language-options";
9+ @@ -63 ,7 +63 ,7 @@ update_languages (void)
10+ if (have_languages)
11+ return;
12+
13+ - const gchar *command = "locale -a";
14+ + const gchar *command = "/usr/share/language-tools/language-options";
1515 g_autofree gchar *stdout_text = NULL;
1616 g_autofree gchar *stderr_text = NULL;
1717 gint exit_status;
18- @@ -168,15 +168,39 @@ lightdm_get_language (void)
18+ @@ -150,14 +150,30 @@ get_locale_name (const gchar *code)
19+ LightDMLanguage *
20+ lightdm_get_language (void)
1921 {
20- const gchar *lang;
21- GList *link;
22+ - const gchar *lang = g_getenv ("LANG");
23+ - if (!lang)
24+ - return NULL;
2225+ static const gchar *short_lang = NULL;
23- +
24- + if (short_lang)
25- + goto match;
26-
27- lang = g_getenv ("LANG");
28- if (!lang)
29- return NULL;
30-
31- + /* Convert to a short form language code */
32- + gchar *command = g_strconcat ("/usr/share/language-tools/language-validate ", lang, NULL);
33- + gchar *out;
34- + GError *error = NULL;
35- + if (g_spawn_command_line_sync (command, &out, NULL, NULL, &error))
26+ + if (!short_lang)
3627+ {
37- + short_lang = g_strdup (g_strchomp (out));
38- + g_free (out);
39- + g_free (command);
40- + }
41- + else
42- + {
43- + g_warning ("Failed to run '%s': %s", command, error->message);
44- + g_error_free (error);
45- + g_free (command);
46- + return NULL;
47- + }
48- +
49- + match:
28+ + const gchar *lang = g_getenv ("LANG");
29+ + if (!lang)
30+ + return NULL;
5031+
51- for (link = lightdm_get_languages (); link; link = link->next)
32+ + /* Convert to a short form language code */
33+ + g_autofree gchar *command = g_strconcat ("/usr/share/language-tools/language-validate ", lang, NULL);
34+ + g_autofree gchar *out = NULL;
35+ + g_autoptr(GError) error = NULL;
36+ + if (g_spawn_command_line_sync (command, &out, NULL, NULL, &error))
37+ + short_lang = g_strdup (g_strchomp (out));
38+ + else
39+ + {
40+ + g_warning ("Failed to run '%s': %s", command, error->message);
41+ + return NULL;
42+ + }
43+ + }
44+
45+ for (GList *link = lightdm_get_languages (); link; link = link->next)
5246 {
5347 LightDMLanguage *language = link->data;
5448- if (lightdm_language_matches (language, lang))
@@ -75,7 +69,7 @@ Index: lightdm/src/seat.c
7569===================================================================
7670--- lightdm.orig/src/seat.c
7771+++ lightdm/src/seat.c
78- @@ -1008 ,7 +1008 ,7 @@ configure_session (Session *session, Ses
72+ @@ -944 ,7 +944 ,7 @@ configure_session (Session *session, Ses
7973 }
8074 if (language && language[0] != '\0')
8175 {
0 commit comments