? nodereference-multilingual.diff
Index: content.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/content.module,v
retrieving revision 1.301.2.39
diff -u -p -r1.301.2.39 content.module
--- content.module	27 Aug 2008 21:27:43 -0000	1.301.2.39
+++ content.module	29 Aug 2008 23:10:17 -0000
@@ -387,6 +387,7 @@ function content_alter(&$node, $teaser =
  * Generate field render arrays.
  */
 function content_prepare_translation(&$node) {
+  _content_field_invoke('prepare translation', $node);
   $additions = _content_field_invoke_default('prepare translation', $node);
   $node = (object) array_merge((array) $node, $additions);
 }
Index: modules/nodereference/nodereference.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/modules/nodereference/nodereference.module,v
retrieving revision 1.138.2.28
diff -u -p -r1.138.2.28 nodereference.module
--- modules/nodereference/nodereference.module	29 Aug 2008 22:52:43 -0000	1.138.2.28
+++ modules/nodereference/nodereference.module	29 Aug 2008 23:10:19 -0000
@@ -166,6 +166,26 @@ function nodereference_field_settings($o
  */
 function nodereference_field($op, &$node, $field, &$items, $teaser, $page) {
   switch ($op) {
+    // When preparing a translation, load any translations of existing references.
+    case 'prepare translation':
+      $field_name = $field['field_name'];
+      if (isset($node->translation_source->$field_name) && is_array($node->translation_source->$field_name)) {
+        foreach ($node->translation_source->$field_name as $key => $reference) {
+          $reference_node = node_load($reference['nid']);
+          // Test if the referenced node type is translatable and, if so,
+          // load translations if the reference is not for the current language.
+          // We can assume the translation module is present because it invokes 'prepare translation'.
+          if (translation_supported_type($reference_node->type) && $reference_node->language != $node->language && $translations = translation_node_get_translations($reference_node->tnid)) {
+            // If there is a translation for the current language, use it.
+            if (isset($translations[$node->language])) {
+              $node->translation_source->{$field_name}[$key] = array(
+                'nid' => $translations[$node->language]->nid,
+              );
+            }
+          }
+        }
+      }
+      break;
     case 'validate':
       $refs = _nodereference_potential_references($field);
       foreach ($items as $delta => $item) {
@@ -845,4 +865,4 @@ function theme_nodereference_buttons($el
 
 function theme_nodereference_autocomplete($element) {
   return $element['#children'];
-}
\ No newline at end of file
+}
