Index: taxonomy_menu.database.inc
===================================================================
--- taxonomy_menu.database.inc	(revision 200)
+++ taxonomy_menu.database.inc	(working copy)
@@ -130,3 +130,13 @@
 function _taxonomy_menu_term_count($tid) {
   return db_result(db_query('SELECT COUNT(n.nid) AS c FROM {term_node} t INNER JOIN {node} n ON t.vid = n.vid WHERE n.status = 1 AND t.tid = %d', $tid));
 }
+
+/**
+ * Get tid for a given mlid
+ *
+ * @param $mlid
+ * @return $tid
+ */
+function _taxonomy_menu_get_tid($mlid) {
+  return db_result(db_query('SELECT tid FROM {taxonomy_menu} WHERE mlid = %d', $mlid));
+}
Index: taxonomy_menu.module
===================================================================
--- taxonomy_menu.module	(revision 200)
+++ taxonomy_menu.module	(working copy)
@@ -456,6 +456,11 @@
     $insert = FALSE;
   }
 
+//FIXME: i18nmenu need to be cleaned up to allow translation from other menu module
+  if (module_exists('i18nmenu')) {
+    $link['options']['alter'] = TRUE;
+  }
+
   //set the has_children property
   //if tid=0 then adding a vocab item and had children
   //if the term has any children then set it to true
@@ -608,6 +613,7 @@
       'vid' => $args['vid'],
       'ptid' => 0,
       'menu_name' => $args['menu_name'],
+      'language' => $vocab->language,
     );
 
     return $item;
@@ -641,6 +647,7 @@
     'vid' => $term->vid,
     'ptid' => $ptid,
     'menu_name' => $args['menu_name'],
+    'language' => $term->language,
   );
 
   if ($args['mlid']) {
@@ -830,3 +837,26 @@
 
   return $options;
 }
+
+
+/**
+ * Implementation of hook_translated_menu_link_alter().
+ *
+ * Translate menu links on the fly by using term translations.
+ *
+ */
+function taxonomy_menu_translated_menu_link_alter(&$item, $map) {
+  if (module_exists('i18ntaxonomy')) {
+    //in case of localized terms, use term translation for menu title
+    if ($item['module'] == 'taxonomy_menu') {
+      //TODO: check vocabulary translation mode before tryring to translate: but is this really usefull ? 
+      //  if (i18ntaxonomy_vocabulary($vid) == I18N_TAXONOMY_LOCALIZE) {
+      $term = taxonomy_get_term(_taxonomy_menu_get_tid($item['mlid']));
+      if ($item['title'] != $term->name) {
+        //DEBUG: should never appends ?
+        drupal_set_message('Menu and taxonomy name mismatch : ' . $item['title'] . '!=' . $term->name, 'error');
+      }
+      $item['title'] = tt('taxonomy:term:'. $term->tid .':name', $term->name);
+    }
+  }
+}
