diff --git includes/theme.inc includes/theme.inc
index fcb9ebf..b89c0eb 100644
--- includes/theme.inc
+++ includes/theme.inc
@@ -1259,7 +1259,7 @@ function theme_enable($theme_list) {
   // Notify locale module about new themes being enabled, so translations can
   // be imported. This might start a batch, and only return to the redirect
   // path after that.
-  module_invoke('locale', 'system_update', $theme_list);
+  module_invoke('locale', 'system_update', $theme_list, 'themes');
 
   // Invoke hook_themes_enabled after the themes have been enabled.
   module_invoke_all('themes_enabled', $theme_list);
diff --git modules/locale/locale.module modules/locale/locale.module
index 696e0af..97890bf 100644
--- modules/locale/locale.module
+++ modules/locale/locale.module
@@ -781,11 +781,20 @@ function locale_language_list($field = 'name', $all = FALSE) {
  * @param $components
  *   An array of component (theme and/or module) names to import
  *   translations for.
+ * @param $components_type
+ *   String defining which type of components are translated.
+ *   (Modules or themes)
  */
-function locale_system_update($components) {
+function locale_system_update($components, $components_type = 'modules') {
   include_once DRUPAL_ROOT . '/includes/locale.inc';
   if ($batch = locale_batch_by_component($components)) {
     batch_set($batch);
+
+    // If a theme is enabled we need to run batch_process() because it's not
+    // submitted by a form_submit() callback. See @batch_set.
+    if ($components_type == 'themes') {
+      batch_process('admin/appearance');
+    }
   }
 }
 
