[virt-tools-list] [libosinfo 5/5] Load localized values for entity params

Christophe Fergeau cfergeau at redhat.com
Fri Oct 19 08:22:20 UTC 2012


On Fri, Oct 19, 2012 at 06:50:00AM +0300, Zeeshan Ali (Khattak) wrote:
> 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 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 at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/virt-tools-list/attachments/20121019/752963d4/attachment.sig>


More information about the virt-tools-list mailing list