diff -upr live_translation.admin.inc live_translation.admin.inc
--- live_translation.admin.inc	2011-01-13 12:38:35.000000000 +0200
+++ live_translation.admin.inc	2011-01-21 10:50:38.387012003 +0200
@@ -14,39 +14,18 @@ module_load_include('inc', 'live_transla
  *   HMTL. The list of module and in which language they have updated strings.
  */
 function _live_translation_report() {
+  module_load_include('update.inc', 'live_translation');
+
   if (arg(3) == 'update') {
-    module_load_include('update.inc', 'live_translation');
     _live_translation_update();
   }
   elseif (arg(3) == 'import' and arg(4) and arg(5)) {
-    module_load_include('update.inc', 'live_translation');
     _live_translation_import(arg(4), arg(5));
   }
-
-  module_load_include('inc', 'update', 'update.compare');
-  $modules        = update_get_projects();
-  $languages      = language_list('enabled');
-  $status         = _live_translation_status();
-  $import_status  = variable_get('live_translation_import_status', array());
-  $import_time    = variable_get('live_translation_import_time', array());
-  $untranslated   = variable_get('live_translation_update_untranslated', array());
-  $data           = array();
-
-  foreach ($languages[1] as $langcode => $language) {
-    if ($langcode == 'en') {
-      continue;
-    }
-    foreach ($modules as $mod => $module) {
-      $data[$langcode][$mod] = array(
-        'name'    => $module['info']['project'],
-        'lang'    => $language->native,
-        'status'  => $status[$langcode][$mod],
-        'strings' => isset($import_status[$langcode][$mod]) ? $import_status[$langcode][$mod] : 0,
-        'time'    => isset($import_time[$langcode][$mod]) ? $import_time[$langcode][$mod] : 0,
-        'un'      => isset($untranslated[$langcode][$mod]) ? $untranslated[$langcode][$mod] : '-',
-      );
-    }
+  elseif (arg(3) == 'update_all') {
+    live_translation_update_all();
   }
+  $data = _live_translation_get_status();
 
   return empty($data) ? t('There is no language enabled (besides English)') : theme('live_translation_report', $data);
 }
@@ -85,6 +64,7 @@ function _live_translation_settings() {
  */
 function theme_live_translation_report($data) {
   $output = l(t('Check the updates now.'), 'admin/reports/live-translation/update');
+  $output.= '&nbsp;&nbsp;&nbsp;'.l(t('Update all.'), 'admin/reports/live-translation/update_all');
 
   $statuses = array(
     LIVE_TRANSLATION_STATUS_UNKNOWN => array('name' => t('Unknown'),                                  'class' => 'warning'),
@@ -132,4 +112,4 @@ function theme_live_translation_report($
   drupal_add_css(drupal_get_path('module', 'update') .'/update.css');
 
   return $output;
-}
\ В конце файла нет новой строки
+}
diff -upr live_translation.module live_translation.module
--- live_translation.module	2011-01-13 10:10:13.000000000 +0200
+++ live_translation.module	2011-01-21 10:38:32.880345333 +0200
@@ -94,3 +94,66 @@ function live_translation_theme() {
     ),
   );
 }
+
+/**
+ * Updates all translations 
+ * 
+ */
+function live_translation_update_all() {
+	module_load_include('update.inc', 'live_translation');	
+  $data = _live_translation_get_status();
+  
+  // in next few lines we create operations array with modules, which need translation updates
+  foreach ($data as $langcode => $language) {
+    foreach ($language as $mod => $module) {
+      if ($module['status'] == LIVE_TRANSLATION_STATUS_OUTDATE) {
+        $operations[] = array(
+          'live_translation_import_batch',
+          array($mod, $langcode)
+        );
+      }
+    }
+  }
+  $batch = array(
+    'operations' => $operations,
+    'finished' => 'live_translation_update_all_finished',
+    'title' => t('Importing module translations'),
+    'init_message' => t('Translations import starts'),
+    'progress_message' => t('Imported @current of @total'),
+    'error_message' => t('The importation process is beginning')
+  );
+
+  batch_set($batch);
+  batch_process('admin/reports/live-translation');
+}
+
+/**
+ * Run translation import for module
+ * @param $mod - module name
+ * @param $langcode - language code (for example: ru)
+ * @param $context 
+ * @return unknown_type
+ */
+function live_translation_import_batch ($mod, $langcode, &$context) {
+  module_load_include('update.inc', 'live_translation');
+  _live_translation_import($mod, $langcode, 1);
+  $context['finished'] = 1;
+}
+
+/**
+ * Runs when update all operation finished
+ * @return unknown_type
+ */
+function live_translation_update_all_finished($success, $results, $operations) {
+  if ($success) {
+    drupal_set_message(t('Translation import complete'));
+  }
+  else {
+    $error_operation = reset($operations);
+    $operation = array_shift($error_operation);
+    $arguments = array_shift($error_operation);
+    $arguments_as_string = implode(', ', $arguments);
+    watchdog('live_translation', "Error when callinh operation '%s'('%s')", array($operation, $arguments_as_string));
+    drupal_set_message(t('An error occurred and has been recorded in the system log'), 'error');
+  }
+}
diff -upr live_translation.update.inc live_translation.update.inc
--- live_translation.update.inc	2011-01-13 11:10:51.000000000 +0200
+++ live_translation.update.inc	2011-01-21 10:42:14.743678667 +0200
@@ -15,7 +15,7 @@ module_load_include('inc', 'live_transla
  * @param $lancode
  *   String. The language code.
  */
-function _live_translation_import($module, $langcode) {
+function _live_translation_import($module, $langcode, $batch = false) {
   module_load_include('inc', 'update', 'update.compare');
   $modules        = update_get_projects();
   $languages      = language_list('enabled');
@@ -105,7 +105,9 @@ function _live_translation_import($modul
   }
 
   // Go to the report page
-  drupal_goto('admin/reports/live-translation');
+  if (!$batch) {
+    drupal_goto('admin/reports/live-translation');
+  }
 }
 
 /**
@@ -177,10 +179,37 @@ function _live_translation_update($retur
     return;
   }
   drupal_goto('admin/reports/live-translation');
+}
 
-  // Go to the report page
-  if ($return) {
-    return;
+/**
+ * Get all modules statuses
+ * 
+ * @return array
+ */
+function _live_translation_get_status() {
+  module_load_include('inc', 'update', 'update.compare');
+  $modules        = update_get_projects();
+  $languages      = language_list('enabled');
+  $status         = _live_translation_status();
+  $import_status  = variable_get('live_translation_import_status', array());
+  $import_time    = variable_get('live_translation_import_time', array());
+  $untranslated   = variable_get('live_translation_update_untranslated', array());
+  $data           = array();
+
+  foreach ($languages[1] as $langcode => $language) {
+    if ($langcode == 'en') {
+      continue;
+    }
+    foreach ($modules as $mod => $module) {
+      $data[$langcode][$mod] = array(
+        'name'    => $module['info']['project'],
+        'lang'    => $language->native,
+        'status'  => $status[$langcode][$mod],
+        'strings' => isset($import_status[$langcode][$mod]) ? $import_status[$langcode][$mod] : 0,
+        'time'    => isset($import_time[$langcode][$mod]) ? $import_time[$langcode][$mod] : 0,
+        'un'      => isset($untranslated[$langcode][$mod]) ? $untranslated[$langcode][$mod] : '-',
+      );
+    }
   }
-  drupal_goto('admin/reports/live-translation');
+  return $data;
 }
