Index: translation.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/translation/translation.admin.inc,v
retrieving revision 1.6
diff -u -p -r1.6 translation.admin.inc
--- translation.admin.inc	19 Jan 2011 17:11:49 -0000	1.6
+++ translation.admin.inc	6 Feb 2011 00:18:01 -0000
@@ -298,6 +298,8 @@ function translation_edit_form($form, $f
     );
   }
 
+  $form['#validate'][] = 'translation_edit_validate';
+
   // URL alias widget.
   if (_translation_path_enabled($handler)) {
     $alias = db_select('url_alias')
@@ -338,6 +340,34 @@ function translation_edit_form($form, $f
 }
 
 /**
+ * Validation function for translation edit form.
+ */
+function translation_edit_validate($form, &$form_state) {
+  $values =& $form_state['values'];
+  $options = array('deleted' => NULL, 'field_name' => NULL);
+  $languages = array_keys(language_list());
+
+  // Determine the list of instances to iterate on.
+  list(, , $bundle) = entity_extract_ids($form['#entity_type'], $form['#entity']);
+  $instances = _field_invoke_get_instances($form['#entity_type'], $bundle, $options);
+  foreach ($instances as $instance) {
+    $field_name = $instance['field_name'];
+    $field = field_info_field($field_name);
+
+    foreach ($languages as $langcode) {
+      $items = isset($values[$field_name][$langcode]) ? $values[$field_name][$langcode] : array();
+      // Iterate through field values
+      foreach ($items as $key => $item) {
+        $vars = (is_array($item)) ? implode('', $item) : array();
+        if (empty($vars) || empty($item['value'])) {
+          unset($values[$field_name][$langcode][$key]);
+        }
+      }
+    }
+  }
+}
+
+/**
  * Helper callback: replace the source language with the given one.
  */
 function _translation_form_language(&$item, $key, $langcode) {
