diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index f1e0be1..3bc3276 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -639,8 +639,9 @@ function install_tasks_to_perform($install_state) {
 function install_tasks($install_state) {
   // Determine whether a translation file must be imported during the
   // 'install_import_translations' task. Import when a non-English language is
-  // available and selected.
-  $needs_translations = count($install_state['translations']) > 1 && !empty($install_state['parameters']['langcode']) && $install_state['parameters']['langcode'] != 'en';
+  // available and selected. Also we will need translations even if the
+  // installer language is English but there are other languages on the system.
+  $needs_translations = (count($install_state['translations']) > 1 && !empty($install_state['parameters']['langcode']) && $install_state['parameters']['langcode'] != 'en') || \Drupal::languageManager()->isMultilingual();
   // Determine whether a translation file must be downloaded during the
   // 'install_download_translation' task. Download when a non-English language
   // is selected, but no translation is yet in the translations directory.
@@ -1222,7 +1223,7 @@ function install_select_language(&$install_state) {
 function install_download_translation(&$install_state) {
   // Check whether all conditions are met to download. Download the translation
   // if possible.
-  $requirements = install_check_translations($install_state);
+  $requirements = install_check_translations($install_state['parameters']['langcode'], $install_state['server_pattern']);
   if ($output = install_display_requirements($install_state, $requirements)) {
     return $output;
   }
@@ -1553,15 +1554,29 @@ function install_import_translations(&$install_state) {
   $language->set('default', TRUE);
   $language->save();
 
-  // If a non-English language was selected, remove English and import the
-  // translations.
+  // If a non-English language was selected, remove English.
   if ($langcode != 'en') {
     entity_delete_multiple('configurable_language', array('en'));
+  }
+
+  // If there is more than one language or the single one is not English, we
+  // should download/import translations.
+  $languages = \Drupal::languageManager()->getLanguages();
+  if (count($languages) > 1 || !isset($languages['en'])) {
+    foreach($languages as $langcode => $language) {
+      // The installer language was already downloaded. Check downloads for the
+      // other languages if any. Ignore any download errors here, since we
+      // are in the middle of an install process and there is no way back. We
+      // will not import what we cannot download.
+      if ($langcode != $install_state['parameters']['langcode']) {
+        install_check_translations($langcode, $install_state['server_pattern']);
+      }
+    }
 
-    // Set up a batch to import translations for the newly added language.
-    _install_prepare_import($langcode);
+    // Set up a batch to import translations.
+    _install_prepare_import(array_keys($languages), $install_state['server_pattern']);
     module_load_include('fetch.inc', 'locale');
-    if ($batch = locale_translation_batch_fetch_build(array(), array($langcode))) {
+    if ($batch = locale_translation_batch_fetch_build(array(), array_keys($languages))) {
       return $batch;
     }
   }
@@ -1570,37 +1585,42 @@ function install_import_translations(&$install_state) {
 /**
  * Tells the translation import process that Drupal core is installed.
  *
- * @param string $langcode
- *   Language code used for the translation.
+ * @param array $langcodes
+ *   Language codes used for the translations.
+ * @param string $server_pattern
+ *   Server access pattern (to replace language code, version number, etc. in).
  */
-function _install_prepare_import($langcode) {
+function _install_prepare_import($langcodes, $server_pattern) {
   $matches = array();
-  global $install_state;
 
-  // Get the translation files located in the translations directory.
-  $files = locale_translate_get_interface_translation_files(array('drupal'), array($langcode));
-  // We pick the first file which matches the installation language.
-  $file = reset($files);
-  $filename = $file->filename;
-  preg_match('/drupal-([0-9a-z\.-]+)\.' . $langcode . '\.po/', $filename, $matches);
-  // Get the version information.
-  if ($version = $matches[1]) {
-    $info = _install_get_version_info($version);
-    // Picking the first file does not necessarily result in the right file. So
-    // we check if at least the major version number is available.
-    if ($info['major']) {
-      $core = $info['major'] . '.x';
-      $data = array(
-         'name' => 'drupal',
-         'project_type' => 'module',
-         'core' => $core,
-         'version' => $version,
-         'server_pattern' => $install_state['server_pattern'],
-         'status' => 1,
-      );
-      \Drupal::service('locale.project')->set($data['name'], $data);
-      module_load_include('compare.inc', 'locale');
-      locale_translation_check_projects_local(array('drupal'), array($install_state['parameters']['langcode']));
+  foreach ($langcodes as $langcode) {
+    // Get the translation files located in the translations directory.
+    $files = locale_translate_get_interface_translation_files(array('drupal'), array($langcode));
+    // Pick the first file which matches the language, if any.
+    $file = reset($files);
+    if (is_object($file)) {
+      $filename = $file->filename;
+      preg_match('/drupal-([0-9a-z\.-]+)\.' . $langcode . '\.po/', $filename, $matches);
+      // Get the version information.
+      if ($version = $matches[1]) {
+        $info = _install_get_version_info($version);
+        // Picking the first file does not necessarily result in the right file. So
+        // we check if at least the major version number is available.
+        if ($info['major']) {
+          $core = $info['major'] . '.x';
+          $data = array(
+            'name' => 'drupal',
+            'project_type' => 'module',
+            'core' => $core,
+            'version' => $version,
+            'server_pattern' => $server_pattern,
+            'status' => 1,
+          );
+          \Drupal::service('locale.project')->set($data['name'], $data);
+          module_load_include('compare.inc', 'locale');
+          locale_translation_check_projects_local(array('drupal'), array($langcode));
+        }
+      }
     }
   }
 }
@@ -1627,7 +1647,8 @@ function install_import_translations_remaining(&$install_state) {
   $projects = locale_translation_build_projects();
   if (count($projects) > 1) {
     $options = _locale_translation_default_update_options();
-    if ($batch =  locale_translation_batch_update_build(array(), array($install_state['parameters']['langcode']), $options)) {
+    $languages = \Drupal::languageManager()->getLanguages();
+    if ($batch = locale_translation_batch_update_build(array(), array_keys($languages), $options)) {
       return $batch;
     }
   }
@@ -1646,7 +1667,8 @@ function install_import_translations_remaining(&$install_state) {
  */
 function install_update_configuration_translations(&$install_state) {
   \Drupal::moduleHandler()->loadInclude('locale', 'bulk.inc');
-  return locale_config_batch_update_components(array(), array($install_state['parameters']['langcode']));
+  $languages = \Drupal::languageManager()->getLanguages();
+  return locale_config_batch_update_components(array(), array_keys($languages));
 }
 
 /**
@@ -1711,8 +1733,18 @@ function _install_module_batch($module, $module_name, &$context) {
 
 /**
  * Checks installation requirements and reports any errors.
+ *
+ * @param string $langcode
+ *   Language code to check for download.
+ * @param string $server_pattern
+ *   Server access pattern (to replace language code, version number, etc. in).
+ *
+ * @return array
+ *   Requirements compliance array. If the translation was downloaded
+ *   successfully then an empty array is returned. Otherwise the requirements
+ *   error with detailed information.
  */
-function install_check_translations($install_state) {
+function install_check_translations($langcode, $server_pattern) {
   $requirements = array();
 
   $readable = FALSE;
@@ -1738,7 +1770,6 @@ function install_check_translations($install_state) {
 
   // Build URLs for the translation file and the translation server.
   $releases = install_get_localization_release();
-  $langcode = $install_state['parameters']['langcode'];
   $translation_urls = array();
   foreach ($releases as $release) {
     $variables = array(
@@ -1747,7 +1778,7 @@ function install_check_translations($install_state) {
       '%core' => $release['core'],
       '%language' => $langcode,
     );
-    $translation_urls[] = strtr($install_state['server_pattern'], $variables);
+    $translation_urls[] = strtr($server_pattern, $variables);
   }
   $elements = parse_url(reset($translation_urls));
   $server_url = $elements['scheme'] . '://' . $elements['host'];
