diff -Naur glib-2.8.3--old/glib/gkeyfile.c glib-2.8.3/glib/gkeyfile.c --- glib-2.8.3--old/glib/gkeyfile.c 2005-09-14 20:13:46.000000000 +0200 +++ glib-2.8.3/glib/gkeyfile.c 2005-11-05 22:24:28.000000000 +0100 @@ -21,6 +21,9 @@ * Boston, MA 02111-1307, USA. */ +#define X_GETTEXT_DOMAIN "X-Gettext-Domain" +#define X_DESKTOP_ENTRY "Desktop Entry" + #include "config.h" #include "gkeyfile.h" @@ -80,6 +83,7 @@ gchar list_separator; GKeyFileFlags flags; + char *gettext_domain; }; typedef struct _GKeyFileKeyValuePair GKeyFileKeyValuePair; @@ -203,6 +207,7 @@ key_file->approximate_size = 0; key_file->list_separator = ';'; key_file->flags = 0; + key_file->gettext_domain = NULL; } static void @@ -212,6 +217,7 @@ if (key_file->parse_buffer) g_string_free (key_file->parse_buffer, TRUE); + g_free(key_file->gettext_domain); tmp = key_file->groups; while (tmp != NULL) @@ -221,6 +227,7 @@ g_key_file_remove_group_node (key_file, group_node); } + g_assert (key_file->groups == NULL); } @@ -429,6 +436,8 @@ return FALSE; } + key_file->gettext_domain = g_key_file_get_string (key_file, X_DESKTOP_ENTRY, X_GETTEXT_DOMAIN, NULL); + return TRUE; } @@ -533,6 +542,8 @@ g_propagate_error (error, key_file_error); return FALSE; } + + key_file->gettext_domain = g_key_file_get_string (key_file, X_DESKTOP_ENTRY, X_GETTEXT_DOMAIN, NULL); return TRUE; } @@ -1581,6 +1592,22 @@ languages = (gchar **) g_get_language_names (); free_languages = FALSE; } + + if (key_file->gettext_domain) { + char *orig_value = g_key_file_get_string (key_file, group_name, key, NULL); + if (orig_value) { + /* fprintf (stderr, "Resolved: '%s'='%s'\n", key, orig_value); */ + translated_value = dgettext (key_file->gettext_domain, orig_value); + /* fprintf (stderr, "Translated: '%s' -(via %s)- '%s'\n", orig_value, key_file->gettext_domain, translated_value); */ + g_free (orig_value); + if (translated_value != orig_value) { + translated_value = g_strdup(translated_value); + goto done; + } else { + translated_value = NULL; + } + } + } for (i = 0; languages[i]; i++) { @@ -1609,6 +1636,8 @@ g_propagate_error (error, key_file_error); } +done: + if (free_languages) g_strfreev (languages);