--- gst-plugins-base-0.10.10/gst-libs/gst/interfaces/mixertrack.h.orig	2006-11-06 17:35:58.000000000 +0900
+++ gst-plugins-base-0.10.10/gst-libs/gst/interfaces/mixertrack.h	2007-02-28 11:23:54.896295000 +0900
@@ -96,6 +96,9 @@ struct _GstMixerTrackClass {
 };
 
 GType           gst_mixer_track_get_type        (void);
+void            gst_mixer_track_set_untranslated_label (GstMixerTrack *channel,
+                                                        const gchar   *label);
+const gchar *   gst_mixer_track_get_untranslated_label (GstMixerTrack *channel);
 
 G_END_DECLS
 
--- gst-plugins-base-0.10.10/gst-libs/gst/interfaces/mixertrack.c.orig	2007-02-27 17:41:15.465391000 +0900
+++ gst-plugins-base-0.10.10/gst-libs/gst/interfaces/mixertrack.c	2007-02-28 11:22:31.284690000 +0900
@@ -25,6 +25,14 @@
 
 #include "mixertrack.h"
 
+typedef struct _GstMixerTrackUIData GstMixerTrackUIData;
+struct _GstMixerTrackUIData
+{
+  gchar *en_label;
+  gchar *l10n_label;
+  struct _GstMixerTrackUIData *next;
+};
+
 enum
 {
   /* FILL ME */
@@ -51,6 +59,7 @@ static void gst_mixer_track_dispose (GOb
 static void gst_mixer_track_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
+static GstMixerTrackUIData *uidata = NULL;
 static GObjectClass *parent_class = NULL;
 static guint signals[LAST_SIGNAL] = { 0 };
 
@@ -191,3 +200,50 @@ gst_mixer_track_dispose (GObject * objec
   if (parent_class->dispose)
     parent_class->dispose (object);
 }
+
+void
+gst_mixer_track_set_untranslated_label (GstMixerTrack * channel, const gchar * label)
+{
+  GstMixerTrackUIData *p, *prev;
+
+  g_return_if_fail (channel != NULL);
+  g_return_if_fail (channel->label != NULL);
+  g_return_if_fail (label != NULL);
+
+  for (prev = p = uidata; p; p = p->next) {
+    if (!g_utf8_collate (p->l10n_label, channel->label)) {
+      g_free (p->en_label);
+      p->en_label = g_strdup (label);
+      return;
+    }
+    prev = p;
+  }
+
+  if (uidata) {
+    prev->next = g_new0 (GstMixerTrackUIData, 1);
+    p = prev->next;
+  } else {
+    uidata = g_new0 (GstMixerTrackUIData, 1);
+    p = uidata;
+  }
+  p->en_label = g_strdup (label);
+  p->l10n_label = g_strdup (channel->label);
+}
+
+const gchar *
+gst_mixer_track_get_untranslated_label (GstMixerTrack * channel)
+{
+  GstMixerTrackUIData *p;
+
+  g_return_val_if_fail (channel != NULL, NULL);
+  g_return_val_if_fail (channel->label != NULL, NULL);
+
+  for (p = uidata; p; p = p->next) {
+    if (!g_utf8_collate (p->l10n_label, channel->label)) {
+      return p->en_label;
+    }
+  }
+
+  return NULL;
+}
+
--- gst-plugins-good-0.10.4/sys/sunaudio/gstsunaudio.c.orig	2006-11-06 17:05:42.000000000 +0900
+++ gst-plugins-good-0.10.4/sys/sunaudio/gstsunaudio.c	2007-02-27 22:49:58.592894000 +0900
@@ -49,6 +49,7 @@ plugin_init (GstPlugin * plugin)
 #ifdef ENABLE_NLS
   setlocale (LC_ALL, "");
   bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
 #endif /* ENABLE_NLS */
 
   return TRUE;
--- gst-plugins-good-0.10.4/sys/sunaudio/gstsunaudiomixertrack.c.orig	2006-11-06 17:08:07.000000000 +0900
+++ gst-plugins-good-0.10.4/sys/sunaudio/gstsunaudiomixertrack.c	2007-02-28 11:29:06.940245000 +0900
@@ -98,11 +98,12 @@ gst_sunaudiomixer_track_new (GstSunAudio
 
   sunaudiotrack = g_object_new (GST_TYPE_SUNAUDIO_MIXER_TRACK, NULL);
   track = GST_MIXER_TRACK (sunaudiotrack);
-  track->label = g_strdup (labels[track_num]);
+  track->label = g_strdup (_(labels[track_num]));
   track->num_channels = max_chans;
   track->flags = flags;
   track->min_volume = 0;
   track->max_volume = 100;
+  gst_mixer_track_set_untranslated_label (track, labels[track_num]);
   sunaudiotrack->track_num = track_num;
   sunaudiotrack->gain = (0 & 0xff);
   sunaudiotrack->balance = AUDIO_MID_BALANCE;
--- gnome-media-2.16.1/gst-mixer/src/element.c.orig	2007-02-27 21:14:28.386614000 +0900
+++ gnome-media-2.16.1/gst-mixer/src/element.c	2007-02-28 11:33:31.963676000 +0900
@@ -148,7 +148,9 @@ gnome_volume_control_element_whitelist (
       continue;
 
     /* make case insensitive */
-    label_l = g_strdup (track->label);
+    label_l = gst_mixer_track_get_untranslated_label (track);
+    label_l = label_l ? g_strdup (label_l) : g_strdup (track->label);
+
     for (pos = 0; label_l[pos] != '\0'; pos++)
       label_l[pos] = g_ascii_tolower (label_l[pos]);
 
--- gnome-media-2.16.1/gst-mixer/src/preferences.c.orig	2006-11-06 17:53:23.000000000 +0900
+++ gnome-media-2.16.1/gst-mixer/src/preferences.c	2007-02-28 11:41:27.205396000 +0900
@@ -252,13 +252,18 @@ get_gconf_key (GstMixer *mixer, GstMixer
   const gchar *dev;
   gchar *res;
   gint i, pos;
-  gchar *label;
+  gchar *label = NULL;
 
   g_return_val_if_fail(mixer != NULL, NULL);
 
   dev = g_object_get_data (G_OBJECT (mixer),
 			   "gnome-volume-control-name");
-  label = track != NULL ? track->label : "";
+  if (track != NULL) {
+    label = gst_mixer_track_get_untranslated_label (track);
+    label = label ? label : track->label;
+  }
+  if (label == NULL)
+    label = "";
 
   pos = strlen (GNOME_VOLUME_CONTROL_KEY_DIR) + 1;
   res = g_new (gchar, pos + strlen (dev) + 1 + strlen (label) + 1);
--- gnome-media-2.16.1/gst-mixer/src/track.c.orig	2006-11-06 17:53:30.000000000 +0900
+++ gnome-media-2.16.1/gst-mixer/src/track.c	2007-02-28 11:43:13.888218000 +0900
@@ -425,9 +425,10 @@ gnome_volume_control_track_add_title (Gt
   /* image (optional) */
   for (i = 0; !found && pix[i].label != NULL; i++) {
     /* we dup the string to make the comparison case-insensitive */
-    gchar *label_l = g_strdup (track->label);
+    gchar *label_l = gst_mixer_track_get_untranslated_label (track);
     gint pos;
 
+    label_l = label_l ? g_strdup (label_l) : g_strdup (track->label);
     /* make case insensitive */
     for (pos = 0; label_l[pos] != '\0'; pos++)
       label_l[pos] = g_ascii_tolower (label_l[pos]);
@@ -460,7 +461,7 @@ gnome_volume_control_track_add_title (Gt
   if (or == GTK_ORIENTATION_HORIZONTAL)
     str = g_strdup_printf (_("%s:"), track->label);
   else
-    str = track->label;
+    str = g_strdup (track->label);
   ctrl->label = gtk_label_new (str);
   if (or == GTK_ORIENTATION_HORIZONTAL) {
     g_free (str);
