? quicktabs_i18n_2.patch
Index: quicktabs.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/quicktabs/quicktabs.module,v
retrieving revision 1.10.2.66
diff -u -p -r1.10.2.66 quicktabs.module
--- quicktabs.module	26 Sep 2009 01:38:32 -0000	1.10.2.66
+++ quicktabs.module	26 Sep 2009 10:23:31 -0000
@@ -311,7 +311,9 @@ function theme_quicktabs_tabs($quicktabs
     $class .= ($index == $tabs_count ? ' last': '');
     $attributes_li = drupal_attributes(array('class' => $class));
     $options = _quicktabs_construct_link_options($quicktabs, $i);
-    $output .= '<li'. $attributes_li .'>'. l($tab['title'], $_GET['q'], $options) .'</li>';
+    // Support for translatable tab titles with i18nstrings.module.
+    $title = function_exists('tt') ? tt("quicktabs:tab:{$quicktabs['qtid']}-$i:title", $tab['title']) : $tab['title'];
+    $output .= '<li'. $attributes_li .'>'. l($title, $_GET['q'], $options) .'</li>';
     $index++;
   }
   $output .= '</ul>';
@@ -525,6 +527,35 @@ function quicktabs_render_tabpage($tab) 
 }
 
 /**
+ * Implementation of hook_locale().
+ */
+function quicktabs_locale($op = 'groups', $group = NULL) {
+  switch ($op) {
+    case 'groups':
+      return array('quicktabs' => t('Quicktabs'));
+      
+    case 'refresh':
+      if ($group == 'quicktabs') {
+        return quicktabs_locale_refresh();
+      }
+  }
+}
+
+/**
+ * Refresh locale strings.
+ */
+function quicktabs_locale_refresh() {
+  $result = db_query('SELECT qtid FROM {quicktabs}');
+  while ($row = db_fetch_object($result)) {
+    $quicktabs = quicktabs_load($row->qtid);
+    foreach ($quicktabs['tabs'] AS $tabkey => $tab) {
+      tt("quicktabs:tab:{$quicktabs['qtid']}-$tabkey:title", $tab['title'], NULL, TRUE);
+      $i++;
+    }
+  }
+}
+
+/**
  * Helper function to determine active tab from the url.
  */
 function _quicktabs_get_active_tab($quicktabs) {
