From 093e0a549c2ab2e465494105126ea7046f26e047 Mon Sep 17 00:00:00 2001 From: Rui Matos Date: Mon, 20 Jan 2014 22:38:10 +0100 Subject: languages: Use a more broadly compatible locale codeset suffix At least OpenBSD's libc doesn't accept 'utf8' as a locale codeset suffix but does accept 'UTF-8'. Since GNU libc accepts both suffixes let's use the one which works on a broader set of systems. Thanks to Stefan Sperling and Antoine Jacoutot. https://bugzilla.gnome.org/show_bug.cgi?id=710412 --- libgnome-desktop/gnome-languages.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/libgnome-desktop/gnome-languages.c b/libgnome-desktop/gnome-languages.c index 6a18ebae..5e9a2f30 100644 --- a/libgnome-desktop/gnome-languages.c +++ b/libgnome-desktop/gnome-languages.c @@ -88,27 +88,14 @@ gnome_locale_free (GnomeLocale *locale) static char * normalize_codeset (const char *codeset) { - char *normalized_codeset; - const char *p; - char *q; - - normalized_codeset = g_strdup (codeset); - - if (codeset != NULL) { - for (p = codeset, q = normalized_codeset; - *p != '\0'; p++) { - - if (*p == '-' || *p == '_') { - continue; - } + if (codeset == NULL) + return NULL; - *q = g_ascii_tolower (*p); - q++; - } - *q = '\0'; - } + if (g_str_equal (codeset, "UTF-8") || + g_str_equal (codeset, "utf8")) + return g_strdup ("UTF-8"); - return normalized_codeset; + return g_strdup (codeset); } /** @@ -340,7 +327,7 @@ language_name_get_codeset_details (const char *language_name, if (is_utf8 != NULL) { codeset = normalize_codeset (codeset); - *is_utf8 = strcmp (codeset, "utf8") == 0; + *is_utf8 = strcmp (codeset, "UTF-8") == 0; g_free (codeset); } @@ -411,7 +398,15 @@ add_locale (const char *language_name, if (is_utf8) { name = g_strdup (language_name); } else if (utf8_only) { - name = g_strdup_printf ("%s.utf8", language_name); + + if (strchr (language_name, '.')) + return FALSE; + + /* If the locale name has no dot, assume that its + * encoding part is missing and try again after adding + * ".UTF-8". This catches locale names like "de_DE". + */ + name = g_strdup_printf ("%s.UTF-8", language_name); language_name_get_codeset_details (name, NULL, &is_utf8); if (!is_utf8) { -- cgit v1.2.1