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 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