Index: modules/translation/translation.api.php
===================================================================
RCS file: modules/translation/translation.api.php
diff -N modules/translation/translation.api.php
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/translation/translation.api.php	30 Jan 2009 14:28:36 -0000
@@ -0,0 +1,26 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ *   Hooks provided by translation module.
+ */
+
+/**
+ * @addtogroup hooks
+ * @{
+ */
+
+/**
+ * Act on nodes within translation sets.
+ *
+ * During hook_nodeapi_load() translated nodes are passed into this function
+ * along with their shared tnids. This allows for data to be shared across
+ * translation set to be loaded into each node conveniently.
+ */
+function hook_nodeapi_translation_set_load($nodes, $tnids) {
+  $data = db_query('SELECT * FROM {my_table} WHERE tnid IN (:tnids)', array(':tnids' => $tnids))->fetchAllAssoc('tnid');
+  foreach ($nodes as $node) {
+    $node->my_module = $data[$node->tnid];
+  }
+}
Index: modules/translation/translation.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/translation/translation.module,v
retrieving revision 1.38
diff -u -p -r1.38 translation.module
--- modules/translation/translation.module	22 Jan 2009 03:11:54 -0000	1.38
+++ modules/translation/translation.module	30 Jan 2009 14:28:36 -0000
@@ -162,6 +162,23 @@ function translation_form_alter(&$form, 
 }
 
 /**
+ * Implementation of hook_nodeapi_load().
+ *
+ * Allow modules to act on translation sets of nodes, for example exposing.
+ * shared fields.
+ */
+function translation_nodeapi_load($nodes, $types) {
+  $tnids = array();
+  foreach ($nodes as $node) {
+    if ($node->tnid) {
+      $tnids[$node->tnid] = $node->tnid;
+    }
+  }
+  module_invoke_all('translation_set_load', $nodes, $tnids);
+}
+
+
+/**
  * Implementation of hook_nodeapi_view().
  *
  * Display translation links with native language names, if this node
