Index: i18nsync/i18nsync.module
===================================================================
--- i18nsync/i18nsync.module	(revision 3280)
+++ i18nsync/i18nsync.module	(working copy)
@@ -393,7 +393,10 @@
       }
     }
   }
+  
+  module_invoke_all('i18nsyncapi', 'presave', $node, $translation);
   node_save($translation);
+  module_invoke_all('i18nsyncapi', 'update', $node, $translation);  
 }
 
 /**
Index: i18nsync/i18nsync.rules.inc
===================================================================
--- i18nsync/i18nsync.rules.inc	(revision 0)
+++ i18nsync/i18nsync.rules.inc	(revision 0)
@@ -0,0 +1,56 @@
+<?php
+// $Id$
+
+function i18nsync_i18nsyncapi($op, $node, $translation) {
+  // currently only rules integration, no trigger integration yet.
+  if (module_exists('rules')) {
+    switch ($op) {
+      case 'presave':
+        rules_invoke_event('i18nsync_presave', $node, $translation);
+        break;
+      case 'update':
+        rules_invoke_event('i18nsync_update', $node, $translation);
+        break;
+    }
+  }
+}
+
+function i18nsync_rules_event_info() {
+  $default = array(
+    'module' => 'i18nsync',
+    'redirect' => TRUE,
+  );
+  $events = array(
+    'i18nsync_presave' => $default + array(
+      'label' => t('Translation is going to be synchronized.'),
+      'arguments' => i18nsync_rules_events_node_arguments(t('saved content'), t("content's author"), TRUE),
+    ),
+    'i18nsync_update' => $default + array(
+      'label' => t('Translation has been synchronized.'),
+      'arguments' => i18nsync_rules_events_node_arguments(t('updated content'), t("content's author"), TRUE),
+    ),
+  );
+  return $events;
+}
+
+/**
+ * Returns some arguments suitable for using it with a node
+ */
+function i18nsync_rules_events_node_arguments() {
+  $args = array(
+    'node' => array(
+      'type' => 'node',
+      'label' => t('source content'),
+    ),
+    'translation' => array(
+      'type' => 'node',
+      'label' => t('translated content'),
+    ),
+    'author' => array(
+      'type' => 'user',
+      'label' => t("content's author"),
+      'handler' => 'rules_events_argument_node_author',
+    ),
+  );
+  return $args + rules_events_global_user_argument();
+}
