diff --git a/core/lib/Drupal/Core/Language/LanguageManager.php b/core/lib/Drupal/Core/Language/LanguageManager.php
index e86c6ce..c20cabd 100644
--- a/core/lib/Drupal/Core/Language/LanguageManager.php
+++ b/core/lib/Drupal/Core/Language/LanguageManager.php
@@ -134,32 +134,13 @@ public function getLanguages($flags = LanguageInterface::STATE_CONFIGURABLE) {
       // No language module, so use the default language only.
       $default = $this->getDefaultLanguage();
       $this->languages = array($default->id => $default);
-      // Add the special languages, they will be filtered later if needed.
-      $this->languages += $this->getDefaultLockedLanguages($default->weight);
     }
 
     // Filter the full list of languages based on the value of the $all flag. By
     // default we remove the locked languages, but the caller may request for
     // those languages to be added as well.
-    $filtered_languages = array();
 
-    // Add the site's default language if flagged as allowed value.
-    if ($flags & LanguageInterface::STATE_SITE_DEFAULT) {
-      $default = isset($default) ? $default : $this->getDefaultLanguage();
-      // Rename the default language. But we do not want to do this globally,
-      // if we're acting on a global object, so clone the object first.
-      $default = clone $default;
-      $default->name = $this->t("Site's default language (@lang_name)", array('@lang_name' => $default->name));
-      $filtered_languages['site_default'] = $default;
-    }
-
-    foreach ($this->languages as $id => $language) {
-      if (($language->locked && ($flags & LanguageInterface::STATE_LOCKED)) || (!$language->locked && ($flags & LanguageInterface::STATE_CONFIGURABLE))) {
-        $filtered_languages[$id] = $language;
-      }
-    }
-
-    return $filtered_languages;
+    return $this->languageFilter($this->languages, $flags);
   }
 
   /**
@@ -383,4 +364,42 @@ public function getConfigOverrideLanguage() {
     return $this->getCurrentLanguage();
   }
 
+
+  /**
+   * Filters the full list of languages based on the value of the flag.
+   *
+   * The locked languages are removed by default.
+   *
+   * @param \Drupal\Core\Language\LanguageInterface[] $languages
+   *   Array with languages to be filtered.
+   *
+   * @param int $flags
+   *   (optional) Specifies the state of the languages that have to be returned.
+   *   It can be: LanguageInterface::STATE_CONFIGURABLE,
+   *   LanguageInterface::STATE_LOCKED, or LanguageInterface::STATE_ALL.
+   *
+   * @return \Drupal\Core\Language\LanguageInterface[]
+   *   An associative array of languages, keyed by the language code.
+   */
+  protected function languageFilter(array $languages, $flags = LanguageInterface::STATE_CONFIGURABLE) {
+    $filtered_languages = array();
+    // Add the site's default language if flagged as allowed value.
+    if ($flags & LanguageInterface::STATE_SITE_DEFAULT) {
+      $default = $this->getDefaultLanguage();
+      // Rename the default language. But we do not want to do this globally,
+      // if we're acting on a global object, so clone the object first.
+      $default = clone $default;
+      $default->name = $this->t("Site's default language (@lang_name)", array('@lang_name' => $default->name));
+      $filtered_languages['site_default'] = $default;
+    }
+
+    foreach ($languages as $id => $language) {
+      if (($language->locked && ($flags & LanguageInterface::STATE_LOCKED)) || (!$language->locked && ($flags & LanguageInterface::STATE_CONFIGURABLE))) {
+        $filtered_languages[$id] = $language;
+      }
+    }
+
+    return $filtered_languages;
+  }
+
 }
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 381fbd4..fe63bd4 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -148,7 +148,7 @@ function language_process_language_select($element) {
   if (!isset($element['#options'])) {
     $element['#options'] = array();
     foreach (\Drupal::languageManager()->getLanguages($element['#languages']) as $langcode => $language) {
-      $element['#options'][$langcode] = $language->locked ? t('- @name -', array('@name' => $language->name)) : $language->name;
+      $element['#options'][$langcode] = $language->locked ? t('- @name -', array('@name' => $language->getName())) : $language->getName();
     }
   }
   // Add "Built-in English" language to the select when the default value is
diff --git a/core/modules/language/src/ConfigurableLanguageManager.php b/core/modules/language/src/ConfigurableLanguageManager.php
index 1726236..1b46381 100644
--- a/core/modules/language/src/ConfigurableLanguageManager.php
+++ b/core/modules/language/src/ConfigurableLanguageManager.php
@@ -278,37 +278,12 @@ public function setNegotiator(LanguageNegotiatorInterface $negotiator) {
    * {@inheritdoc}
    */
   public function getLanguages($flags = LanguageInterface::STATE_CONFIGURABLE) {
-    if (!isset($this->languages)) {
-      // Prepopulate the language list with the default language to keep things
-      // working even if we have no configuration.
-      $default = $this->getDefaultLanguage();
-      $this->languages = array($default->id => $default);
-
-      // Retrieve the list of languages defined in configuration.
-      $prefix = 'language.entity.';
-      $config_ids = $this->configFactory->listAll($prefix);
-
-      // Instantiate languages from config objects.
-      $weight = 0;
-      foreach ($this->configFactory->loadMultiple($config_ids) as $config) {
-        $data = $config->get();
-        $langcode = $data['id'];
-        // Initialize default property so callers have an easy reference and can
-        // save the same object without data loss.
-        $data['default'] = ($langcode == $default->id);
-        $data['name'] = $data['label'];
-        $this->languages[$langcode] = new Language($data);
-        $weight = max(array($weight, $this->languages[$langcode]->weight));
-      }
-
-      // Add locked languages, they will be filtered later if needed.
-      $this->languages += $this->getDefaultLockedLanguages($weight);
+    $languages = entity_load_multiple('configurable_language');
 
-      // Sort the language list by weight then title.
-      Language::sort($this->languages);
-    }
+    // Sort the language list by weight then title.
+    Language::sort($languages);
 
-    return parent::getLanguages($flags);
+    return $this->languageFilter($languages, $flags);
   }
 
   /**
diff --git a/core/modules/language/src/Element/LanguageConfiguration.php b/core/modules/language/src/Element/LanguageConfiguration.php
index 273d733..fa24be4 100644
--- a/core/modules/language/src/Element/LanguageConfiguration.php
+++ b/core/modules/language/src/Element/LanguageConfiguration.php
@@ -98,9 +98,10 @@ protected static function getDefaultOptions() {
       'authors_default' => t("Author's preferred language"),
     );
 
+    /* @var LanguageInterface[] $languages*/
     $languages = static::languageManager()->getLanguages(LanguageInterface::STATE_ALL);
     foreach ($languages as $langcode => $language) {
-      $language_options[$langcode] = $language->locked ? t('- @name -', array('@name' => $language->name)) : $language->name;
+      $language_options[$langcode] = $language->locked ? t('- @name -', array('@name' => $language->getName())) : $language->getName();
     }
 
     return $language_options;
diff --git a/core/modules/language/src/Tests/LanguageSelectorTranslatableTest.php b/core/modules/language/src/Tests/LanguageSelectorTranslatableTest.php
new file mode 100644
index 0000000..74feafa
--- /dev/null
+++ b/core/modules/language/src/Tests/LanguageSelectorTranslatableTest.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\language\Tests\LanguageSelectorTranslatableTest.
+ */
+
+namespace Drupal\language\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests the content translation settings language selector options.
+ *
+ * @group language
+ */
+class LanguageSelectorTranslatableTest extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array(
+    'language',
+    'content_translation',
+    'config_translation',
+    'node',
+    'comment',
+    'field_ui',
+    'entity_test',
+    'locale',
+  );
+  /**
+   * An administrator user.
+   *
+   * @var \Drupal\user\Entity\User
+   */
+  public $administrator;
+
+  protected function setUp() {
+    parent::setUp();
+
+    // Create user and set permissions.
+    $this->administrator = $this->drupalCreateUser($this->getAdministratorPermissions(), 'administrator');
+    $this->drupalLogin($this->administrator);
+
+  }
+  /**
+   * Returns an array of permissions needed for the translator.
+   */
+  protected function getAdministratorPermissions() {
+    return array_filter(
+      array('translate interface',
+        'administer content translation',
+        'create content translations',
+        'update content translations',
+        'delete content translations',
+        'administer languages'
+      )
+    );
+  }
+
+  /**
+   * Tests content translation language selectors are correctly translate.
+   */
+  public function testLanguageStringSelector() {
+    // Add another language.
+    $edit = array('predefined_langcode' => 'es');
+    $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add language'));
+
+    // Translate the string English in Spanish (Inglés). Override config entity.
+    $name_translation = 'Inglés';
+    $override = \Drupal::languageManager()
+      ->getLanguageConfigOverride('es', 'language.entity.en')
+      ->set('label', $name_translation)
+      ->save();
+
+    // Check label is set correctly.
+    $this->assertEqual($override->get('label'), $name_translation, 'Language label for English is translated into Spanish.');
+
+    // Check content translation overview selector.
+    $path = 'es/admin/config/regional/content-language';
+    $this->drupalGet($path);
+
+    // Get en language from selector.
+    $elements = $this->xpath('//select[@id=:id]//option[@value=:option]', array(':id' => 'edit-settings-node-node-settings-language-langcode', ':option' => 'en'));
+
+    // Check the language text is translated.
+    $this->assertEqual((string) $elements[0], $name_translation, 'Checking the option string English is translated to Spanish.');
+  }
+
+}
