diff --git a/l10n_update.batch.inc b/l10n_update.batch.inc
index 19464d2..971f6c7 100644
--- a/l10n_update.batch.inc
+++ b/l10n_update.batch.inc
@@ -253,6 +253,14 @@ function _l10n_update_batch_finished($success, $results) {
             array('!log_messages' => l(t('Recent log messages'), 'admin/reports/dblog'))),
         'warning');
       }
+
+      // Clear cache and force refresh of JavaScript translations and rebuild
+      // the menu as strings may have changed.
+      foreach (array_keys($totals) as $langcode) {
+        _locale_invalidate_js($langcode);
+      }
+      cache_clear_all('locale:', 'cache', TRUE);
+      menu_rebuild();
     }
 
     // Error for failed imports.
diff --git a/l10n_update.locale.inc b/l10n_update.locale.inc
index 2a964d2..a47f4d8 100644
--- a/l10n_update.locale.inc
+++ b/l10n_update.locale.inc
@@ -46,13 +46,6 @@ function _l10n_update_locale_import_po($file, $langcode, $mode, $group = NULL) {
     drupal_set_message(t('The translation file %filename appears to have a missing or malformed header.', array('%filename' => $file->filename)), 'error');
   }
 
-  // Clear cache and force refresh of JavaScript translations.
-  _locale_invalidate_js($langcode);
-  cache_clear_all('locale:', 'cache', TRUE);
-
-  // Rebuild the menu, strings may have changed.
-  menu_rebuild();
-
   watchdog('locale', 'Imported %file into %locale: %number new strings added, %update updated and %delete removed.', array('%file' => $file->filename, '%locale' => $langcode, '%number' => $additions, '%update' => $updates, '%delete' => $deletes));
   if ($skips) {
     watchdog('locale', '@count disallowed HTML string(s) in %file', array('@count' => $skips, '%file' => $file->uri), WATCHDOG_WARNING);
