[libosinfo 5/5] Load localized values for entity params

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: "Zeeshan Ali (Khattak)" <zeeshanak@xxxxxxxxx>

Attempt to use the localized values of entity params if available before
using the non-localized values.

This does not yet include custom (ones starting with 'x-') params as I
haven't yet figured the right xpath magic to (cleanly) achieve that.
Suggestions welcome!
---
 osinfo/osinfo_loader.c | 33 +++++++++++++++++++++++++++------
 1 file changed, 27 insertions(+), 6 deletions(-)

diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index 934c758..7569262 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -219,14 +219,35 @@ static void osinfo_loader_entity(OsinfoLoader *loader,
                                  GError **err)
 {
     int i = 0;
+    const gchar * const *langs = g_get_language_names ();
 
     /* Standard well-known keys first, allow single value only */
-    for (i = 0 ; keys[i] != NULL ; i++) {
-        gchar *xpath = g_strdup_printf("string(./%s)", keys[i]);
-        gchar *value = osinfo_loader_string(xpath, ctxt, err);
-        g_free(xpath);
-        if (error_is_set(err))
-            return;
+    for (i = 0 ; keys[i] != NULL; i++) {
+        gchar *value = NULL;
+        gchar *xpath;
+        int j;
+
+        /* We are guaranteed to have at least the default "C" locale and we
+         * want to ignore that, hence the NULL check on index 'j + 1'.
+         */
+        for (j = 0; langs[j + 1] != NULL; j++) {
+            xpath = g_strdup_printf("string(./%s[lang('%s')])", keys[i], langs[j]);
+            value = osinfo_loader_string(xpath, ctxt, err);
+            g_free(xpath);
+            if (error_is_set(err))
+                return;
+
+            if (value != NULL)
+                break;
+        }
+
+        if (value == NULL) {
+            xpath = g_strdup_printf("string(./%s)", keys[i]);
+            value = osinfo_loader_string(xpath, ctxt, err);
+            g_free(xpath);
+            if (error_is_set(err))
+                return;
+        }
 
         if (value) {
             osinfo_entity_set_param(entity, keys[i], value);
-- 
1.7.12.1


[Index of Archives]     [Linux Virtualization]     [KVM Development]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux