On Fri, Oct 19, 2012 at 06:50:00AM +0300, 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(-) > > 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 (); I don't think the format of values returned by g_get_language_names matches the format used by xml:lang. The former can be "en_US" while the latter apparently follows https://www.ietf.org/rfc/rfc4646.txt which says 'Subtags are distinguished and separated from one another by a hyphen ("-")' From a quick look in glib/gtk+ source, it seems that in gtkbuilder files and in gsettings schema files, attributes/tags have a special marker to tell they are translatable (trailing '_' or 'translatable = true' attribute iirc), and during parsing, the parser code calls into gettext to get the translated value (see glib/gio/gsettingsschema.c and gtk+/gtk/gtkbuilderparser.c and search for 'gettext'). The advantage of this approach is that we don't have to do the lookup ourselves to find the best translation. Dunno if there are downsides... Christophe > > /* 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 > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list
Attachment:
pgp8H7L0mEY9o.pgp
Description: PGP signature