[virt-tools-list] [libosinfo v6 2/4] Load localized values for entity params
Zeeshan Ali (Khattak)
zeeshanak at gnome.org
Mon Oct 29 14:43:53 UTC 2012
From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>
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 3642a61..ae90637 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -223,14 +223,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
More information about the virt-tools-list
mailing list