e1ea6b9
--- gdm/gui/simple-greeter/gdm-languages.c	(revision 6468)
e1ea6b9
+++ gdm/gui/simple-greeter/gdm-languages.c	(working copy)
e1ea6b9
@@ -216,6 +216,25 @@ construct_language_name (const char *lan
e1ea6b9
         return name;
e1ea6b9
 }
e1ea6b9
 
e1ea6b9
+static void
e1ea6b9
+make_codeset_canonical_for_locale (const       *name,
e1ea6b9
+                                   const char **codeset)
e1ea6b9
+{
e1ea6b9
+        char *old_locale;
e1ea6b9
+        char *canonical_codeset;
e1ea6b9
+
e1ea6b9
+        old_locale = setlocale (LC_CTYPE, name);
e1ea6b9
+
e1ea6b9
+        if (old_locale == NULL) {
e1ea6b9
+                return;
e1ea6b9
+        }
e1ea6b9
+
e1ea6b9
+        g_free (*codeset);
e1ea6b9
+        *codeset = g_strdup (nl_langinfo (CODESET));
e1ea6b9
+
e1ea6b9
+        setlocale (LC_CTYPE, old_locale);
e1ea6b9
+}
e1ea6b9
+
e1ea6b9
 char *
e1ea6b9
 gdm_normalize_language_name (const char *name)
e1ea6b9
 {
e1ea6b9
@@ -234,6 +253,10 @@ gdm_normalize_language_name (const char 
e1ea6b9
                                  &territory_code,
e1ea6b9
                                  &codeset, &modifier);
e1ea6b9
 
e1ea6b9
+        if (codeset != NULL) {
e1ea6b9
+                make_codeset_canonical_for_locale (name, &codeset);
e1ea6b9
+        }
e1ea6b9
+
e1ea6b9
         normalized_name = construct_language_name (language_code,
e1ea6b9
                                                    territory_code,
e1ea6b9
                                                    codeset, modifier);