diff --git a/core/lib/Drupal/Core/Installer/Form/SelectLanguageForm.php b/core/lib/Drupal/Core/Installer/Form/SelectLanguageForm.php
index 6285c39..5a00f24 100644
--- a/core/lib/Drupal/Core/Installer/Form/SelectLanguageForm.php
+++ b/core/lib/Drupal/Core/Installer/Form/SelectLanguageForm.php
@@ -45,21 +45,19 @@ public function buildForm(array $form, FormStateInterface $form_state, $install_
     // Build a select list with language names in native language for the user
     // to choose from. And build a list of available languages for the browser
     // to select the language default from.
+    // Select lists based on all standard languages.
+    foreach ($standard_languages as $langcode => $language_names) {
+      $select_options[$langcode] = $language_names[1];
+      $browser_options[$langcode] = $langcode;
+    }
+    // Add languages based on language files in the translations directory.
     if (count($files)) {
-      // Select lists based on available language files.
       foreach ($files as $langcode => $uri) {
         $select_options[$langcode] = isset($standard_languages[$langcode]) ? $standard_languages[$langcode][1] : $langcode;
-        $browser_options[] = $langcode;
-      }
-    }
-    else {
-      // Select lists based on all standard languages.
-      foreach ($standard_languages as $langcode => $language_names) {
-        $select_options[$langcode] = $language_names[1];
-        $browser_options[] = $langcode;
+        $browser_options[$langcode] = $langcode;
       }
     }
-
+    asort($select_options);
     $request = Request::createFromGlobals();
     $browser_langcode = UserAgent::getBestMatchingLangcode($request->server->get('HTTP_ACCEPT_LANGUAGE'), $browser_options);
     $form['langcode'] = array(
@@ -70,21 +68,18 @@ public function buildForm(array $form, FormStateInterface $form_state, $install_
       // Use the browser detected language as default or English if nothing found.
       '#default_value' => !empty($browser_langcode) ? $browser_langcode : 'en',
     );
-
-    if (empty($files)) {
-      $form['help'] = array(
-        '#type' => 'item',
-        '#markup' => String::format('<p>Translations will be downloaded from the <a href="http://localize.drupal.org">Drupal Translation website</a>.
-        If you do not want this, select <a href="!english">English</a>.</p>', array(
-            '!english' => install_full_redirect_url(array('parameters' => array('langcode' => 'en'))),
-          )),
-        '#states' => array(
-          'invisible' => array(
-            'select[name="langcode"]' => array('value' => 'en'),
-          ),
+    $form['help'] = array(
+      '#type' => 'item',
+      '#markup' => String::format('<p>Translations will be downloaded from the <a href="http://localize.drupal.org">Drupal Translation website</a>.
+      If you do not want this, select <a href="!english">English</a>.</p>', array(
+          '!english' => install_full_redirect_url(array('parameters' => array('langcode' => 'en'))),
+        )),
+      '#states' => array(
+        'invisible' => array(
+          'select[name="langcode"]' => array('value' => 'en'),
         ),
-      );
-    }
+      ),
+    );
     $form['actions'] = array('#type' => 'actions');
     $form['actions']['submit'] =  array(
       '#type' => 'submit',
diff --git a/core/modules/system/src/Tests/Installer/InstallerLanguagePageTest.php b/core/modules/system/src/Tests/Installer/InstallerLanguagePageTest.php
new file mode 100644
index 0000000..bccd06e
--- /dev/null
+++ b/core/modules/system/src/Tests/Installer/InstallerLanguagePageTest.php
@@ -0,0 +1,150 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Installer\InstallerLanguagePageTest.
+ */
+
+namespace Drupal\system\Tests\Installer;
+
+use Drupal\Core\DrupalKernel;
+use Drupal\simpletest\InstallerTestBase;
+use Drupal\Core\Language\Language;
+use Drupal\Core\Session\UserSession;
+use Drupal\Core\Site\Settings;
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\RequestStack;
+
+/**
+ * Verifies that the installer page displays language list when come back.
+ *
+ * @group Installer
+ */
+class InstallerLanguagePageTest extends InstallerTestBase {
+
+  /**
+   * Overrides the language code the installer should use.
+   *
+   * @var string
+   */
+  protected $langcode = 'fr';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    $this->isInstalled = FALSE;
+
+    // Define information about the user 1 account.
+    $this->root_user = new UserSession(array(
+      'uid' => 1,
+      'name' => 'admin',
+      'mail' => 'admin@example.com',
+      'pass_raw' => $this->randomMachineName(),
+    ));
+
+      // Not using File API; a potential error must trigger a PHP warning.
+    copy(DRUPAL_ROOT . '/sites/default/default.settings.php', DRUPAL_ROOT . '/' . $this->siteDirectory . '/settings.php');
+
+    // Note that WebTestBase::installParameters() returns form input values
+    // suitable for a programmed drupal_form_submit().
+    // @see WebTestBase::translatePostValues()
+    $this->parameters = $this->installParameters();
+
+    // Set up a minimal container (required by WebTestBase).
+    // @see install_begin_request()
+    $request = Request::create($GLOBALS['base_url'] . '/core/install.php');
+    $this->container = new ContainerBuilder();
+    $request_stack = new RequestStack();
+    $request_stack->push($request);
+    $this->container
+      ->set('request_stack', $request_stack);
+    $this->container
+      ->setParameter('language.default_values', Language::$defaultValues);
+    $this->container
+      ->register('language.default', 'Drupal\Core\Language\LanguageDefault')
+      ->addArgument('%language.default_values%');
+    $this->container
+      ->register('language_manager', 'Drupal\Core\Language\LanguageManager')
+      ->addArgument(new Reference('language.default'));
+    $this->container
+      ->register('string_translation', 'Drupal\Core\StringTranslation\TranslationManager')
+      ->addArgument(new Reference('language_manager'));
+    \Drupal::setContainer($this->container);
+
+    $this->drupalGet($GLOBALS['base_url'] . '/core/install.php');
+
+    // Select language.
+    $this->setUpLanguage();
+
+    // Go back to install page
+    $this->drupalGet($GLOBALS['base_url'] . '/core/install.php');
+    // Check for other languages.
+    $this->assertRaw('Afrikaans');
+    $this->assertRaw('<option value="ta">');
+
+    // No need below steps for this test, however to finish installation,
+    // have to do them.
+    $this->langcode = 'en';
+    // Select language.
+    $this->setUpLanguage();
+
+    // Select profile.
+    $this->setUpProfile();
+
+    // Configure settings.
+    $this->setUpSettings();
+
+    // @todo Allow test classes based on this class to act on further installer
+    //   screens.
+
+    // Configure site.
+    $this->setUpSite();
+
+    // Import new settings.php written by the installer.
+    $request = Request::createFromGlobals();
+    Settings::initialize(DrupalKernel::findSitePath($request));
+    foreach ($GLOBALS['config_directories'] as $type => $path) {
+      $this->configDirectories[$type] = $path;
+    }
+
+    // After writing settings.php, the installer removes write permissions
+    // from the site directory. To allow drupal_generate_test_ua() to write
+    // a file containing the private key for drupal_valid_test_ua(), the site
+    // directory has to be writable.
+    // WebTestBase::tearDown() will delete the entire test site directory.
+    // Not using File API; a potential error must trigger a PHP warning.
+    chmod(DRUPAL_ROOT . '/' . $this->siteDirectory, 0777);
+    $this->kernel = DrupalKernel::createFromRequest($request, drupal_classloader(), 'prod', FALSE);
+    $this->kernel->prepareLegacyRequest($request);
+    $this->container = $this->kernel->getContainer();
+    $config = $this->container->get('config.factory');
+
+    // Manually configure the test mail collector implementation to prevent
+    // tests from sending out e-mails and collect them in state instead.
+    $config->get('system.mail')
+      ->set('interface.default', 'test_mail_collector')
+      ->save();
+
+    // When running from run-tests.sh we don't get an empty current path which
+    // would indicate we're on the home page.
+    $path = current_path();
+    if (empty($path)) {
+      _current_path('run-tests');
+    }
+
+    $this->isInstalled = TRUE;
+
+  }
+
+  /**
+   * Confirms that the installation succeeded.
+   */
+  public function testInstalled() {
+    $this->assertUrl('user/1');
+    $this->assertResponse(200);
+  }
+
+}
