summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Matos <tiagomatos@gmail.com>2014-01-20 22:38:10 +0100
committerRui Matos <tiagomatos@gmail.com>2014-10-29 13:48:56 +0100
commit093e0a549c2ab2e465494105126ea7046f26e047 (patch)
treec3f02020b68eaa596c127d85e1b0fd18c30b56f9
parentfce0b632c32d7ec1b1c052a6e0ffcefc1b133126 (diff)
downloadgnome-desktop-093e0a549c2ab2e465494105126ea7046f26e047.tar.gz
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
-rw-r--r--libgnome-desktop/gnome-languages.c37
1 files 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) {