diff --git a/core/lib/Drupal/Core/Session/UserSession.php b/core/lib/Drupal/Core/Session/UserSession.php
index 912d755..66f43f9 100644
--- a/core/lib/Drupal/Core/Session/UserSession.php
+++ b/core/lib/Drupal/Core/Session/UserSession.php
@@ -183,12 +183,12 @@ public function isAnonymous() {
    * {@inheritdoc}
    */
   function getPreferredLangcode($default = NULL) {
-    $language_list = language_list();
+    $language_list = \Drupal::languageManager()->getLanguages();
     if (!empty($this->preferred_langcode) && isset($language_list[$this->preferred_langcode])) {
       return $language_list[$this->preferred_langcode]->id;
     }
     else {
-      return $default ? $default : language_default()->id;
+      return $default ? $default : \Drupal::languageManager()->getDefaultLanguage()->id;
     }
   }
 
@@ -196,12 +196,12 @@ function getPreferredLangcode($default = NULL) {
    * {@inheritdoc}
    */
   function getPreferredAdminLangcode($default = NULL) {
-    $language_list = language_list();
+    $language_list = \Drupal::languageManager()->getLanguages();
     if (!empty($this->preferred_admin_langcode) && isset($language_list[$this->preferred_admin_langcode])) {
       return $language_list[$this->preferred_admin_langcode]->id;
     }
     else {
-      return $default ? $default : language_default()->id;
+      return $default ? $default : \Drupal::languageManager()->getDefaultLanguage()->id;
     }
   }
 
diff --git a/core/modules/action/src/Plugin/Action/EmailAction.php b/core/modules/action/src/Plugin/Action/EmailAction.php
index c6589a6..3ec4fc8 100644
--- a/core/modules/action/src/Plugin/Action/EmailAction.php
+++ b/core/modules/action/src/Plugin/Action/EmailAction.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Action\ConfigurableActionBase;
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Utility\Token;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -39,6 +40,13 @@ class EmailAction extends ConfigurableActionBase implements ContainerFactoryPlug
   protected $storage;
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
    * Constructs a EmailAction object.
    *
    * @param array $configuration
@@ -52,11 +60,12 @@ class EmailAction extends ConfigurableActionBase implements ContainerFactoryPlug
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   The entity manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, Token $token, EntityManagerInterface $entity_manager) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, Token $token, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->token = $token;
     $this->storage = $entity_manager->getStorage('user');
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -65,7 +74,8 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
     return new static($configuration, $plugin_id, $plugin_definition,
       $container->get('token'),
-      $container->get('entity.manager')
+      $container->get('entity.manager'),
+      $container->get('language_manager')
     );
   }
 
@@ -88,7 +98,7 @@ public function execute($entity = NULL) {
       $langcode = $recipient_account->getPreferredLangcode();
     }
     else {
-      $langcode = language_default()->id;
+      $langcode = $this->languageManager->getDefaultLanguage()->id;
     }
     $params = array('context' => $this->configuration);
 
diff --git a/core/modules/aggregator/src/Tests/FeedLanguageTest.php b/core/modules/aggregator/src/Tests/FeedLanguageTest.php
index 065cf0a..6fdf168 100644
--- a/core/modules/aggregator/src/Tests/FeedLanguageTest.php
+++ b/core/modules/aggregator/src/Tests/FeedLanguageTest.php
@@ -34,7 +34,7 @@ public function setUp() {
     parent::setUp();
 
     // Create test languages.
-    $this->langcodes = array(language_load('en'));
+    $this->langcodes = array(\Drupal::languageManager()->getLanguage('en'));
     for ($i = 1; $i < 3; ++$i) {
       $language = new Language(array(
         'id' => 'l' . $i,
diff --git a/core/modules/block/src/Tests/BlockLanguageCacheTest.php b/core/modules/block/src/Tests/BlockLanguageCacheTest.php
index f9e3bbc..b27d11c 100644
--- a/core/modules/block/src/Tests/BlockLanguageCacheTest.php
+++ b/core/modules/block/src/Tests/BlockLanguageCacheTest.php
@@ -36,7 +36,7 @@ public function setUp() {
     parent::setUp();
 
     // Create test languages.
-    $this->langcodes = array(language_load('en'));
+    $this->langcodes = array(\Drupal::languageManager()->getLanguage('en'));
     for ($i = 1; $i < 3; ++$i) {
       $language = new Language(array(
         'id' => 'l' . $i,
diff --git a/core/modules/comment/comment.tokens.inc b/core/modules/comment/comment.tokens.inc
index b34fdcb..508078c 100644
--- a/core/modules/comment/comment.tokens.inc
+++ b/core/modules/comment/comment.tokens.inc
@@ -119,7 +119,7 @@ function comment_tokens($type, $tokens, array $data = array(), array $options =
 
   $url_options = array('absolute' => TRUE);
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
diff --git a/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php b/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
index fe76f8f..637d972 100644
--- a/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
+++ b/core/modules/config/src/Tests/ConfigLanguageOverrideTest.php
@@ -36,7 +36,7 @@ function testConfigLanguageOverride() {
     // The language module implements a config factory override object that
     // overrides configuration when the Language module is enabled. This test ensures that
     // English overrides work.
-    \Drupal::languageManager()->setConfigOverrideLanguage(language_load('en'));
+    \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('en'));
     $config = \Drupal::config('config_test.system');
     $this->assertIdentical($config->get('foo'), 'en bar');
 
@@ -53,11 +53,11 @@ function testConfigLanguageOverride() {
       'id' => 'de',
     )));
 
-    \Drupal::languageManager()->setConfigOverrideLanguage(language_load('fr'));
+    \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('fr'));
     $config = \Drupal::config('config_test.system');
     $this->assertIdentical($config->get('foo'), 'fr bar');
 
-    \Drupal::languageManager()->setConfigOverrideLanguage(language_load('de'));
+    \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('de'));
     $config = \Drupal::config('config_test.system');
     $this->assertIdentical($config->get('foo'), 'de bar');
 
diff --git a/core/modules/config_translation/src/Access/ConfigTranslationFormAccess.php b/core/modules/config_translation/src/Access/ConfigTranslationFormAccess.php
index 10c5f25..a1136cc 100644
--- a/core/modules/config_translation/src/Access/ConfigTranslationFormAccess.php
+++ b/core/modules/config_translation/src/Access/ConfigTranslationFormAccess.php
@@ -24,7 +24,7 @@ public function access(Route $route, Request $request, AccountInterface $account
     // checks in addition to the checks performed for the translation overview.
     $base_access = parent::access($route, $request, $account);
     if ($base_access === static::ALLOW) {
-      $target_language = language_load($request->attributes->get('langcode'));
+      $target_language = \Drupal::languageManager()->getLanguage($request->attributes->get('langcode'));
 
       // Make sure that the target language is not locked, and that the target
       // language is not the original submission language. Although technically
diff --git a/core/modules/config_translation/src/ConfigNamesMapper.php b/core/modules/config_translation/src/ConfigNamesMapper.php
index 57811d9..f5044b1 100644
--- a/core/modules/config_translation/src/ConfigNamesMapper.php
+++ b/core/modules/config_translation/src/ConfigNamesMapper.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Config\TypedConfigManagerInterface;
 use Drupal\Core\Language\Language;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
@@ -109,12 +110,14 @@ class ConfigNamesMapper extends PluginBase implements ConfigMapperInterface, Con
    *   The route provider.
    * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
    *   The string translation manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    *
    * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException
    *   Throws an exception if the route specified by the 'base_route_name' in
    *   the plugin definition could not be found by the route provider.
    */
-  public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $string_translation) {
+  public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, TypedConfigManagerInterface $typed_config, LocaleConfigManager $locale_config_manager, ConfigMapperManagerInterface $config_mapper_manager, RouteProviderInterface $route_provider, TranslationInterface $string_translation, LanguageManagerInterface $language_manager) {
     $this->pluginId = $plugin_id;
     $this->pluginDefinition = $plugin_definition;
     $this->routeProvider = $route_provider;
@@ -125,6 +128,7 @@ public function __construct($plugin_id, $plugin_definition, ConfigFactoryInterfa
     $this->configMapperManager = $config_mapper_manager;
 
     $this->stringTranslation = $string_translation;
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -141,7 +145,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $container->get('locale.config.typed'),
       $container->get('plugin.manager.config_translation.mapper'),
       $container->get('router.route_provider'),
-      $container->get('string_translation')
+      $container->get('string_translation'),
+      $container->get('language_manager')
     );
   }
 
@@ -418,7 +423,7 @@ public function getLangcode() {
    */
   public function getLanguageWithFallback() {
     $langcode = $this->getLangcode();
-    $language = language_load($langcode);
+    $language = $this->languageManager->getLanguage($langcode);
     // If the language of the file is English but English is not a configured
     // language on the site, create a mock language object to represent this
     // language run-time. In this case, the title of the language is
diff --git a/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php b/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
index a9a0a83..afe0214 100644
--- a/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
+++ b/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
@@ -120,7 +120,7 @@ public function buildForm(array $form, array &$form_state, Request $request = NU
     $mapper = $this->configMapperManager->createInstance($plugin_id);
     $mapper->populateFromRequest($request);
 
-    $language = language_load($langcode);
+    $language = \Drupal::languageManager()->getLanguage($langcode);
     if (!$language) {
       throw new NotFoundHttpException();
     }
diff --git a/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php b/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
index 5b6125a..4da0101 100644
--- a/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
+++ b/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
@@ -160,7 +160,7 @@ public function buildForm(array $form, array &$form_state, Request $request = NU
     $mapper = $this->configMapperManager->createInstance($plugin_id);
     $mapper->populateFromRequest($request);
 
-    $language = language_load($langcode);
+    $language = \Drupal::languageManager()->getLanguage($langcode);
     if (!$language) {
       throw new NotFoundHttpException();
     }
diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
index e0a0ddb..9ef9222 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
@@ -325,7 +325,7 @@ public function testContactConfigEntityTranslation() {
 
     // Test that delete links work and operations perform properly.
     foreach ($this->langcodes as $langcode) {
-      $replacements = array('%label' => t('!label !entity_type', array('!label' => $label, '!entity_type' => Unicode::strtolower(t('Contact category')))), '@language' => language_load($langcode)->name);
+      $replacements = array('%label' => t('!label !entity_type', array('!label' => $label, '!entity_type' => Unicode::strtolower(t('Contact category')))), '@language' => \Drupal::languageManager()->getLanguage($langcode)->name);
 
       $this->drupalGet("$translation_base_url/$langcode/delete");
       $this->assertRaw(t('Are you sure you want to delete the @language translation of %label?', $replacements));
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index e8485c1..41de9a0 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -107,7 +107,7 @@ function contact_mail($key, &$message, $params) {
   $contact_message = $params['contact_message'];
   /** @var $sender \Drupal\user\UserInterface */
   $sender = $params['sender'];
-  $language = language_load($message['langcode']);
+  $language = \Drupal::languageManager()->getLanguage($message['langcode']);
 
   $variables = array(
     '!site-name' => \Drupal::config('system.site')->get('name'),
diff --git a/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php b/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
index 137b52e..ae5bc3f 100644
--- a/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
+++ b/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
@@ -65,12 +65,12 @@ public function access(Route $route, Request $request, AccountInterface $account
 
       // Load translation.
       $translations = $entity->getTranslationLanguages();
-      $languages = language_list();
+      $languages = \Drupal::languageManager()->getLanguages();
 
       switch ($operation) {
         case 'create':
-          $source = language_load($source) ?: $entity->language();
-          $target = language_load($target) ?: \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
+          $source = \Drupal::languageManager()->getLanguage($source) ?: $entity->language();
+          $target = \Drupal::languageManager()->getLanguage($target) ?: \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
           return ($source->id != $target->id
             && isset($languages[$source->id])
             && isset($languages[$target->id])
diff --git a/core/modules/content_translation/src/Form/ContentTranslationDeleteForm.php b/core/modules/content_translation/src/Form/ContentTranslationDeleteForm.php
index 4100fdb..9a6fc20 100644
--- a/core/modules/content_translation/src/Form/ContentTranslationDeleteForm.php
+++ b/core/modules/content_translation/src/Form/ContentTranslationDeleteForm.php
@@ -41,7 +41,7 @@ public function getFormId() {
    */
   public function buildForm(array $form, array &$form_state, $_entity_type_id = NULL, $language = NULL) {
     $this->entity = $this->getRequest()->attributes->get($_entity_type_id);
-    $this->language = language_load($language);
+    $this->language = \Drupal::languageManager()->getLanguage($language);
     return parent::buildForm($form, $form_state);
   }
 
diff --git a/core/modules/field/src/Plugin/views/field/Field.php b/core/modules/field/src/Plugin/views/field/Field.php
index c678554..d849cca 100644
--- a/core/modules/field/src/Plugin/views/field/Field.php
+++ b/core/modules/field/src/Plugin/views/field/Field.php
@@ -294,7 +294,7 @@ public function query($use_groupby = FALSE) {
         // LanguageInterface::LANGCODE_NOT_SPECIFIED in reality so allow it as
         // well.
         // @see this::field_langcode()
-        $default_langcode = language_default()->id;
+        $default_langcode = $this->languageManager->getDefaultLanguage()->id;
         $langcode = str_replace(
           array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
           array($this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT), $default_langcode),
@@ -901,7 +901,7 @@ protected function addSelfTokens(&$tokens, $item) {
    */
   function field_langcode(EntityInterface $entity) {
     if ($this->getFieldDefinition()->isTranslatable()) {
-      $default_langcode = language_default()->id;
+      $default_langcode = $this->languageManager->getDefaultLanguage()->id;
       $langcode = str_replace(
         array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
         array($this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id, $default_langcode),
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 97fa6ff..4d4e4d4 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -1017,7 +1017,7 @@ function file_tokens($type, $tokens, array $data = array(), array $options = arr
 
   $url_options = array('absolute' => TRUE);
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
diff --git a/core/modules/language/src/Form/LanguageAddForm.php b/core/modules/language/src/Form/LanguageAddForm.php
index 3eb0bc6..cda1112 100644
--- a/core/modules/language/src/Form/LanguageAddForm.php
+++ b/core/modules/language/src/Form/LanguageAddForm.php
@@ -123,7 +123,7 @@ public function validateCustom(array $form, array &$form_state) {
       // Reuse the editing form validation routine if we add a custom language.
       $this->validateCommon($form['custom_language'], $form_state);
 
-      if ($language = language_load($langcode)) {
+      if ($language = \Drupal::languageManager()->getLanguage($langcode)) {
         $this->setFormError('langcode', $form_state, $this->t('The language %language (%langcode) already exists.', array('%language' => $language->name, '%langcode' => $langcode)));
       }
     }
@@ -141,7 +141,7 @@ public function validatePredefined($form, &$form_state) {
       $this->setFormError('predefined_langcode', $form_state, $this->t('Fill in the language details and save the language with <em>Add custom language</em>.'));
     }
     else {
-      if ($language = language_load($langcode)) {
+      if ($language = \Drupal::languageManager()->getLanguage($langcode)) {
         $this->setFormError('predefined_langcode', $form_state, $this->t('The language %language (%langcode) already exists.', array('%language' => $language->name, '%langcode' => $langcode)));
       }
     }
diff --git a/core/modules/language/src/Form/LanguageDeleteForm.php b/core/modules/language/src/Form/LanguageDeleteForm.php
index 1e1e2a0..50100c7 100644
--- a/core/modules/language/src/Form/LanguageDeleteForm.php
+++ b/core/modules/language/src/Form/LanguageDeleteForm.php
@@ -8,6 +8,7 @@
 namespace Drupal\language\Form;
 
 use Drupal\Core\Entity\EntityConfirmFormBase;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Url;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -28,13 +29,23 @@ class LanguageDeleteForm extends EntityConfirmFormBase {
   protected $urlGenerator;
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
    * Constructs a new LanguageDeleteForm object.
    *
    * @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
    *   The url generator service.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
-  public function __construct(UrlGeneratorInterface $url_generator) {
+  public function __construct(UrlGeneratorInterface $url_generator, LanguageManagerInterface $language_manager) {
     $this->urlGenerator = $url_generator;
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -42,7 +53,8 @@ public function __construct(UrlGeneratorInterface $url_generator) {
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('url_generator')
+      $container->get('url_generator'),
+      $container->get('language_manager')
     );
   }
 
@@ -88,14 +100,14 @@ public function buildForm(array $form, array &$form_state) {
     $langcode = $this->entity->id();
 
     // Warn and redirect user when attempting to delete the default language.
-    if (language_default()->id == $langcode) {
+    if ($this->languageManager->getDefaultLanguage()->id == $langcode) {
       drupal_set_message($this->t('The default language cannot be deleted.'));
       $url = $this->urlGenerator->generateFromPath('admin/config/regional/language', array('absolute' => TRUE));
       return new RedirectResponse($url);
     }
 
     // Throw a 404 when attempting to delete a non-existing language.
-    $languages = language_list();
+    $languages = $this->languageManager->getLanguages();
     if (!isset($languages[$langcode])) {
       throw new NotFoundHttpException();
     }
diff --git a/core/modules/language/src/Form/LanguageEditForm.php b/core/modules/language/src/Form/LanguageEditForm.php
index 2dacdc2..043020a 100644
--- a/core/modules/language/src/Form/LanguageEditForm.php
+++ b/core/modules/language/src/Form/LanguageEditForm.php
@@ -8,6 +8,8 @@
 namespace Drupal\language\Form;
 
 use Drupal\language\Form\LanguageFormBase;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Controller for language edit forms.
@@ -15,6 +17,32 @@
 class LanguageEditForm extends LanguageFormBase {
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * Constructs a new LanguageEditForm object.
+   *
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
+   */
+  public function __construct(LanguageManagerInterface $language_manager) {
+    $this->languageManager = $language_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('language_manager')
+    );
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function getFormId() {
@@ -48,7 +76,7 @@ public function actions(array $form, array &$form_state) {
    */
   public function submitForm(array &$form, array &$form_state) {
     // Prepare a language object for saving.
-    $languages = language_list();
+    $languages = \Drupal::languageManager()->getLanguages();
     $langcode = $form_state['values']['langcode'];
     $language = $languages[$langcode];
     $language->name = $form_state['values']['name'];
diff --git a/core/modules/language/src/Form/NegotiationBrowserForm.php b/core/modules/language/src/Form/NegotiationBrowserForm.php
index f82e54a..4c147c9 100644
--- a/core/modules/language/src/Form/NegotiationBrowserForm.php
+++ b/core/modules/language/src/Form/NegotiationBrowserForm.php
@@ -59,7 +59,7 @@ public function buildForm(array $form, array &$form_state) {
     $form = array();
 
     // Initialize a language list to the ones available, including English.
-    $languages = language_list();
+    $languages = $this->languageManager->getLanguages();
 
     $existing_languages = array();
     foreach ($languages as $langcode => $language) {
diff --git a/core/modules/language/src/Form/NegotiationUrlForm.php b/core/modules/language/src/Form/NegotiationUrlForm.php
index d8c2490..1a371f2 100644
--- a/core/modules/language/src/Form/NegotiationUrlForm.php
+++ b/core/modules/language/src/Form/NegotiationUrlForm.php
@@ -68,7 +68,7 @@ public function buildForm(array $form, array &$form_state) {
       ),
     );
 
-    $languages = language_list();
+    $languages = \Drupal::languageManager()->getLanguages();
     $prefixes = language_negotiation_url_prefixes();
     $domains = language_negotiation_url_domains();
     foreach ($languages as $langcode => $language) {
@@ -97,7 +97,7 @@ public function buildForm(array $form, array &$form_state) {
    * Implements \Drupal\Core\Form\FormInterface::validateForm().
    */
   public function validateForm(array &$form, array &$form_state) {
-    $languages = language_list();
+    $languages = \Drupal::languageManager()->getLanguages();
 
     // Count repeated values for uniqueness check.
     $count = array_count_values($form_state['values']['prefix']);
diff --git a/core/modules/language/src/LanguageListBuilder.php b/core/modules/language/src/LanguageListBuilder.php
index c5bd66a..9bf8a54 100644
--- a/core/modules/language/src/LanguageListBuilder.php
+++ b/core/modules/language/src/LanguageListBuilder.php
@@ -9,6 +9,10 @@
 
 use Drupal\Core\Config\Entity\DraggableListBuilder;
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Defines a class to build a listing of language entities.
@@ -23,6 +27,37 @@ class LanguageListBuilder extends DraggableListBuilder {
   protected $entitiesKey = 'languages';
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
+    return new static(
+      $entity_type,
+      $container->get('entity.manager')->getStorage($entity_type->id()),
+      $container->get('language_manager')
+    );
+  }
+
+  /**
+   * Constructs a new EntityListController object.
+   *
+   * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
+   *   The entity type definition.
+   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
+   *   The entity storage controller class.
+   */
+  public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, LanguageManagerInterface $language_manager) {
+    parent::__construct($entity_type, $storage);
+    $this->languageManager = $language_manager;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function load() {
@@ -46,7 +81,7 @@ public function getFormId() {
    */
   public function getDefaultOperations(EntityInterface $entity) {
     $operations = parent::getDefaultOperations($entity);
-    $default = language_default();
+    $default = $this->languageManager->getDefaultLanguage();
 
     // Deleting the site default language is not allowed.
     if ($entity->id() == $default->id) {
@@ -88,10 +123,9 @@ public function buildForm(array $form, array &$form_state) {
   public function submitForm(array &$form, array &$form_state) {
     parent::submitForm($form, $form_state);
 
-    $language_manager = \Drupal::languageManager();
-    $language_manager->reset();
-    if ($language_manager instanceof ConfigurableLanguageManagerInterface) {
-      $language_manager->updateLockedLanguageWeights();
+    $this->languageManager->reset();
+    if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) {
+      $this->languageManager->updateLockedLanguageWeights();
     }
 
     drupal_set_message(t('Configuration saved.'));
diff --git a/core/modules/language/src/Plugin/Condition/Language.php b/core/modules/language/src/Plugin/Condition/Language.php
index 46a99cb..701643b 100644
--- a/core/modules/language/src/Plugin/Condition/Language.php
+++ b/core/modules/language/src/Plugin/Condition/Language.php
@@ -30,7 +30,7 @@ class Language extends ConditionPluginBase {
   public function buildConfigurationForm(array $form, array &$form_state) {
     if (\Drupal::languageManager()->isMultilingual()) {
       // Fetch languages.
-      $languages = language_list(LanguageInterface::STATE_ALL);
+      $languages = \Drupal::languageManager()->getLanguages(LanguageInterface::STATE_ALL);
       $langcodes_options = array();
       foreach ($languages as $language) {
         $langcodes_options[$language->id] = $language->getName();
@@ -64,7 +64,7 @@ public function submitConfigurationForm(array &$form, array &$form_state) {
    * {@inheritdoc}
    */
   public function summary() {
-    $language_list = language_list(LanguageInterface::STATE_ALL);
+    $language_list = \Drupal::languageManager()->getLanguages(LanguageInterface::STATE_ALL);
     $selected = $this->configuration['langcodes'];
     // Reduce the language list to an array of language names.
     $language_names = array_reduce($language_list, function(&$result, $item) use ($selected) {
diff --git a/core/modules/locale/src/Form/TranslateEditForm.php b/core/modules/locale/src/Form/TranslateEditForm.php
index c846026..b8f6de4 100644
--- a/core/modules/locale/src/Form/TranslateEditForm.php
+++ b/core/modules/locale/src/Form/TranslateEditForm.php
@@ -31,7 +31,7 @@ public function buildForm(array $form, array &$form_state) {
     $langcode = $filter_values['langcode'];
 
     $this->languageManager->reset();
-    $languages = language_list();
+    $languages = $this->languageManager->getLanguages();
 
     $langname = isset($langcode) ? $languages[$langcode]->name : "- None -";
 
diff --git a/core/modules/locale/src/Form/TranslateFormBase.php b/core/modules/locale/src/Form/TranslateFormBase.php
index e0e4ac2..7b431d1 100644
--- a/core/modules/locale/src/Form/TranslateFormBase.php
+++ b/core/modules/locale/src/Form/TranslateFormBase.php
@@ -161,7 +161,7 @@ protected function translateFilters() {
 
     // Get all languages, except English.
     $this->languageManager->reset();
-    $languages = language_list();
+    $languages = $this->languageManager->getLanguages();
     $language_options = array();
     foreach ($languages as $langcode => $language) {
       if ($langcode != 'en' || locale_translate_english()) {
diff --git a/core/modules/locale/src/LocaleTypedConfig.php b/core/modules/locale/src/LocaleTypedConfig.php
index eeccaa8..ea161aa 100644
--- a/core/modules/locale/src/LocaleTypedConfig.php
+++ b/core/modules/locale/src/LocaleTypedConfig.php
@@ -88,7 +88,7 @@ public function getTranslation($langcode) {
    * {@inheritdoc}
    */
   public function language() {
-    return language_load($this->langcode);
+    return \Drupal::languageManager()->getLanguage($this->langcode);
   }
 
   /**
diff --git a/core/modules/menu_ui/src/Tests/MenuLanguageTest.php b/core/modules/menu_ui/src/Tests/MenuLanguageTest.php
index 9267c28..a7efc98 100644
--- a/core/modules/menu_ui/src/Tests/MenuLanguageTest.php
+++ b/core/modules/menu_ui/src/Tests/MenuLanguageTest.php
@@ -175,7 +175,7 @@ function testMenuLanguageRemovedEnglish() {
 
     // Remove English language. To do that another language has to be set as
     // default.
-    $language = language_load('cs');
+    $language = \Drupal::languageManager()->getLanguage('cs');
     $language->default = TRUE;
     language_save($language);
     language_delete('en');
diff --git a/core/modules/node/src/NodeGrantDatabaseStorage.php b/core/modules/node/src/NodeGrantDatabaseStorage.php
index 9503713..e7b3c8e 100644
--- a/core/modules/node/src/NodeGrantDatabaseStorage.php
+++ b/core/modules/node/src/NodeGrantDatabaseStorage.php
@@ -179,7 +179,7 @@ public function write(NodeInterface $node, array $grants, $realm = NULL, $delete
           continue;
         }
         if (isset($grant['langcode'])) {
-          $grant_languages = array($grant['langcode'] => language_load($grant['langcode']));
+          $grant_languages = array($grant['langcode'] => \Drupal::languageManager()->getLanguage($grant['langcode']));
         }
         else {
           $grant_languages = $node->getTranslationLanguages(TRUE);
diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index 3409383..a99b792 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -15,6 +15,7 @@
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\State\StateInterface;
 use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Access\AccessibleInterface;
 use Drupal\Core\Database\Query\Condition;
@@ -113,6 +114,7 @@ static public function create(ContainerInterface $container, array $configuratio
       $plugin_definition,
       $container->get('database'),
       $container->get('entity.manager'),
+      $container->get('language_manager'),
       $container->get('module_handler'),
       $container->get('config.factory')->get('search.settings'),
       $container->get('state'),
@@ -133,6 +135,8 @@ static public function create(ContainerInterface $container, array $configuratio
    *   A database connection object.
    * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
    *   An entity manager object.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   A module manager object.
    * @param \Drupal\Core\Config\Config $search_settings
@@ -142,9 +146,10 @@ static public function create(ContainerInterface $container, array $configuratio
    * @param \Drupal\Core\Session\AccountInterface $account
    *   The $account object to use for checking for access to advanced search.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, Connection $database, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler, Config $search_settings, StateInterface $state, AccountInterface $account = NULL) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, Connection $database, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager, ModuleHandlerInterface $module_handler, Config $search_settings, StateInterface $state, AccountInterface $account = NULL) {
     $this->database = $database;
     $this->entityManager = $entity_manager;
+    $this->languageManager = $language_manager;
     $this->moduleHandler = $module_handler;
     $this->searchSettings = $search_settings;
     $this->state = $state;
@@ -273,7 +278,7 @@ public function execute() {
 
       $extra = $this->moduleHandler->invokeAll('node_search_result', array($node, $item->langcode));
 
-      $language = language_load($item->langcode);
+      $language = $this->languageManager->getLanguage($item->langcode);
       $username = array(
         '#theme' => 'username',
         '#account' => $node->getOwner(),
diff --git a/core/modules/node/src/Plugin/views/field/Language.php b/core/modules/node/src/Plugin/views/field/Language.php
index af705cb..95e1110 100644
--- a/core/modules/node/src/Plugin/views/field/Language.php
+++ b/core/modules/node/src/Plugin/views/field/Language.php
@@ -43,7 +43,7 @@ public function render(ResultRow $values) {
     // @todo: Drupal Core dropped native language until config translation is
     // ready, see http://drupal.org/node/1616594.
     $value = $this->getValue($values);
-    $language = language_load($value);
+    $language = \Drupal::languageManager()->getLanguage($value);
     $value = $language ? $language->name : '';
     return $this->renderLink($value, $values);
   }
diff --git a/core/modules/node/src/Plugin/views/field/Node.php b/core/modules/node/src/Plugin/views/field/Node.php
index b85cd02..2f6bd9e 100644
--- a/core/modules/node/src/Plugin/views/field/Node.php
+++ b/core/modules/node/src/Plugin/views/field/Node.php
@@ -72,7 +72,7 @@ protected function renderLink($data, ResultRow $values) {
         $this->options['alter']['make_link'] = TRUE;
         $this->options['alter']['path'] = "node/" . $this->getValue($values, 'nid');
         if (isset($this->aliases['langcode'])) {
-          $languages = language_list();
+          $languages = \Drupal::languageManager()->getLanguages();
           $langcode = $this->getValue($values, 'langcode');
           if (isset($languages[$langcode])) {
             $this->options['alter']['language'] = $languages[$langcode];
diff --git a/core/modules/system/src/Tests/Menu/MenuRouterRebuildTest.php b/core/modules/system/src/Tests/Menu/MenuRouterRebuildTest.php
index e56796f..34cd0cc 100644
--- a/core/modules/system/src/Tests/Menu/MenuRouterRebuildTest.php
+++ b/core/modules/system/src/Tests/Menu/MenuRouterRebuildTest.php
@@ -39,7 +39,7 @@ function setUp() {
    */
   public function testMenuRouterRebuildContext() {
     // Enter a language context before rebuilding the menu router tables.
-    \Drupal::languageManager()->setConfigOverrideLanguage(language_load('nl'));
+    \Drupal::languageManager()->setConfigOverrideLanguage(\Drupal::languageManager()->getLanguage('nl'));
     \Drupal::service('router.builder')->rebuild();
 
     // Check that the language context was not used for building the menu item.
diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index 8ff4b54..2f4b363 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -2411,7 +2411,7 @@ function hook_tokens($type, $tokens, array $data = array(), array $options = arr
 
   $url_options = array('absolute' => TRUE);
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
@@ -2484,7 +2484,7 @@ function hook_tokens_alter(array &$replacements, array $context) {
   $options = $context['options'];
 
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
diff --git a/core/modules/system/system.tokens.inc b/core/modules/system/system.tokens.inc
index 404cc13..e4d76ec 100644
--- a/core/modules/system/system.tokens.inc
+++ b/core/modules/system/system.tokens.inc
@@ -92,7 +92,7 @@ function system_tokens($type, $tokens, array $data = array(), array $options = a
 
   $url_options = array('absolute' => TRUE);
   if (isset($options['langcode'])) {
-    $url_options['language'] = language_load($options['langcode']);
+    $url_options['language'] = \Drupal::languageManager()->getLanguage($options['langcode']);
     $langcode = $options['langcode'];
   }
   else {
diff --git a/core/modules/taxonomy/src/Plugin/views/field/Language.php b/core/modules/taxonomy/src/Plugin/views/field/Language.php
index 13e3d23..f95f492 100644
--- a/core/modules/taxonomy/src/Plugin/views/field/Language.php
+++ b/core/modules/taxonomy/src/Plugin/views/field/Language.php
@@ -21,7 +21,7 @@ class Language extends Taxonomy {
    */
   public function render(ResultRow $values) {
     $value = $this->getValue($values);
-    $language = language_load($value);
+    $language = \Drupal::languageManager()->getLanguage($value);
     $value = $language ? $language->name : '';
 
     return $this->renderLink($this->sanitizeValue($value), $values);
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index 307cfc2..7ba3344 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -367,13 +367,13 @@ public function getTimeZone() {
    * {@inheritdoc}
    */
   function getPreferredLangcode($default = NULL) {
-    $language_list = language_list();
+    $language_list = \Drupal::languageManager()->getLanguages();
     $preferred_langcode = $this->get('preferred_langcode')->value;
     if (!empty($preferred_langcode) && isset($language_list[$preferred_langcode])) {
       return $language_list[$preferred_langcode]->id;
     }
     else {
-      return $default ? $default : language_default()->id;
+      return $default ? $default : \Drupal::languageManager()->getDefaultLanguage()->id;
     }
   }
 
@@ -381,13 +381,13 @@ function getPreferredLangcode($default = NULL) {
    * {@inheritdoc}
    */
   function getPreferredAdminLangcode($default = NULL) {
-    $language_list = language_list();
+    $language_list = \Drupal::languageManager()->getLanguages();
     $preferred_langcode = $this->get('preferred_admin_langcode')->value;
     if (!empty($preferred_langcode) && isset($language_list[$preferred_langcode])) {
       return $language_list[$preferred_langcode]->id;
     }
     else {
-      return $default ? $default : language_default()->id;
+      return $default ? $default : \Drupal::languageManager()->getDefaultLanguage()->id;
     }
   }
 
diff --git a/core/modules/user/src/Plugin/views/field/Language.php b/core/modules/user/src/Plugin/views/field/Language.php
index 0e287ab..e92d6e7 100644
--- a/core/modules/user/src/Plugin/views/field/Language.php
+++ b/core/modules/user/src/Plugin/views/field/Language.php
@@ -30,10 +30,10 @@ protected function renderLink($data, ResultRow $values) {
       }
     }
     if (empty($data)) {
-      $lang = language_default();
+      $lang = \Drupal::languageManager()->getDefaultLanguage();
     }
     else {
-      $lang = language_list();
+      $lang = \Drupal::languageManager()->getLanguages();
       $lang = $lang[$data];
     }
 
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index 288a84b..9e0ce1e 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -1256,7 +1256,7 @@ public function optionsSummary(&$categories, &$options) {
         LanguageInterface::LANGCODE_NOT_SPECIFIED => t('Language neutral'),
     );
     if (\Drupal::moduleHandler()->moduleExists('language')) {
-      $languages = array_merge($languages, language_list());
+      $languages = array_merge($languages, \Drupal::languageManager()->getLanguages());
     }
     $options['field_langcode'] = array(
       'category' => 'other',
diff --git a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
index 6d5e3fa..8265f1e 100644
--- a/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
+++ b/core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
@@ -648,7 +648,7 @@ protected function instantiateView($form, &$form_state) {
       'label' => $form_state['values']['label'],
       'description' => $form_state['values']['description'],
       'base_table' => $this->base_table,
-      'langcode' => language_default()->id,
+      'langcode' => \Drupal::languageManager()->getDefaultLanguage()->id,
     );
 
     $view = entity_create('view', $values);
