On 29.10.2012 15:43, Zeeshan Ali (Khattak) wrote: > 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(-) ACK Michal > > 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); >