PolicyKit: Branch 'master'

David Zeuthen david at kemper.freedesktop.org
Fri Jul 6 06:49:03 PDT 2012


 src/polkitbackend/polkitbackendactionpool.c |   16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

New commits:
commit facadfb5c8c52ba45fd20ffe3b6d3ddd4208a427
Author: Matthias Clasen <mclasen at redhat.com>
Date:   Wed Jun 27 20:28:00 2012 -0400

    Try harder to look up the right localization
    
    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 at gmail.com>

diff --git a/src/polkitbackend/polkitbackendactionpool.c b/src/polkitbackend/polkitbackendactionpool.c
index e3ed38d..0af0010 100644
--- a/src/polkitbackend/polkitbackendactionpool.c
+++ b/src/polkitbackend/polkitbackendactionpool.c
@@ -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;
 


More information about the hal-commit mailing list