Try harder to look up the right localization
authorMatthias Clasen <mclasen@redhat.com>
Thu, 28 Jun 2012 00:28:00 +0000 (20:28 -0400)
committerDavid Zeuthen <zeuthen@gmail.com>
Fri, 6 Jul 2012 13:47:10 +0000 (09:47 -0400)
The code for looking up localized strings for action descriptions
was manually trying to break locale names into pieces, but didn't
get it right for e.g. zh_CN.utf-8. Instead, use the GLib function
g_get_locale_variants(), which handles this (and more). This fixes
the translation problem reported in
https://bugzilla.gnome.org/show_bug.cgi?id=665497

Signed-off-by: David Zeuthen <zeuthen@gmail.com>
src/polkitbackend/polkitbackendactionpool.c

index e3ed38d..0af0010 100644 (file)
@@ -1108,7 +1108,7 @@ _localize (GHashTable *translations,
            const gchar *lang)
 {
   const gchar *result;
-  gchar lang2[256];
+  gchar **langs;
   guint n;
 
   if (lang == NULL)
@@ -1123,16 +1123,14 @@ _localize (GHashTable *translations,
     goto out;
 
   /* we could have a translation for 'da' but lang=='da_DK'; cut off the last part and try again */
-  strncpy (lang2, lang, sizeof (lang2));
-  for (n = 0; lang2[n] != '\0'; n++)
+  langs = g_get_locale_variants (lang);
+  for (n = 0; langs[n] != NULL; n++)
     {
-      if (lang2[n] == '_')
-        {
-          lang2[n] = '\0';
-          break;
-        }
+      result = (const char *) g_hash_table_lookup (translations, (void *) langs[n]);
+      if (result != NULL)
+        break;
     }
-  result = (const char *) g_hash_table_lookup (translations, (void *) lang2);
+  g_strfreev (langs);
   if (result != NULL)
     goto out;