Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37850351
en ru br
ALT Linux repos
S:1.32.0-alt4

Group :: Graphical desktop/Other
RPM: lightdm

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: lightdm-1.32.0-alt-i18n.patch
Download


 src/session-child.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/src/session-child.c b/src/session-child.c
index b6752f21..ec5638ef 100644
--- a/src/session-child.c
+++ b/src/session-child.c
@@ -240,6 +240,8 @@ audit_event (int type, const gchar *username, uid_t uid, const gchar *remote_hos
 }
 #endif
 
+#define ALT_I18N_FILE "/etc/sysconfig/i18n"
+
 static void
 apply_locale (const gchar *locale, GError **error)
 {
@@ -274,12 +276,39 @@ apply_locale (const gchar *locale, GError **error)
 }
 
 static void
-set_locale (const gchar *language, GError **error)
+read_set_locale (const gchar *language, GError **error)
 {
     if (language && strlen (language) > 0)
     {
         apply_locale (language, error);
+        return;
     }
+
+    g_autoptr(GFile) i18n = g_file_new_for_path (ALT_I18N_FILE);
+    g_autoptr(GFileInputStream) i18n_in = g_file_read (i18n, NULL, error);
+
+    if (!i18n_in)
+        return;
+
+    g_autoptr(GDataInputStream) i18n_din = g_data_input_stream_new (G_INPUT_STREAM (i18n_in));
+
+    const char *locale = NULL;
+    g_autofree char *ln = g_data_input_stream_read_line (i18n_din, NULL, NULL, error);
+    while (ln)
+    {
+        if (g_str_has_prefix (ln, "LANG="))
+        {
+            locale = ln + 5;
+            break;
+        }
+        g_free (ln);
+        ln = g_data_input_stream_read_line (i18n_din, NULL, NULL, error);
+    }
+
+    if (locale)
+        apply_locale (locale, error);
+
+    g_input_stream_close (G_INPUT_STREAM (i18n_in), NULL, NULL);
 }
 
 int
@@ -339,7 +368,7 @@ session_child_run (int argc, char **argv)
     g_autofree gchar *language = read_string ();
 
     g_autoptr(GError) locale_err = NULL;
-    set_locale (language, &locale_err);
+    read_set_locale (language, &locale_err);
     if (locale_err)
     {
         g_printerr ("Unable to read and set locale: %s", locale_err->message);
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin