summaryrefslogtreecommitdiff
path: root/debian/patches/04_language_handling.patch
blob: 137e9fe320f11d8b2490953c04516a3e38b61c57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Description: Adjustments due to handling of languages
Forwarded: not-needed
Author: Gunnar Hjalmarsson <gunnarhj@ubuntu.com>

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
@@ -944,7 +944,7 @@ configure_session (Session *session, Ses
     }
     if (language && language[0] != '\0')
     {
-        session_set_env (session, "LANG", language);
+        session_set_env (session, "LANGUAGE", language);
         session_set_env (session, "GDM_LANG", language);
     }
 }