aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-04-06 15:57:17 -0500
committerTed Gould <ted@gould.cx>2010-04-06 15:57:17 -0500
commit8e19cd3881b9fb3df540ff0ac3b9e297dddd70be (patch)
tree4dbc27544b7f14b1aea711ae8ebb977516743a77
parent999f1483f967db63d71ff2a9453b5866eec339bf (diff)
parent22de79822416a3396e0087003acaa8f730122305 (diff)
downloadlibayatana-indicator-8e19cd3881b9fb3df540ff0ac3b9e297dddd70be.tar.gz
libayatana-indicator-8e19cd3881b9fb3df540ff0ac3b9e297dddd70be.tar.bz2
libayatana-indicator-8e19cd3881b9fb3df540ff0ac3b9e297dddd70be.zip
Translating the shortcuts of the actions based on the desktop file translation domains.
-rw-r--r--libindicator/indicator-desktop-shortcuts.c51
1 files changed, 45 insertions, 6 deletions
diff --git a/libindicator/indicator-desktop-shortcuts.c b/libindicator/indicator-desktop-shortcuts.c
index e86a6ab..b04b482 100644
--- a/libindicator/indicator-desktop-shortcuts.c
+++ b/libindicator/indicator-desktop-shortcuts.c
@@ -39,6 +39,7 @@ struct _IndicatorDesktopShortcutsPrivate {
GKeyFile * keyfile;
gchar * identity;
GArray * nicks;
+ gchar * domain;
};
enum {
@@ -100,6 +101,7 @@ indicator_desktop_shortcuts_init (IndicatorDesktopShortcuts *self)
priv->keyfile = NULL;
priv->identity = NULL;
+ priv->domain = NULL;
priv->nicks = g_array_new(TRUE, TRUE, sizeof(gchar *));
return;
@@ -131,6 +133,11 @@ indicator_desktop_shortcuts_finalize (GObject *object)
priv->identity = NULL;
}
+ if (priv->domain != NULL) {
+ g_free(priv->domain);
+ priv->domain = NULL;
+ }
+
if (priv->nicks != NULL) {
gint i;
for (i = 0; i < priv->nicks->len; i++) {
@@ -227,6 +234,25 @@ parse_keyfile (IndicatorDesktopShortcuts * ids)
return;
}
+ /* Remove a previous translation domain if we had one
+ from a previously parsed file. */
+ if (priv->domain != NULL) {
+ g_free(priv->domain);
+ priv->domain = NULL;
+ }
+
+ /* Check to see if there is a custom translation domain that
+ we should take into account. */
+ if (priv->domain == NULL &&
+ g_key_file_has_key(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, "X-GNOME-Gettext-Domain", NULL)) {
+ priv->domain = g_key_file_get_string(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, "X-GNOME-Gettext-Domain", NULL);
+ }
+
+ if (priv->domain == NULL &&
+ g_key_file_has_key(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, "X-Ubuntu-Gettext-Domain", NULL)) {
+ priv->domain = g_key_file_get_string(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, "X-Ubuntu-Gettext-Domain", NULL);
+ }
+
/* Okay, we've got everything we need. Let's get it on! */
gint i;
gsize num_nicks = 0;
@@ -411,14 +437,27 @@ indicator_desktop_shortcuts_nick_get_name (IndicatorDesktopShortcuts * ids, cons
return NULL;
}
- gchar * name = g_key_file_get_locale_string(priv->keyfile,
- groupheader,
- G_KEY_FILE_DESKTOP_KEY_NAME,
- NULL,
- NULL);
-
+ gchar * name = NULL;
+ gchar * keyvalue = g_key_file_get_string(priv->keyfile,
+ groupheader,
+ G_KEY_FILE_DESKTOP_KEY_NAME,
+ NULL);
+ gchar * localeval = g_key_file_get_locale_string(priv->keyfile,
+ groupheader,
+ G_KEY_FILE_DESKTOP_KEY_NAME,
+ NULL,
+ NULL);
g_free(groupheader);
+ if (priv->domain != NULL && g_strcmp0(keyvalue, localeval) == 0) {
+ name = g_strdup(g_dgettext(priv->domain, keyvalue));
+ g_free(localeval);
+ } else {
+ name = localeval;
+ }
+
+ g_free(keyvalue);
+
return name;
}