diff --git a/capplets/default-applications/ChangeLog b/capplets/default-applications/ChangeLog index b5e25928b..cd59dd919 100644 --- a/capplets/default-applications/ChangeLog +++ b/capplets/default-applications/ChangeLog @@ -1,3 +1,8 @@ +2006-01-17 Luca Cavalli + + * gnome-da-xml.c: (gnome_da_xml_get_string): load translated XML + application description, if available. Closes bug #327221. + 2006-01-16 Rodrigo Moya * gnome-da-xml.c (gnome_da_xml_load_list): just read the file diff --git a/capplets/default-applications/gnome-da-xml.c b/capplets/default-applications/gnome-da-xml.c index 8d1491d45..c05bd4eb5 100644 --- a/capplets/default-applications/gnome-da-xml.c +++ b/capplets/default-applications/gnome-da-xml.c @@ -18,6 +18,8 @@ * */ +#include +#include #include #include "gnome-da-capplet.h" @@ -60,21 +62,45 @@ gnome_da_xml_get_bool (const xmlNode *parent, const gchar *val_name) static gchar* gnome_da_xml_get_string (const xmlNode *parent, const gchar *val_name) { + const gchar * const *sys_langs; + xmlChar *node_lang; xmlNode *element; gchar *ret_val = NULL; xmlChar *xml_val_name; gint len; + gint i; g_return_val_if_fail (parent != NULL, ret_val); g_return_val_if_fail (parent->children != NULL, ret_val); g_return_val_if_fail (val_name != NULL, ret_val); +#if GLIB_CHECK_VERSION (2, 6, 0) + sys_langs = g_get_language_names (); +#endif + xml_val_name = xmlCharStrdup (val_name); len = xmlStrlen (xml_val_name); for (element = parent->children; element != NULL; element = element->next) { - if (!xmlStrncmp (element->name, xml_val_name, len)) - ret_val = (gchar *) xmlNodeGetContent (element); + if (!xmlStrncmp (element->name, xml_val_name, len)) { + node_lang = xmlNodeGetLang (element); + + if (node_lang == NULL) { + ret_val = (gchar *) xmlNodeGetContent (element); + } + else { + for (i = 0; sys_langs[i] != NULL; i++) { + if (!strcmp (sys_langs[i], node_lang)) { + ret_val = (gchar *) xmlNodeGetContent (element); + /* since sys_langs is sorted from most desirable to + * least desirable, exit at first match + */ + break; + } + } + } + xmlFree (node_lang); + } } xmlFree (xml_val_name);