Index: biblio.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/biblio/biblio.admin.inc,v
retrieving revision 1.9.2.80
diff -u -F^function -r1.9.2.80 biblio.admin.inc
--- biblio.admin.inc	30 Sep 2009 15:48:25 -0000	1.9.2.80
+++ biblio.admin.inc	30 Sep 2009 22:14:50 -0000
@@ -824,6 +824,9 @@ function biblio_admin_types_edit_form_su
 
   // Clear the cached pages and menus:
   menu_rebuild();
+
+  // Refresh translatable field strings.
+  biblio_locale_refresh($tid);
 }
 
 function biblio_admin_type_mapper_page() {
Index: biblio.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/biblio/biblio.module,v
retrieving revision 1.123.2.146
diff -u -F^function -r1.123.2.146 biblio.module
--- biblio.module	30 Sep 2009 15:48:25 -0000	1.123.2.146
+++ biblio.module	30 Sep 2009 22:14:51 -0000
@@ -56,6 +56,56 @@ function _biblio_get_field_information($
   return $fields;
 }
 
+/**
+ * Translate field titles and hints through the interface translation system, if
+ * the i18nstrings module is enabled.
+ */
+function _biblio_localize_fields(&$fields) {
+  if (module_exists('i18nstrings')) {
+    foreach ($fields as $key => $row) {
+      $fields[$key]['title'] = tt("biblio:field:{$row['ftdid']}:title", $fields[$key]['title']);
+      $fields[$key]['hint'] = tt("biblio:field:{$row['ftdid']}:hint", $fields[$key]['hint']);
+    }
+  }
+}
+
+/**
+ * Implementation of hook_locale().
+ */
+function biblio_locale($op = 'groups', $group = NULL) {
+  switch ($op) {
+    case 'groups':
+      return array('biblio' => t('Biblio'));
+
+    case 'refresh':
+      if ($group == 'biblio') {
+        return biblio_locale_refresh();
+      }
+  }
+}
+
+/**
+ * Refresh all translatable field strings.
+ *
+ * @param integer $tid
+ *   Biblio publication type id whose field strings are to be refreshed. If not
+ *   specified, strings for all fields will be refreshed.
+ */
+function biblio_locale_refresh($tid = NULL) {
+  if (module_exists('i18nstrings')) {
+    if (isset($tid)) {
+      $result = db_query('SELECT d.* FROM {biblio_field_type} b INNER JOIN {biblio_field_type_data} d ON b.ftdid = d.ftdid WHERE tid = %d', $tid);
+    }
+    else {
+      $result = db_query('SELECT * FROM {biblio_field_type_data}');
+    }
+    while ($row = db_fetch_array($result)) {
+      tt("biblio:field:{$row['ftdid']}:title", $row['title'], NULL, TRUE);
+      tt("biblio:field:{$row['ftdid']}:hint", $row['hint'], NULL, TRUE);
+    }
+  }
+}
+
 function biblio_init() {
   global $user, $conf;
   drupal_add_css(drupal_get_path('module', 'biblio') .'/biblio.css');
@@ -1123,6 +1173,7 @@ function biblio_form($node, $form_state)
     while ($row = db_fetch_array($result)) {
       $fields[$row['name']] = $row;
     }
+    _biblio_localize_fields($fields);
     $form['other_fields'] = array(
       '#type' => 'fieldset',
       '#collapsible' => TRUE,
Index: biblio_theme.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/biblio/biblio_theme.inc,v
retrieving revision 1.8.2.87
diff -u -F^function -r1.8.2.87 biblio_theme.inc
--- biblio_theme.inc	30 Sep 2009 15:48:25 -0000	1.8.2.87
+++ biblio_theme.inc	30 Sep 2009 22:14:52 -0000
@@ -199,6 +199,7 @@ function theme_biblio_tabular($node, $ba
   $style_function = "biblio_style_$style_name"."_author_options";
   module_load_include('inc','biblio',"biblio_style_$style_name");
   $fields = _biblio_get_field_information($node->biblio_type, TRUE);
+  _biblio_localize_fields($fields);
   $rows[] = array(
     array('data' => t('Title'), 'class' => 'biblio-row-title'),
     array('data' => filter_xss($node->title, biblio_get_allowed_tags()))
