diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index b125ae8..15ed4ab 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -25,7 +25,7 @@
 use Symfony\Component\DependencyInjection\Exception\RuntimeException as DependencyInjectionRuntimeException;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Lock\DatabaseLockBackend;
 use Drupal\Core\Lock\LockBackendInterface;
 use Drupal\Core\Session\AnonymousUserSession;
@@ -1822,7 +1822,7 @@ function language($type) {
  * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
  *   Use \Drupal::languageManager()->getLanguages().
  */
-function language_list($flags = Language::STATE_CONFIGURABLE) {
+function language_list($flags = LanguageInterface::STATE_CONFIGURABLE) {
   return \Drupal::languageManager()->getLanguages($flags);
 }
 
@@ -1832,7 +1832,7 @@ function language_list($flags = Language::STATE_CONFIGURABLE) {
  * @param string $langcode
  *   The language code.
  *
- * @return \Drupal\core\Language\Language|null
+ * @return \Drupal\core\Language\LanguageInterface|null
  *   A fully-populated language object or NULL.
  *
  * @see \Drupal\Core\Language\LanguageManager::getLanguage()
@@ -1847,7 +1847,7 @@ function language_load($langcode) {
 /**
  * Returns the default language used on the site.
  *
- * @return \Drupal\Core\Language\Language
+ * @return \Drupal\Core\Language\LanguageInterface
  *   A language object.
  *
  * @see \Drupal\Core\Language\LanguageManager::getLanguage()
diff --git a/core/includes/common.inc b/core/includes/common.inc
index 5572e54..f1b4a9b 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -19,7 +19,7 @@
 use Drupal\Component\Utility\Tags;
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Cache\Cache;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Site\Settings;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpFoundation\Request;
@@ -415,7 +415,7 @@ function check_url($uri) {
  * Arbitrary elements may be added using the $args associative array.
  */
 function format_rss_channel($title, $link, $description, $items, $langcode = NULL, $args = array()) {
-  $langcode = $langcode ? $langcode : \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT)->id;
+  $langcode = $langcode ? $langcode : \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id;
 
   $output = "<channel>\n";
   $output .= ' <title>' . String::checkPlain($title) . "</title>\n";
@@ -1773,7 +1773,7 @@ function _drupal_add_js($data = NULL, $options = NULL) {
             'currentPath' => $current_path,
             'currentPathIsAdmin' => $current_path_is_admin,
             'isFront' => drupal_is_front_page(),
-            'currentLanguage' => \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_URL)->id,
+            'currentLanguage' => \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_URL)->id,
           );
           if (!empty($current_query)) {
             ksort($current_query);
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 694a8a9..4372b85 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -800,14 +800,14 @@ function update_replace_permissions($replace) {
  *
  * @param $flags
  *   (optional) Specifies the state of the languages that have to be returned.
- *   It can be: Language::STATE_CONFIGURABLE, Language::STATE_LOCKED,
- *   Language::STATE_ALL.
+ *   It can be: LanguageInterface::STATE_CONFIGURABLE, LanguageInterface::STATE_LOCKED,
+ *   LanguageInterface::STATE_ALL.
  *
  * @return array
  *   An associative array of languages, keyed by the language code, ordered by
  *   weight ascending and name ascending.
  */
-function update_language_list($flags = Language::STATE_CONFIGURABLE) {
+function update_language_list($flags = LanguageInterface::STATE_CONFIGURABLE) {
 
   $languages = &drupal_static(__FUNCTION__);
 
@@ -853,7 +853,7 @@ function update_language_list($flags = Language::STATE_CONFIGURABLE) {
   $filtered_languages = array();
 
   // Add the site's default language if flagged as allowed value.
-  if ($flags & Language::STATE_SITE_DEFAULT) {
+  if ($flags & LanguageInterface::STATE_SITE_DEFAULT) {
     $default = isset($default) ? $default : \Drupal::languageManager()->getDefaultLanguage();
     // Rename the default language.
     $default->name = t("Site's default language (@lang_name)", array('@lang_name' => $default->name));
@@ -861,7 +861,7 @@ function update_language_list($flags = Language::STATE_CONFIGURABLE) {
   }
 
   foreach ($languages as $langcode => $language) {
-    if (($language->locked && !($flags & Language::STATE_LOCKED)) || (!$language->locked && !($flags & Language::STATE_CONFIGURABLE))) {
+    if (($language->locked && !($flags & LanguageInterface::STATE_LOCKED)) || (!$language->locked && !($flags & LanguageInterface::STATE_CONFIGURABLE))) {
       continue;
      }
     $filtered_languages[$langcode] = $language;
diff --git a/core/lib/Drupal.php b/core/lib/Drupal.php
index 83fe15f..57cf2ef 100644
--- a/core/lib/Drupal.php
+++ b/core/lib/Drupal.php
@@ -461,7 +461,8 @@ class Drupal {
    *     displayed outside the site, such as in an RSS feed.
    *   - 'language': An optional language object used to look up the alias
    *     for the URL. If $options['language'] is omitted, the language will be
-   *     obtained from \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_URL).
+   *     obtained from
+   *     \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_URL).
    *   - 'https': Whether this URL should point to a secure location. If not
    *     defined, the current scheme is used, so the user stays on HTTP or HTTPS
    *     respectively. if mixed mode sessions are permitted, TRUE enforces HTTPS
diff --git a/core/lib/Drupal/Core/Config/ConfigModuleOverridesEvent.php b/core/lib/Drupal/Core/Config/ConfigModuleOverridesEvent.php
index 26692ea..a2c65d5 100644
--- a/core/lib/Drupal/Core/Config/ConfigModuleOverridesEvent.php
+++ b/core/lib/Drupal/Core/Config/ConfigModuleOverridesEvent.php
@@ -8,7 +8,7 @@
 namespace Drupal\Core\Config;
 
 use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\EventDispatcher\Event;
 
 /**
@@ -33,7 +33,7 @@ class ConfigModuleOverridesEvent extends Event {
   /**
    * The Language object used to override configuration data.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $language;
 
@@ -42,10 +42,10 @@ class ConfigModuleOverridesEvent extends Event {
    *
    * @param array $names
    *   A list of configuration names.
-   * @param \Drupal\Core\Language\Language
+   * @param \Drupal\Core\Language\LanguageInterface
    *   (optional) The language for this configuration.
    */
-  public function __construct(array $names, Language $language = NULL) {
+  public function __construct(array $names, LanguageInterface $language = NULL) {
     $this->names = $names;
     $this->language = $language;
     $this->overrides = array();
@@ -64,7 +64,7 @@ class ConfigModuleOverridesEvent extends Event {
   /**
    * Gets configuration language.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   The configuration language object.
    */
   public function getLanguage() {
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
index 318ad7a..15eba92 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityBase.php
@@ -14,7 +14,7 @@
 use Drupal\Core\Config\ConfigDuplicateUUIDException;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityWithPluginBagsInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Plugin\PluginDependencyTrait;
 
 /**
@@ -83,7 +83,7 @@
    *
    * @var string
    */
-  public $langcode = Language::LANGCODE_NOT_SPECIFIED;
+  public $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
 
   /**
    * Overrides Entity::__construct().
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 1895cfd..adbfbd9 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -10,7 +10,7 @@
 use Drupal\Component\Utility\String;
 use Drupal\Core\Entity\Plugin\DataType\EntityReference;
 use Drupal\Core\Entity\TypedData\EntityDataDefinition;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
 
@@ -38,7 +38,7 @@
    * The plain data values of the contained fields.
    *
    * This always holds the original, unchanged values of the entity. The values
-   * are keyed by language code, whereas Language::LANGCODE_DEFAULT is used for
+   * are keyed by language code, whereas LanguageInterface::LANGCODE_DEFAULT is used for
    * values in default language.
    *
    * @todo: Add methods for getting original fields and for determining
@@ -80,7 +80,7 @@
    *
    * @var string
    */
-  protected $activeLangcode = Language::LANGCODE_DEFAULT;
+  protected $activeLangcode = LanguageInterface::LANGCODE_DEFAULT;
 
   /**
    * Local cache for the default language code.
@@ -141,22 +141,22 @@
   public function __construct(array $values, $entity_type, $bundle = FALSE, $translations = array()) {
     $this->entityTypeId = $entity_type;
     $this->entityKeys['bundle'] = $bundle ? $bundle : $this->entityTypeId;
-    $this->languages = $this->languageManager()->getLanguages(Language::STATE_ALL);
+    $this->languages = $this->languageManager()->getLanguages(LanguageInterface::STATE_ALL);
 
     foreach ($values as $key => $value) {
       // If the key matches an existing property set the value to the property
       // to set properties like isDefaultRevision.
       // @todo: Should this be converted somehow?
-      if (property_exists($this, $key) && isset($value[Language::LANGCODE_DEFAULT])) {
-        $this->$key = $value[Language::LANGCODE_DEFAULT];
+      if (property_exists($this, $key) && isset($value[LanguageInterface::LANGCODE_DEFAULT])) {
+        $this->$key = $value[LanguageInterface::LANGCODE_DEFAULT];
       }
     }
 
     $this->values = $values;
     foreach ($this->getEntityType()->getKeys() as $key => $field_name) {
       if (isset($this->values[$field_name])) {
-        if (is_array($this->values[$field_name]) && isset($this->values[$field_name][Language::LANGCODE_DEFAULT])) {
-          $this->entityKeys[$key] = $this->values[$field_name][Language::LANGCODE_DEFAULT];
+        if (is_array($this->values[$field_name]) && isset($this->values[$field_name][LanguageInterface::LANGCODE_DEFAULT])) {
+          $this->entityKeys[$key] = $this->values[$field_name][LanguageInterface::LANGCODE_DEFAULT];
         }
       }
     }
@@ -164,11 +164,11 @@
     // Initialize translations. Ensure we have at least an entry for the default
     // language.
     $data = array('status' => static::TRANSLATION_EXISTING);
-    $this->translations[Language::LANGCODE_DEFAULT] = $data;
+    $this->translations[LanguageInterface::LANGCODE_DEFAULT] = $data;
     $this->setDefaultLangcode();
     if ($translations) {
       foreach ($translations as $langcode) {
-        if ($langcode != $this->defaultLangcode && $langcode != Language::LANGCODE_DEFAULT) {
+        if ($langcode != $this->defaultLangcode && $langcode != LanguageInterface::LANGCODE_DEFAULT) {
           $this->translations[$langcode] = $data;
         }
       }
@@ -427,14 +427,14 @@
         throw new \InvalidArgumentException('Field ' . String::checkPlain($name) . ' is unknown.');
       }
       // Non-translatable fields are always stored with
-      // Language::LANGCODE_DEFAULT as key.
+      // LanguageInterface::LANGCODE_DEFAULT as key.
 
-      $default = $langcode == Language::LANGCODE_DEFAULT;
+      $default = $langcode == LanguageInterface::LANGCODE_DEFAULT;
       if (!$default && !$definition->isTranslatable()) {
-        if (!isset($this->fields[$name][Language::LANGCODE_DEFAULT])) {
-          $this->fields[$name][Language::LANGCODE_DEFAULT] = $this->getTranslatedField($name, Language::LANGCODE_DEFAULT);
+        if (!isset($this->fields[$name][LanguageInterface::LANGCODE_DEFAULT])) {
+          $this->fields[$name][LanguageInterface::LANGCODE_DEFAULT] = $this->getTranslatedField($name, LanguageInterface::LANGCODE_DEFAULT);
         }
-        $this->fields[$name][$langcode] = &$this->fields[$name][Language::LANGCODE_DEFAULT];
+        $this->fields[$name][$langcode] = &$this->fields[$name][LanguageInterface::LANGCODE_DEFAULT];
       }
       else {
         $value = NULL;
@@ -446,7 +446,7 @@
           // $this->defaultLangcode might not be set if we are initializing the
           // default language code cache, in which case there is no valid
           // langcode to assign.
-          $field_langcode = isset($this->defaultLangcode) ? $this->defaultLangcode : Language::LANGCODE_NOT_SPECIFIED;
+          $field_langcode = isset($this->defaultLangcode) ? $this->defaultLangcode : LanguageInterface::LANGCODE_NOT_SPECIFIED;
         }
         else {
           $field_langcode = $langcode;
@@ -554,9 +554,9 @@
    */
   public function language() {
     $language = NULL;
-    if ($this->activeLangcode != Language::LANGCODE_DEFAULT) {
+    if ($this->activeLangcode != LanguageInterface::LANGCODE_DEFAULT) {
       if (!isset($this->languages[$this->activeLangcode])) {
-        $this->languages += $this->languageManager()->getLanguages(Language::STATE_ALL);
+        $this->languages += $this->languageManager()->getLanguages(LanguageInterface::STATE_ALL);
       }
       $language = $this->languages[$this->activeLangcode];
     }
@@ -576,25 +576,22 @@
     }
     if (empty($this->defaultLangcode)) {
       // Make sure we return a proper language object.
-      $this->defaultLangcode = Language::LANGCODE_NOT_SPECIFIED;
+      $this->defaultLangcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
     }
     // This needs to be initialized manually as it is skipped when instantiating
     // the language field object to avoid infinite recursion.
     if (!empty($this->fields['langcode'])) {
-      $this->fields['langcode'][Language::LANGCODE_DEFAULT]->setLangcode($this->defaultLangcode);
+      $this->fields['langcode'][LanguageInterface::LANGCODE_DEFAULT]->setLangcode($this->defaultLangcode);
     }
   }
 
   /**
    * Updates language for already instantiated fields.
-   *
-   * @return \Drupal\Core\Language\Language
-   *   A language object.
    */
   protected function updateFieldLangcodes($langcode) {
     foreach ($this->fields as $name => $items) {
-      if (!empty($items[Language::LANGCODE_DEFAULT])) {
-        $items[Language::LANGCODE_DEFAULT]->setLangcode($langcode);
+      if (!empty($items[LanguageInterface::LANGCODE_DEFAULT])) {
+        $items[LanguageInterface::LANGCODE_DEFAULT]->setLangcode($langcode);
       }
     }
   }
@@ -630,8 +627,8 @@
   public function getTranslation($langcode) {
     // Ensure we always use the default language code when dealing with the
     // original entity language.
-    if ($langcode != Language::LANGCODE_DEFAULT && $langcode == $this->defaultLangcode) {
-      $langcode = Language::LANGCODE_DEFAULT;
+    if ($langcode != LanguageInterface::LANGCODE_DEFAULT && $langcode == $this->defaultLangcode) {
+      $langcode = LanguageInterface::LANGCODE_DEFAULT;
     }
 
     // Populate entity translation object cache so it will be available for all
@@ -674,7 +671,7 @@
    * {@inheritdoc}
    */
   public function getUntranslated() {
-    return $this->getTranslation(Language::LANGCODE_DEFAULT);
+    return $this->getTranslation(LanguageInterface::LANGCODE_DEFAULT);
   }
 
   /**
@@ -721,7 +718,7 @@
    */
   public function hasTranslation($langcode) {
     if ($langcode == $this->defaultLangcode) {
-      $langcode = Language::LANGCODE_DEFAULT;
+      $langcode = LanguageInterface::LANGCODE_DEFAULT;
     }
     return !empty($this->translations[$langcode]['status']);
   }
@@ -766,7 +763,7 @@
    * {@inheritdoc}
    */
   public function removeTranslation($langcode) {
-    if (isset($this->translations[$langcode]) && $langcode != Language::LANGCODE_DEFAULT && $langcode != $this->defaultLangcode) {
+    if (isset($this->translations[$langcode]) && $langcode != LanguageInterface::LANGCODE_DEFAULT && $langcode != $this->defaultLangcode) {
       foreach ($this->getFieldDefinitions() as $name => $definition) {
         if ($definition->isTranslatable()) {
           unset($this->values[$name][$langcode]);
@@ -785,7 +782,7 @@
    * {@inheritdoc}
    */
   public function initTranslation($langcode) {
-    if ($langcode != Language::LANGCODE_DEFAULT && $langcode != $this->defaultLangcode) {
+    if ($langcode != LanguageInterface::LANGCODE_DEFAULT && $langcode != $this->defaultLangcode) {
       $this->translations[$langcode]['status'] = static::TRANSLATION_EXISTING;
     }
   }
@@ -795,7 +792,7 @@
    */
   public function getTranslationLanguages($include_default = TRUE) {
     $translations = array_filter($this->translations, function($translation) { return $translation['status']; });
-    unset($translations[Language::LANGCODE_DEFAULT]);
+    unset($translations[LanguageInterface::LANGCODE_DEFAULT]);
 
     if ($include_default) {
       $translations[$this->defaultLangcode] = TRUE;
@@ -957,7 +954,7 @@
         // we retain just the original value, as references will be recreated
         // later as needed.
         if (!$definitions[$name]->isTranslatable() && count($values) > 1) {
-          $values = array_intersect_key($values, array(Language::LANGCODE_DEFAULT => TRUE));
+          $values = array_intersect_key($values, array(LanguageInterface::LANGCODE_DEFAULT => TRUE));
         }
         foreach ($values as $langcode => $items) {
           $this->fields[$name][$langcode] = clone $items;
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
index 2214894..c598b3c 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Entity\Query\QueryInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\FieldConfigUpdateForbiddenException;
 use Drupal\field\FieldConfigInterface;
 use Drupal\field\FieldInstanceConfigInterface;
@@ -163,12 +163,12 @@ class ContentEntityDatabaseStorage extends ContentEntityStorageBase {
         // that store several properties).
         if ($field_name = strstr($name, '__', TRUE)) {
           $property_name = substr($name, strpos($name, '__') + 2);
-          $entities[$id][$field_name][Language::LANGCODE_DEFAULT][$property_name] = $value;
+          $entities[$id][$field_name][LanguageInterface::LANGCODE_DEFAULT][$property_name] = $value;
         }
         else {
           // Handle columns named directly after the field (e.g if the field
           // type only stores one property).
-          $entities[$id][$name][Language::LANGCODE_DEFAULT] = $value;
+          $entities[$id][$name][LanguageInterface::LANGCODE_DEFAULT] = $value;
         }
       }
       // If we have no multilingual values we can instantiate entity objecs
@@ -209,7 +209,7 @@ class ContentEntityDatabaseStorage extends ContentEntityStorageBase {
         // Get the revision IDs.
         $revision_ids = array();
         foreach ($entities as $values) {
-          $revision_ids[] = is_object($values) ? $values->getRevisionId() : $values[$this->revisionKey][Language::LANGCODE_DEFAULT];
+          $revision_ids[] = is_object($values) ? $values->getRevisionId() : $values[$this->revisionKey][LanguageInterface::LANGCODE_DEFAULT];
         }
         $query->condition($this->revisionKey, $revision_ids);
       }
@@ -228,8 +228,8 @@ class ContentEntityDatabaseStorage extends ContentEntityStorageBase {
         $id = $values[$this->idKey];
 
         // Field values in default language are stored with
-        // Language::LANGCODE_DEFAULT as key.
-        $langcode = empty($values['default_langcode']) ? $values['langcode'] : Language::LANGCODE_DEFAULT;
+        // LanguageInterface::LANGCODE_DEFAULT as key.
+        $langcode = empty($values['default_langcode']) ? $values['langcode'] : LanguageInterface::LANGCODE_DEFAULT;
         $translations[$id][$langcode] = TRUE;
 
         foreach (array_keys($field_definitions) as $field_name) {
@@ -255,7 +255,7 @@ class ContentEntityDatabaseStorage extends ContentEntityStorageBase {
       }
 
       foreach ($entities as $id => $values) {
-        $bundle = $this->bundleKey ? $values[$this->bundleKey][Language::LANGCODE_DEFAULT] : FALSE;
+        $bundle = $this->bundleKey ? $values[$this->bundleKey][LanguageInterface::LANGCODE_DEFAULT] : FALSE;
         // Turn the record into an entity class.
         $entities[$id] = new $this->entityClass($values, $this->entityTypeId, $bundle, array_keys($translations[$id]));
       }
@@ -738,7 +738,7 @@ class ContentEntityDatabaseStorage extends ContentEntityStorageBase {
     }
 
     // Load field data.
-    $langcodes = array_keys(language_list(Language::STATE_ALL));
+    $langcodes = array_keys(language_list(LanguageInterface::STATE_ALL));
     foreach ($fields as $field_name => $field) {
       $table = $load_current ? static::_fieldTableName($field) : static::_fieldRevisionTableName($field);
 
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index 557ddf3..8006477 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -17,6 +17,7 @@
 use Drupal\Core\Entity\Exception\NoCorrespondingEntityClassException;
 use Drupal\Core\Entity\Exception\UndefinedLinkTemplateException;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
 
@@ -283,7 +284,7 @@
     }
     return $this->entityManager()
       ->getAccessController($this->entityTypeId)
-      ->access($this, $operation, Language::LANGCODE_DEFAULT, $account);
+      ->access($this, $operation, LanguageInterface::LANGCODE_DEFAULT, $account);
   }
 
   /**
@@ -293,7 +294,7 @@
     $language = $this->languageManager()->getLanguage($this->langcode);
     if (!$language) {
       // Make sure we return a proper language object.
-      $language = new Language(array('id' => Language::LANGCODE_NOT_SPECIFIED));
+      $language = new Language(array('id' => LanguageInterface::LANGCODE_NOT_SPECIFIED));
     }
     return $language;
   }
diff --git a/core/lib/Drupal/Core/Entity/EntityAccessController.php b/core/lib/Drupal/Core/Entity/EntityAccessController.php
index b092914..f20ef9c 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessController.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessController.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 
 /**
@@ -54,7 +54,7 @@ class EntityAccessController extends EntityControllerBase implements EntityAcces
   /**
    * {@inheritdoc}
    */
-  public function access(EntityInterface $entity, $operation, $langcode = Language::LANGCODE_DEFAULT, AccountInterface $account = NULL) {
+  public function access(EntityInterface $entity, $operation, $langcode = LanguageInterface::LANGCODE_DEFAULT, AccountInterface $account = NULL) {
     $account = $this->prepareUser($account);
 
     if (($access = $this->getCache($entity->uuid(), $operation, $langcode, $account)) !== NULL) {
@@ -203,7 +203,7 @@ class EntityAccessController extends EntityControllerBase implements EntityAcces
   public function createAccess($entity_bundle = NULL, AccountInterface $account = NULL, array $context = array()) {
     $account = $this->prepareUser($account);
     $context += array(
-      'langcode' => Language::LANGCODE_DEFAULT,
+      'langcode' => LanguageInterface::LANGCODE_DEFAULT,
     );
 
     $cid = $entity_bundle ? 'create:' . $entity_bundle : 'create';
diff --git a/core/lib/Drupal/Core/Entity/EntityAccessControllerInterface.php b/core/lib/Drupal/Core/Entity/EntityAccessControllerInterface.php
index 4f1b723..2a5851f 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessControllerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessControllerInterface.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 
 /**
@@ -31,7 +31,7 @@
    *   Usually one of "view", "update" or "delete".
    * @param string $langcode
    *   (optional) The language code for which to check access. Defaults to
-   *   Language::LANGCODE_DEFAULT.
+   *   LanguageInterface::LANGCODE_DEFAULT.
    * @param \Drupal\Core\Session\AccountInterface $account
    *   (optional) The user session for which to check access, or NULL to check
    *   access for the current user. Defaults to NULL.
@@ -39,7 +39,7 @@
    * @return bool
    *   TRUE if access was granted, FALSE otherwise.
    */
-  public function access(EntityInterface $entity, $operation, $langcode = Language::LANGCODE_DEFAULT, AccountInterface $account = NULL);
+  public function access(EntityInterface $entity, $operation, $langcode = LanguageInterface::LANGCODE_DEFAULT, AccountInterface $account = NULL);
 
   /**
    * Checks access to create an entity.
diff --git a/core/lib/Drupal/Core/Entity/EntityInterface.php b/core/lib/Drupal/Core/Entity/EntityInterface.php
index 4a2f69c..3964492 100644
--- a/core/lib/Drupal/Core/Entity/EntityInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityInterface.php
@@ -37,7 +37,7 @@
   /**
    * Returns the language of the entity.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   The language object.
    */
   public function language();
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index 93e9fcf..c82a558 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -16,7 +16,7 @@
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Plugin\DefaultPluginManager;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\StringTranslation\TranslationInterface;
@@ -732,7 +732,7 @@ class EntityManager extends DefaultPluginManager implements EntityManagerInterfa
 
     if ($entity instanceof TranslatableInterface) {
       if (empty($langcode)) {
-        $langcode = $this->languageManager->getCurrentLanguage(Language::TYPE_CONTENT)->id;
+        $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id;
       }
 
       // Retrieve language fallback candidates to perform the entity language
@@ -743,7 +743,7 @@ class EntityManager extends DefaultPluginManager implements EntityManagerInterfa
 
       // Ensure the default language has the proper language code.
       $default_language = $entity->getUntranslated()->language();
-      $candidates[$default_language->id] = Language::LANGCODE_DEFAULT;
+      $candidates[$default_language->id] = LanguageInterface::LANGCODE_DEFAULT;
 
       // Return the most fitting entity translation.
       foreach ($candidates as $candidate) {
@@ -797,7 +797,7 @@ class EntityManager extends DefaultPluginManager implements EntityManagerInterfa
   protected function getAllDisplayModesByEntityType($display_type) {
     if (!isset($this->displayModeInfo[$display_type])) {
       $key = 'entity_' . $display_type . '_info';
-      $langcode = $this->languageManager->getCurrentLanguage(Language::TYPE_INTERFACE)->id;
+      $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_INTERFACE)->id;
       if ($cache = $this->cacheBackend->get("$key:$langcode")) {
         $this->displayModeInfo[$display_type] = $cache->data;
       }
diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
index cd1cbfb..71d3308 100644
--- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
@@ -13,7 +13,7 @@
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Field\FieldItemInterface;
 use Drupal\Core\Field\FieldItemListInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\Core\Render\Element;
@@ -109,7 +109,7 @@ class EntityViewBuilder extends EntityControllerBase implements EntityController
    */
   public function viewMultiple(array $entities = array(), $view_mode = 'full', $langcode = NULL) {
     if (!isset($langcode)) {
-      $langcode = $this->languageManager->getCurrentLanguage(Language::TYPE_CONTENT)->id;
+      $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id;
     }
 
     $build_list = array(
diff --git a/core/lib/Drupal/Core/Field/FieldItemList.php b/core/lib/Drupal/Core/Field/FieldItemList.php
index 39be1ee..2e0b442 100644
--- a/core/lib/Drupal/Core/Field/FieldItemList.php
+++ b/core/lib/Drupal/Core/Field/FieldItemList.php
@@ -11,7 +11,7 @@
 use Drupal\Core\TypedData\DataDefinitionInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
 use Drupal\Core\TypedData\Plugin\DataType\ItemList;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Represents an entity field; that is, a list of field item objects.
@@ -36,7 +36,7 @@ class FieldItemList extends ItemList implements FieldItemListInterface {
    *
    * @var string
    */
-  protected $langcode = Language::LANGCODE_NOT_SPECIFIED;
+  protected $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
 
   /**
    * {@inheritdoc}
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
index e3192b2..719a0d6 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Field\FieldItemBase;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\TypedData\DataDefinition;
 use Drupal\Core\TypedData\DataReferenceDefinition;
 
@@ -92,7 +92,7 @@ class LanguageItem extends FieldItemBase {
    */
   public function applyDefaultValue($notify = TRUE) {
     // Default to LANGCODE_NOT_SPECIFIED.
-    $this->setValue(array('value' => Language::LANGCODE_NOT_SPECIFIED), $notify);
+    $this->setValue(array('value' => LanguageInterface::LANGCODE_NOT_SPECIFIED), $notify);
     return $this;
   }
 
diff --git a/core/lib/Drupal/Core/Language/LanguageDefault.php b/core/lib/Drupal/Core/Language/LanguageDefault.php
index a72b8b1..1ca8009 100644
--- a/core/lib/Drupal/Core/Language/LanguageDefault.php
+++ b/core/lib/Drupal/Core/Language/LanguageDefault.php
@@ -22,7 +22,7 @@ class LanguageDefault {
   /**
    * The default language.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $language;
 
@@ -39,7 +39,7 @@ class LanguageDefault {
   /**
    * Gets the default language.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   The default language.
    */
   public function get() {
@@ -49,10 +49,10 @@ class LanguageDefault {
   /**
    * Sets the default language.
    *
-   * @param \Drupal\Core\Language\Language $language
+   * @param \Drupal\Core\Language\LanguageInterface $language
    *   The default language.
    */
-  public function set(Language $language) {
+  public function set(LanguageInterface $language) {
     $language->default = TRUE;
     $this->language = $language;
   }
diff --git a/core/lib/Drupal/Core/Language/LanguageManager.php b/core/lib/Drupal/Core/Language/LanguageManager.php
index 3d943d0..d596853 100644
--- a/core/lib/Drupal/Core/Language/LanguageManager.php
+++ b/core/lib/Drupal/Core/Language/LanguageManager.php
@@ -40,7 +40,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
   /**
    * Constructs the language manager.
    *
-   * @param \Drupal\Core\Language\Language $default_language
+   * @param \Drupal\Core\Language\LanguageDefault $default_language
    *   The default language.
    */
   public function __construct(LanguageDefault $default_language) {
@@ -80,13 +80,13 @@ class LanguageManager extends DependencySerialization implements LanguageManager
    * {@inheritdoc}
    */
   public function getLanguageTypes() {
-    return array(Language::TYPE_INTERFACE, Language::TYPE_CONTENT, Language::TYPE_URL);
+    return array(LanguageInterface::TYPE_INTERFACE, LanguageInterface::TYPE_CONTENT, LanguageInterface::TYPE_URL);
   }
 
   /**
    * {@inheritdoc}
    */
-  public function getCurrentLanguage($type = Language::TYPE_INTERFACE) {
+  public function getCurrentLanguage($type = LanguageInterface::TYPE_INTERFACE) {
     return $this->getDefaultLanguage();
   }
 
@@ -107,7 +107,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
   /**
    * {@inheritdoc}
    */
-  public function getLanguages($flags = Language::STATE_CONFIGURABLE) {
+  public function getLanguages($flags = LanguageInterface::STATE_CONFIGURABLE) {
     // Initialize master language list.
     if (!isset($this->languages)) {
       // No language module, so use the default language only.
@@ -123,7 +123,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
     $filtered_languages = array();
 
     // Add the site's default language if flagged as allowed value.
-    if ($flags & Language::STATE_SITE_DEFAULT) {
+    if ($flags & LanguageInterface::STATE_SITE_DEFAULT) {
       $default = isset($default) ? $default : $this->getDefaultLanguage();
       // Rename the default language.
       $default->name = $this->t("Site's default language (@lang_name)", array('@lang_name' => $default->name));
@@ -131,7 +131,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
     }
 
     foreach ($this->languages as $id => $language) {
-      if (($language->locked && ($flags & Language::STATE_LOCKED)) || (!$language->locked && ($flags & Language::STATE_CONFIGURABLE))) {
+      if (($language->locked && ($flags & LanguageInterface::STATE_LOCKED)) || (!$language->locked && ($flags & LanguageInterface::STATE_CONFIGURABLE))) {
         $filtered_languages[$id] = $language;
       }
     }
@@ -143,7 +143,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
    * {@inheritdoc}
    */
   public function getLanguage($langcode) {
-    $languages = $this->getLanguages(Language::STATE_ALL);
+    $languages = $this->getLanguages(LanguageInterface::STATE_ALL);
     return isset($languages[$langcode]) ? $languages[$langcode] : NULL;
   }
 
@@ -151,7 +151,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
    * {@inheritdoc}
    */
   public function getLanguageName($langcode) {
-    if ($langcode == Language::LANGCODE_NOT_SPECIFIED) {
+    if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       return $this->t('None');
     }
     if ($language = $this->getLanguage($langcode)) {
@@ -173,14 +173,14 @@ class LanguageManager extends DependencySerialization implements LanguageManager
       'default' => FALSE,
       'locked' => TRUE,
     );
-    $languages[Language::LANGCODE_NOT_SPECIFIED] = new Language(array(
-      'id' => Language::LANGCODE_NOT_SPECIFIED,
+    $languages[LanguageInterface::LANGCODE_NOT_SPECIFIED] = new Language(array(
+      'id' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'name' => $this->t('Not specified'),
       'weight' => ++$weight,
     ) + $locked_language);
 
-    $languages[Language::LANGCODE_NOT_APPLICABLE] = new Language(array(
-      'id' => Language::LANGCODE_NOT_APPLICABLE,
+    $languages[LanguageInterface::LANGCODE_NOT_APPLICABLE] = new Language(array(
+      'id' => LanguageInterface::LANGCODE_NOT_APPLICABLE,
       'name' => $this->t('Not applicable'),
       'weight' => ++$weight,
     ) + $locked_language);
@@ -200,7 +200,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
    * {@inheritdoc}
    */
   public function getFallbackCandidates($langcode = NULL, array $context = array()) {
-    return array(Language::LANGCODE_DEFAULT);
+    return array(LanguageInterface::LANGCODE_DEFAULT);
   }
 
   /**
@@ -235,7 +235,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
     return array(
       'af' => array('Afrikaans', 'Afrikaans'),
       'am' => array('Amharic', 'አማርኛ'),
-      'ar' => array('Arabic', /* Left-to-right marker "‭" */ 'العربية', Language::DIRECTION_RTL),
+      'ar' => array('Arabic', /* Left-to-right marker "‭" */ 'العربية', LanguageInterface::DIRECTION_RTL),
       'ast' => array('Asturian', 'Asturianu'),
       'az' => array('Azerbaijani', 'Azərbaycanca'),
       'be' => array('Belarusian', 'Беларуская'),
@@ -255,7 +255,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
       'es' => array('Spanish', 'Español'),
       'et' => array('Estonian', 'Eesti'),
       'eu' => array('Basque', 'Euskera'),
-      'fa' => array('Persian, Farsi', /* Left-to-right marker "‭" */ 'فارسی', Language::DIRECTION_RTL),
+      'fa' => array('Persian, Farsi', /* Left-to-right marker "‭" */ 'فارسی', LanguageInterface::DIRECTION_RTL),
       'fi' => array('Finnish', 'Suomi'),
       'fil' => array('Filipino', 'Filipino'),
       'fo' => array('Faeroese', 'Føroyskt'),
@@ -266,7 +266,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
       'gl' => array('Galician', 'Galego'),
       'gsw-berne' => array('Swiss German', 'Schwyzerdütsch'),
       'gu' => array('Gujarati', 'ગુજરાતી'),
-      'he' => array('Hebrew', /* Left-to-right marker "‭" */ 'עברית', Language::DIRECTION_RTL),
+      'he' => array('Hebrew', /* Left-to-right marker "‭" */ 'עברית', LanguageInterface::DIRECTION_RTL),
       'hi' => array('Hindi', 'हिन्दी'),
       'hr' => array('Croatian', 'Hrvatski'),
       'ht' => array('Haitian Creole', 'Kreyòl ayisyen'),
@@ -322,7 +322,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
       'tyv' => array('Tuvan', 'Тыва дыл'),
       'ug' => array('Uyghur', 'Уйғур'),
       'uk' => array('Ukrainian', 'Українська'),
-      'ur' => array('Urdu', /* Left-to-right marker "‭" */ 'اردو', Language::DIRECTION_RTL),
+      'ur' => array('Urdu', /* Left-to-right marker "‭" */ 'اردو', LanguageInterface::DIRECTION_RTL),
       'vi' => array('Vietnamese', 'Tiếng Việt'),
       'xx-lolspeak' => array('Lolspeak', 'Lolspeak'),
       'zh-hans' => array('Chinese, Simplified', '简体中文'),
@@ -339,7 +339,7 @@ class LanguageManager extends DependencySerialization implements LanguageManager
    *
    * @see \Drupal\language\ConfigurableLanguageManager::setConfigOverrideLanguage()
    */
-  public function setConfigOverrideLanguage(Language $language = NULL) {
+  public function setConfigOverrideLanguage(LanguageInterface $language = NULL) {
     return $this;
   }
 
diff --git a/core/lib/Drupal/Core/Language/LanguageManagerInterface.php b/core/lib/Drupal/Core/Language/LanguageManagerInterface.php
index 43b2f23..b39eccd 100644
--- a/core/lib/Drupal/Core/Language/LanguageManagerInterface.php
+++ b/core/lib/Drupal/Core/Language/LanguageManagerInterface.php
@@ -48,19 +48,19 @@
    *
    * @param string $type
    *   (optional) The language type, e.g. the interface or the content language.
-   *   Defaults to \Drupal\Core\Language\Language::TYPE_INTERFACE.
+   *   Defaults to \Drupal\Core\Language\LanguageInterface::TYPE_INTERFACE.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   A language object for the given type.
    */
-  public function getCurrentLanguage($type = Language::TYPE_INTERFACE);
+  public function getCurrentLanguage($type = LanguageInterface::TYPE_INTERFACE);
 
   /**
    * Resets the given language type or all types if none specified.
    *
    * @param string|null $type
    *   (optional) The language type to reset as a string, e.g.,
-   *   Language::TYPE_INTERFACE, or NULL to reset all language types. Defaults
+   *   LanguageInterface::TYPE_INTERFACE, or NULL to reset all language types. Defaults
    *   to NULL.
    *
    * @return \Drupal\Core\Language\LanguageManagerInterface
@@ -71,7 +71,7 @@
   /**
    * Returns a language object representing the site's default language.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   A language object.
    */
   public function getDefaultLanguage();
@@ -81,13 +81,13 @@
    *
    * @param int $flags
    *   (optional) Specifies the state of the languages that have to be returned.
-   *   It can be: Language::STATE_CONFIGURABLE,
-   *   Language::STATE_LOCKED, Language::STATE_ALL.
+   *   It can be: LanguageInterface::STATE_CONFIGURABLE,
+   *   LanguageInterface::STATE_LOCKED, LanguageInterface::STATE_ALL.
    *
    * @return array
    *   An associative array of languages, keyed by the language code.
    */
-  public function getLanguages($flags = Language::STATE_CONFIGURABLE);
+  public function getLanguages($flags = LanguageInterface::STATE_CONFIGURABLE);
 
   /**
    * Returns a language object from the given language code.
@@ -95,7 +95,7 @@
    * @param string $langcode
    *   The language code.
    *
-   * @return \Drupal\core\Language\Language|null
+   * @return \Drupal\core\Language\LanguageInterface|null
    *   A fully-populated language object or NULL.
    */
   public function getLanguage($langcode);
@@ -170,17 +170,17 @@
   /**
    * Sets the configuration override language.
    *
-   * @param \Drupal\Core\Language\Language $language
+   * @param \Drupal\Core\Language\LanguageInterface $language
    *   The language to override configuration with.
    *
    * @return $this
    */
-  public function setConfigOverrideLanguage(Language $language = NULL);
+  public function setConfigOverrideLanguage(LanguageInterface $language = NULL);
 
   /**
    * Gets the current configuration override language.
    *
-   * @return \Drupal\Core\Language\Language $language
+   * @return \Drupal\Core\Language\LanguageInterface $language
    *   The current configuration override language.
    */
   public function getConfigOverrideLanguage();
diff --git a/core/lib/Drupal/Core/Path/AliasManager.php b/core/lib/Drupal/Core/Path/AliasManager.php
index 3aae881..e22ceea 100644
--- a/core/lib/Drupal/Core/Path/AliasManager.php
+++ b/core/lib/Drupal/Core/Path/AliasManager.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\CacheDecorator\CacheDecoratorInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManager;
 use Drupal\Core\Language\LanguageManagerInterface;
 
@@ -158,7 +158,7 @@ class AliasManager implements AliasManagerInterface, CacheDecoratorInterface {
     // language. If we used a language different from the one conveyed by the
     // requested URL, we might end up being unable to check if there is a path
     // alias matching the URL path.
-    $langcode = $langcode ?: $this->languageManager->getCurrentLanguage(Language::TYPE_URL)->id;
+    $langcode = $langcode ?: $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_URL)->id;
 
     // If we already know that there are no paths for this alias simply return.
     if (empty($alias) || !empty($this->noPath[$langcode][$alias])) {
@@ -192,7 +192,7 @@ class AliasManager implements AliasManagerInterface, CacheDecoratorInterface {
     // language. If we used a language different from the one conveyed by the
     // requested URL, we might end up being unable to check if there is a path
     // alias matching the URL path.
-    $langcode = $langcode ?: $this->languageManager->getCurrentLanguage(Language::TYPE_URL)->id;
+    $langcode = $langcode ?: $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_URL)->id;
 
     // Check the path whitelist, if the top-level part before the first /
     // is not in the list, then there is no need to do anything further,
diff --git a/core/lib/Drupal/Core/Path/AliasStorage.php b/core/lib/Drupal/Core/Path/AliasStorage.php
index aa6989c..b405a25 100644
--- a/core/lib/Drupal/Core/Path/AliasStorage.php
+++ b/core/lib/Drupal/Core/Path/AliasStorage.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Database\Connection;
 use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Provides a class for CRUD operations on path aliases.
@@ -46,7 +46,7 @@ class AliasStorage implements AliasStorageInterface {
   /**
    * {@inheritdoc}
    */
-  public function save($source, $alias, $langcode = Language::LANGCODE_NOT_SPECIFIED, $pid = NULL) {
+  public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid = NULL) {
 
     $fields = array(
       'source' => $source,
@@ -114,7 +114,7 @@ class AliasStorage implements AliasStorageInterface {
     $args = array(
       ':system' => $preloaded,
       ':langcode' => $langcode,
-      ':langcode_undetermined' => Language::LANGCODE_NOT_SPECIFIED,
+      ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
     // Always get the language-specific alias before the language-neutral one.
     // For example 'de' is less than 'und' so the order needs to be ASC, while
@@ -123,12 +123,12 @@ class AliasStorage implements AliasStorageInterface {
     // created alias for each source. Subsequent queries using fetchField() must
     // use pid DESC to have the same effect. For performance reasons, the query
     // builder is not used here.
-    if ($langcode == Language::LANGCODE_NOT_SPECIFIED) {
+    if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       // Prevent PDO from complaining about a token the query doesn't use.
       unset($args[':langcode']);
       $result = $this->connection->query('SELECT source, alias FROM {url_alias} WHERE source IN (:system) AND langcode = :langcode_undetermined ORDER BY pid ASC', $args);
     }
-    elseif ($langcode < Language::LANGCODE_NOT_SPECIFIED) {
+    elseif ($langcode < LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       $result = $this->connection->query('SELECT source, alias FROM {url_alias} WHERE source IN (:system) AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode ASC, pid ASC', $args);
     }
     else {
@@ -145,14 +145,14 @@ class AliasStorage implements AliasStorageInterface {
     $args = array(
       ':source' => $path,
       ':langcode' => $langcode,
-      ':langcode_undetermined' => Language::LANGCODE_NOT_SPECIFIED,
+      ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
     // See the queries above.
-    if ($langcode == Language::LANGCODE_NOT_SPECIFIED) {
+    if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       unset($args[':langcode']);
       $alias = $this->connection->query("SELECT alias FROM {url_alias} WHERE source = :source AND langcode = :langcode_undetermined ORDER BY pid DESC", $args)->fetchField();
     }
-    elseif ($langcode > Language::LANGCODE_NOT_SPECIFIED) {
+    elseif ($langcode > LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       $alias = $this->connection->query("SELECT alias FROM {url_alias} WHERE source = :source AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode DESC, pid DESC", $args)->fetchField();
     }
     else {
@@ -169,14 +169,14 @@ class AliasStorage implements AliasStorageInterface {
     $args = array(
       ':alias' => $path,
       ':langcode' => $langcode,
-      ':langcode_undetermined' => Language::LANGCODE_NOT_SPECIFIED,
+      ':langcode_undetermined' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
     // See the queries above.
-    if ($langcode == Language::LANGCODE_NOT_SPECIFIED) {
+    if ($langcode == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       unset($args[':langcode']);
       $result = $this->connection->query("SELECT source FROM {url_alias} WHERE alias = :alias AND langcode = :langcode_undetermined ORDER BY pid DESC", $args);
     }
-    elseif ($langcode > Language::LANGCODE_NOT_SPECIFIED) {
+    elseif ($langcode > LanguageInterface::LANGCODE_NOT_SPECIFIED) {
       $result = $this->connection->query("SELECT source FROM {url_alias} WHERE alias = :alias AND langcode IN (:langcode, :langcode_undetermined) ORDER BY langcode DESC, pid DESC", $args);
     }
     else {
@@ -217,7 +217,7 @@ class AliasStorage implements AliasStorageInterface {
    *   TRUE if aliases with language exist.
    */
   public function languageAliasExists() {
-    return (bool) $this->connection->queryRange('SELECT 1 FROM {url_alias} WHERE langcode <> :langcode', 0, 1, array(':langcode' => Language::LANGCODE_NOT_SPECIFIED))->fetchField();
+    return (bool) $this->connection->queryRange('SELECT 1 FROM {url_alias} WHERE langcode <> :langcode', 0, 1, array(':langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED))->fetchField();
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Path/AliasStorageInterface.php b/core/lib/Drupal/Core/Path/AliasStorageInterface.php
index 68c7cdd..a98600f 100644
--- a/core/lib/Drupal/Core/Path/AliasStorageInterface.php
+++ b/core/lib/Drupal/Core/Path/AliasStorageInterface.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Core\Path;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Provides a class for CRUD operations on path aliases.
@@ -34,7 +34,7 @@
    *   - pid (int): Unique path alias identifier.
    *   - langcode (string): The language code of the alias.
    */
-  public function save($source, $alias, $langcode = Language::LANGCODE_NOT_SPECIFIED, $pid = NULL);
+  public function save($source, $alias, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $pid = NULL);
 
   /**
    * Fetches a specific URL alias from the database.
diff --git a/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php b/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php
index 686f0d3..3a64ecd 100644
--- a/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php
+++ b/core/lib/Drupal/Core/Routing/UrlGeneratorInterface.php
@@ -55,7 +55,8 @@
    *   - 'language': An optional language object. If the path being linked to is
    *     internal to the site, $options['language'] is used to look up the alias
    *     for the URL. If $options['language'] is omitted, the language will be
-   *     obtained from \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_URL).
+   *     obtained from
+   *     \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_URL).
    *   - 'https': Whether this URL should point to a secure location. If not
    *     defined, the current scheme is used, so the user stays on HTTP or HTTPS
    *     respectively. TRUE enforces HTTPS and FALSE enforces HTTP, but HTTPS can
@@ -122,7 +123,7 @@
    *     displayed outside the site, such as in an RSS feed.
    *   - 'language': An optional language object used to look up the alias
    *     for the URL. If $options['language'] is omitted, it defaults to the
-   *     current language for the language type Language::TYPE_URL.
+   *     current language for the language type LanguageInterface::TYPE_URL.
    *   - 'https': Whether this URL should point to a secure location. If not
    *     defined, the current scheme is used, so the user stays on HTTP or HTTPS
    *     respectively. if mixed mode sessions are permitted, TRUE enforces HTTPS
diff --git a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Language.php b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Language.php
index 510a869..421ca60 100644
--- a/core/lib/Drupal/Core/TypedData/Plugin/DataType/Language.php
+++ b/core/lib/Drupal/Core/TypedData/Plugin/DataType/Language.php
@@ -40,7 +40,7 @@ class Language extends TypedData {
   /**
    * Overrides TypedData::getValue().
    *
-   * @return \Drupal\Core\Language\Language|null
+   * @return \Drupal\Core\Language\LanguageInterface|null
    */
   public function getValue() {
     if (!isset($this->language) && $this->id) {
diff --git a/core/lib/Drupal/Core/TypedData/TranslatableInterface.php b/core/lib/Drupal/Core/TypedData/TranslatableInterface.php
index 8632edb..999bfb7 100644
--- a/core/lib/Drupal/Core/TypedData/TranslatableInterface.php
+++ b/core/lib/Drupal/Core/TypedData/TranslatableInterface.php
@@ -17,7 +17,7 @@
   /**
    * Returns the default language.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   The language object.
    */
   public function language();
@@ -42,7 +42,8 @@
    * instantiated.
    *
    * @param $langcode
-   *   The language code of the translation to get or Language::LANGCODE_DEFAULT
+   *   The language code of the translation to get or
+   *   LanguageInterface::LANGCODE_DEFAULT
    *   to get the data in default language.
    *
    * @return \Drupal\Core\TypedData\TypedDataInterface
diff --git a/core/lib/Drupal/Core/Url.php b/core/lib/Drupal/Core/Url.php
index 93b329a..f7f2b1a 100644
--- a/core/lib/Drupal/Core/Url.php
+++ b/core/lib/Drupal/Core/Url.php
@@ -83,7 +83,7 @@ class Url extends DependencySerialization {
    *     displayed outside the site, such as in an RSS feed.
    *   - 'language': An optional language object used to look up the alias
    *     for the URL. If $options['language'] is omitted, it defaults to the
-   *     current language for the language type Language::TYPE_URL.
+   *     current language for the language type LanguageInterface::TYPE_URL.
    *   - 'https': Whether this URL should point to a secure location. If not
    *     defined, the current scheme is used, so the user stays on HTTP or HTTPS
    *     respectively. if mixed mode sessions are permitted, TRUE enforces HTTPS
diff --git a/core/lib/Drupal/Core/Utility/Token.php b/core/lib/Drupal/Core/Utility/Token.php
index 4a1238e..d03d645 100644
--- a/core/lib/Drupal/Core/Utility/Token.php
+++ b/core/lib/Drupal/Core/Utility/Token.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 
 /**
@@ -311,7 +311,7 @@ class Token {
    */
   public function getInfo() {
     if (is_null($this->tokenInfo)) {
-      $cache_id = 'token_info:' . $this->languageManager->getCurrentLanguage(Language::TYPE_CONTENT)->id;
+      $cache_id = 'token_info:' . $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id;
       $cache = $this->cache->get($cache_id);
       if ($cache) {
         $this->tokenInfo = $cache->data;
diff --git a/core/modules/aggregator/src/FeedForm.php b/core/modules/aggregator/src/FeedForm.php
index 675627c..e832d87 100644
--- a/core/modules/aggregator/src/FeedForm.php
+++ b/core/modules/aggregator/src/FeedForm.php
@@ -10,7 +10,7 @@
 use Drupal\Component\Utility\String;
 use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -31,7 +31,7 @@ class FeedForm extends ContentEntityForm {
       '#title' => $this->t('Language'),
       '#type' => 'language_select',
       '#default_value' => $feed->language()->id,
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
       '#weight' => -4,
     );
 
diff --git a/core/modules/block/custom_block/src/CustomBlockForm.php b/core/modules/block/custom_block/src/CustomBlockForm.php
index f495c4f..aa668d8 100644
--- a/core/modules/block/custom_block/src/CustomBlockForm.php
+++ b/core/modules/block/custom_block/src/CustomBlockForm.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManager;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -110,7 +110,7 @@ class CustomBlockForm extends ContentEntityForm {
       '#title' => $this->t('Language'),
       '#type' => 'language_select',
       '#default_value' => $block->getUntranslated()->language()->id,
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
       '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'],
     );
 
diff --git a/core/modules/block/src/BlockBase.php b/core/modules/block/src/BlockBase.php
index 68f5f36..e876209 100644
--- a/core/modules/block/src/BlockBase.php
+++ b/core/modules/block/src/BlockBase.php
@@ -11,7 +11,7 @@
 use Drupal\block\BlockInterface;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheableInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -262,7 +262,7 @@
     //   \Drupal\system\MachineNameController::transliterate(), so it might make
     //   sense to provide a common service for the two.
     $transliteration_service = \Drupal::transliteration();
-    $transliterated = $transliteration_service->transliterate($admin_label, Language::LANGCODE_DEFAULT, '_');
+    $transliterated = $transliteration_service->transliterate($admin_label, LanguageInterface::LANGCODE_DEFAULT, '_');
 
     $replace_pattern = '[^a-z0-9_.]+';
 
diff --git a/core/modules/block/src/BlockForm.php b/core/modules/block/src/BlockForm.php
index 1249dab..866f1b8 100644
--- a/core/modules/block/src/BlockForm.php
+++ b/core/modules/block/src/BlockForm.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Entity\EntityForm;
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\language\ConfigurableLanguageManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -157,7 +157,7 @@ class BlockForm extends EntityForm {
       $language_types = $this->languageManager->getLanguageTypes();
 
       // Fetch languages.
-      $languages = $this->languageManager->getLanguages(Language::STATE_ALL);
+      $languages = $this->languageManager->getLanguages(LanguageInterface::STATE_ALL);
       $langcodes_options = array();
       foreach ($languages as $language) {
         // @todo $language->name is not wrapped with t(), it should be replaced
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index 9cc4835..5f11fba 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -11,7 +11,7 @@
 use Drupal\Core\Render\Element;
 use Drupal\node\NodeInterface;
 use Drupal\node\NodeTypeInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\Core\Template\Attribute;
 use Symfony\Component\HttpFoundation\Request;
@@ -491,7 +491,7 @@ function template_preprocess_book_export_html(&$variables) {
   $variables['title'] = String::checkPlain($variables['title']);
   $variables['base_url'] = $base_url;
   $variables['language'] = $language_interface;
-  $variables['language_rtl'] = ($language_interface->direction == Language::DIRECTION_RTL);
+  $variables['language_rtl'] = ($language_interface->direction == LanguageInterface::DIRECTION_RTL);
   $variables['head'] = drupal_get_html_head();
 
   // HTML element attributes.
diff --git a/core/modules/comment/src/CommentForm.php b/core/modules/comment/src/CommentForm.php
index 01af9bb..68c31fc 100644
--- a/core/modules/comment/src/CommentForm.php
+++ b/core/modules/comment/src/CommentForm.php
@@ -14,7 +14,7 @@
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -62,7 +62,7 @@ class CommentForm extends ContentEntityForm {
     // Make the comment inherit the current content language unless specifically
     // set.
     if ($comment->isNew()) {
-      $language_content = \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT);
+      $language_content = \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
       $comment->langcode->value = $language_content->id;
     }
 
diff --git a/core/modules/comment/src/Tests/CommentCSSTest.php b/core/modules/comment/src/Tests/CommentCSSTest.php
index 8c2df9b..8c34754 100644
--- a/core/modules/comment/src/Tests/CommentCSSTest.php
+++ b/core/modules/comment/src/Tests/CommentCSSTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\comment\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\comment\CommentInterface;
 
 /**
@@ -59,8 +59,8 @@ function testCommentClasses() {
         'uid' => $case['comment_uid'],
         'status' => $case['comment_status'],
         'subject' => $this->randomName(),
-        'language' => Language::LANGCODE_NOT_SPECIFIED,
-        'comment_body' => array(Language::LANGCODE_NOT_SPECIFIED => array($this->randomName())),
+        'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
+        'comment_body' => array(LanguageInterface::LANGCODE_NOT_SPECIFIED => array($this->randomName())),
       ));
       $comment->save();
 
diff --git a/core/modules/comment/src/Tests/CommentLinksTest.php b/core/modules/comment/src/Tests/CommentLinksTest.php
index cf7af82..bce2746 100644
--- a/core/modules/comment/src/Tests/CommentLinksTest.php
+++ b/core/modules/comment/src/Tests/CommentLinksTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\comment\Tests;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\comment\CommentInterface;
 
 /**
@@ -152,8 +152,8 @@ function setEnvironment(array $info) {
           'status' => CommentInterface::PUBLISHED,
           'subject' => $this->randomName(),
           'hostname' => '127.0.0.1',
-          'langcode' => Language::LANGCODE_NOT_SPECIFIED,
-          'comment_body' => array(Language::LANGCODE_NOT_SPECIFIED => array($this->randomName())),
+          'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
+          'comment_body' => array(LanguageInterface::LANGCODE_NOT_SPECIFIED => array($this->randomName())),
         ));
         $comment->save();
         $this->comment = $comment;
diff --git a/core/modules/comment/src/Tests/CommentNewIndicatorTest.php b/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
index fbe36d2..f955b62 100644
--- a/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
+++ b/core/modules/comment/src/Tests/CommentNewIndicatorTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\comment\Tests;
 
 use Drupal\Component\Serialization\Json;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\comment\CommentInterface;
 
 /**
@@ -100,8 +100,8 @@ class CommentNewIndicatorTest extends CommentTestBase {
       'status' => CommentInterface::PUBLISHED,
       'subject' => $this->randomName(),
       'hostname' => '127.0.0.1',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
-      'comment_body' => array(Language::LANGCODE_NOT_SPECIFIED => array($this->randomName())),
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
+      'comment_body' => array(LanguageInterface::LANGCODE_NOT_SPECIFIED => array($this->randomName())),
     ));
     $comment->save();
     $this->drupalLogout();
diff --git a/core/modules/config_translation/src/Access/ConfigTranslationOverviewAccess.php b/core/modules/config_translation/src/Access/ConfigTranslationOverviewAccess.php
index 1eef1ff..529bc4a 100644
--- a/core/modules/config_translation/src/Access/ConfigTranslationOverviewAccess.php
+++ b/core/modules/config_translation/src/Access/ConfigTranslationOverviewAccess.php
@@ -28,7 +28,7 @@ class ConfigTranslationOverviewAccess implements AccessInterface {
   /**
    * The source language.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $sourceLanguage;
 
diff --git a/core/modules/config_translation/src/ConfigMapperInterface.php b/core/modules/config_translation/src/ConfigMapperInterface.php
index 28fb744..ba75aa2 100644
--- a/core/modules/config_translation/src/ConfigMapperInterface.php
+++ b/core/modules/config_translation/src/ConfigMapperInterface.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\config_translation;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\RouteCollection;
 
@@ -211,7 +211,7 @@
    * the site and it is English, we return a dummy language object to represent
    * the built-in language.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   A configured language object instance or a dummy English language object.
    *
    * @throws \RuntimeException
@@ -269,14 +269,14 @@
   /**
    * Checks whether there is already a translation for this mapper.
    *
-   * @param \Drupal\Core\Language\Language $language
+   * @param \Drupal\Core\Language\LanguageInterface $language
    *   A language object.
    *
    * @return bool
    *   TRUE if any of the configuration elements have a translation in the
    *   given language, FALSE otherwise.
    */
-  public function hasTranslation(Language $language);
+  public function hasTranslation(LanguageInterface $language);
 
   /**
    * Populate the config mapper with request data.
diff --git a/core/modules/config_translation/src/ConfigNamesMapper.php b/core/modules/config_translation/src/ConfigNamesMapper.php
index ce935f4..2e59b70 100644
--- a/core/modules/config_translation/src/ConfigNamesMapper.php
+++ b/core/modules/config_translation/src/ConfigNamesMapper.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
@@ -432,7 +433,7 @@ class ConfigNamesMapper extends PluginBase implements ConfigMapperInterface, Con
   /**
    * {@inheritdoc}
    */
-  public function hasTranslation(Language $language) {
+  public function hasTranslation(LanguageInterface $language) {
     foreach ($this->getConfigNames() as $name) {
       if ($this->localeConfigManager->hasTranslation($name, $language)) {
         return TRUE;
diff --git a/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php b/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
index 4b38059..a9a0a83 100644
--- a/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
+++ b/core/modules/config_translation/src/Form/ConfigTranslationDeleteForm.php
@@ -53,7 +53,7 @@ class ConfigTranslationDeleteForm extends ConfirmFormBase {
   /**
    * The language of configuration translation.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $language;
 
diff --git a/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php b/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
index 921e704..a57b60b 100644
--- a/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
+++ b/core/modules/config_translation/src/Form/ConfigTranslationFormBase.php
@@ -14,7 +14,7 @@
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\BaseFormIdInterface;
 use Drupal\Core\Form\FormBase;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Config\LanguageConfigOverride;
 use Drupal\language\ConfigurableLanguageManagerInterface;
 use Drupal\locale\StringStorageInterface;
@@ -72,14 +72,14 @@
   /**
    * The language of the configuration translation.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $language;
 
   /**
    * The language of the configuration translation source.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $sourceLanguage;
 
@@ -349,7 +349,7 @@
   /**
    * Sets configuration based on a nested form value array.
    *
-   * @param \Drupal\Core\Language\Language $language
+   * @param \Drupal\Core\Language\LanguageInterface $language
    *   Set the configuration in this language.
    * @param \Drupal\Core\Config\Config $base_config
    *   Base configuration values, in the source language.
@@ -373,7 +373,7 @@
    * @return array
    *   Translation configuration override data.
    */
-  protected function setConfig(Language $language, Config $base_config, LanguageConfigOverride $config_translation, array $config_values, $shipped_config = FALSE) {
+  protected function setConfig(LanguageInterface $language, Config $base_config, LanguageConfigOverride $config_translation, array $config_values, $shipped_config = FALSE) {
     foreach ($config_values as $key => $value) {
       if (is_array($value) && !isset($value['translation'])) {
         // Traverse into this level in the configuration.
diff --git a/core/modules/config_translation/src/FormElement/DateFormat.php b/core/modules/config_translation/src/FormElement/DateFormat.php
index 762968b..d82d427 100644
--- a/core/modules/config_translation/src/FormElement/DateFormat.php
+++ b/core/modules/config_translation/src/FormElement/DateFormat.php
@@ -10,7 +10,7 @@
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\ReplaceCommand;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
@@ -22,7 +22,7 @@ class DateFormat implements ElementInterface {
   /**
    * {@inheritdoc}
    */
-  public function getFormElement(array $definition, Language $language, $value) {
+  public function getFormElement(array $definition, LanguageInterface $language, $value) {
     $description = $this->t('A user-defined date format. See the <a href="@url">PHP manual</a> for available options.', array('@url' => 'http://php.net/manual/function.date.php'));
     $format = $this->t('Displayed as %date_format', array('%date_format' => \Drupal::service('date')->format(REQUEST_TIME, 'custom', $value)));
     return array(
diff --git a/core/modules/config_translation/src/FormElement/ElementInterface.php b/core/modules/config_translation/src/FormElement/ElementInterface.php
index 9072cfc..ecc93f0 100644
--- a/core/modules/config_translation/src/FormElement/ElementInterface.php
+++ b/core/modules/config_translation/src/FormElement/ElementInterface.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\config_translation\FormElement;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Provides an interface for configuration translation form elements.
@@ -19,7 +19,7 @@
    *
    * @param array $definition
    *   Configuration schema type definition of the element.
-   * @param \Drupal\Core\Language\Language $language
+   * @param \Drupal\Core\Language\LanguageInterface $language
    *   Language object to display the translation form for.
    * @param string $value
    *   Default value for the form element.
@@ -27,6 +27,6 @@
    * @return array
    *   Form API array to represent the form element.
    */
-  public function getFormElement(array $definition, Language $language, $value);
+  public function getFormElement(array $definition, LanguageInterface $language, $value);
 
 }
diff --git a/core/modules/config_translation/src/FormElement/Textarea.php b/core/modules/config_translation/src/FormElement/Textarea.php
index b796685..63aecf3 100644
--- a/core/modules/config_translation/src/FormElement/Textarea.php
+++ b/core/modules/config_translation/src/FormElement/Textarea.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\config_translation\FormElement;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
@@ -19,7 +19,7 @@ class Textarea implements ElementInterface {
   /**
    * {@inheritdoc}
    */
-  public function getFormElement(array $definition, Language $language, $value) {
+  public function getFormElement(array $definition, LanguageInterface $language, $value) {
     // Estimate a comfortable size of the input textarea.
     $rows_words = ceil(str_word_count($value) / 5);
     $rows_newlines = substr_count($value, "\n" ) + 1;
diff --git a/core/modules/config_translation/src/FormElement/Textfield.php b/core/modules/config_translation/src/FormElement/Textfield.php
index 46d71fe..44105ba 100644
--- a/core/modules/config_translation/src/FormElement/Textfield.php
+++ b/core/modules/config_translation/src/FormElement/Textfield.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\config_translation\FormElement;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 
 /**
@@ -19,7 +19,7 @@ class Textfield implements ElementInterface {
   /**
    * {@inheritdoc}
    */
-  public function getFormElement(array $definition, Language $language, $value) {
+  public function getFormElement(array $definition, LanguageInterface $language, $value) {
     return array(
       '#type' => 'textfield',
       '#default_value' => $value,
diff --git a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
index b01feb8..08e28e3 100644
--- a/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
+++ b/core/modules/config_translation/src/Tests/ConfigTranslationUiTest.php
@@ -11,6 +11,7 @@
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Config\FileStorage;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -494,7 +495,7 @@ class ConfigTranslationUiTest extends WebTestBase {
     $this->container
       ->get('config.factory')
       ->get('system.site')
-      ->set('langcode', Language::LANGCODE_NOT_SPECIFIED)
+      ->set('langcode', LanguageInterface::LANGCODE_NOT_SPECIFIED)
       ->save();
 
     // Make sure translation tab does not exist on the configuration page.
diff --git a/core/modules/config_translation/tests/src/ConfigMapperManagerTest.php b/core/modules/config_translation/tests/src/ConfigMapperManagerTest.php
index 8a55f2d..4e29ecf 100644
--- a/core/modules/config_translation/tests/src/ConfigMapperManagerTest.php
+++ b/core/modules/config_translation/tests/src/ConfigMapperManagerTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\config_translation\ConfigMapperManager;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
 use Drupal\Tests\UnitTestCase;
 
@@ -50,7 +51,7 @@ class ConfigMapperManagerTest extends UnitTestCase {
     $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
     $language_manager->expects($this->once())
       ->method('getCurrentLanguage')
-      ->with(Language::TYPE_INTERFACE)
+      ->with(LanguageInterface::TYPE_INTERFACE)
       ->will($this->returnValue($language));
 
     $this->typedConfigManager = $this->getMockBuilder('Drupal\Core\Config\TypedConfigManagerInterface')
diff --git a/core/modules/content_translation/content_translation.admin.inc b/core/modules/content_translation/content_translation.admin.inc
index eb03aea..d2a3e1e 100644
--- a/core/modules/content_translation/content_translation.admin.inc
+++ b/core/modules/content_translation/content_translation.admin.inc
@@ -7,7 +7,7 @@
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Render\Element;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\FieldInstanceConfigInterface;
@@ -278,7 +278,7 @@ function content_translation_form_language_content_settings_validate(array $form
 
         $values = $bundle_settings['settings']['language'];
         if (empty($values['language_show']) && \Drupal::languageManager()->isLanguageLocked($values['langcode'])) {
-          foreach (\Drupal::languageManager()->getLanguages(Language::STATE_LOCKED) as $language) {
+          foreach (\Drupal::languageManager()->getLanguages(LanguageInterface::STATE_LOCKED) as $language) {
             $locked_languages[] = $language->name;
           }
           form_set_error($name, $form_state, t('Translation is not supported if language is always one of: @locked_languages', array('@locked_languages' => implode(', ', $locked_languages))));
diff --git a/core/modules/content_translation/content_translation.install b/core/modules/content_translation/content_translation.install
index f6dda75..383d043 100644
--- a/core/modules/content_translation/content_translation.install
+++ b/core/modules/content_translation/content_translation.install
@@ -6,7 +6,7 @@
  */
 
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl;
 
 /**
@@ -87,7 +87,7 @@ function content_translation_install() {
   // Assign a fairly low weight to ensure our implementation of
   // hook_module_implements_alter() is run among the last ones.
   module_set_weight('content_translation', 10);
-  \Drupal::service('language_negotiator')->saveConfiguration(Language::TYPE_CONTENT, array(LanguageNegotiationUrl::METHOD_ID => 0));
+  \Drupal::service('language_negotiator')->saveConfiguration(LanguageInterface::TYPE_CONTENT, array(LanguageNegotiationUrl::METHOD_ID => 0));
 
   $config_names = \Drupal::configFactory()->listAll('field.field.');
   foreach ($config_names as $name) {
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index 4e29f4c..9620806 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\FieldDefinition;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\field\Entity\FieldInstanceConfig;
@@ -72,8 +72,8 @@ function content_translation_module_implements_alter(&$implementations, $hook) {
 function content_translation_language_types_info_alter(array &$language_types) {
   // Make content language negotiation configurable by removing the 'locked'
   // flag.
-  $language_types[Language::TYPE_CONTENT]['locked'] = FALSE;
-  unset($language_types[Language::TYPE_CONTENT]['fixed']);
+  $language_types[LanguageInterface::TYPE_CONTENT]['locked'] = FALSE;
+  unset($language_types[LanguageInterface::TYPE_CONTENT]['fixed']);
 }
 
 /**
@@ -792,7 +792,7 @@ function content_translation_language_configuration_element_validate($element, a
   $key = $form_state['content_translation']['key'];
   $values = $form_state['values'][$key];
   if (!$values['language_show'] && $values['content_translation'] && \Drupal::languageManager()->isLanguageLocked($values['langcode'])) {
-    foreach (\Drupal::languageManager()->getLanguages(Language::STATE_LOCKED) as $language) {
+    foreach (\Drupal::languageManager()->getLanguages(LanguageInterface::STATE_LOCKED) as $language) {
       $locked_languages[] = $language->name;
     }
     // @todo Set the correct form element name as soon as the element parents
diff --git a/core/modules/content_translation/content_translation.pages.inc b/core/modules/content_translation/content_translation.pages.inc
index d4a7c48..9898678 100644
--- a/core/modules/content_translation/content_translation.pages.inc
+++ b/core/modules/content_translation/content_translation.pages.inc
@@ -5,7 +5,7 @@
  * The content translation user interface.
  */
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\ContentEntityInterface;
 
@@ -171,12 +171,12 @@ function content_translation_overview(EntityInterface $entity) {
  *   A renderable array of language switch links.
  */
 function _content_translation_get_switch_links($path) {
-  $links = \Drupal::languageManager()->getLanguageSwitchLinks(Language::TYPE_CONTENT, $path);
+  $links = \Drupal::languageManager()->getLanguageSwitchLinks(LanguageInterface::TYPE_CONTENT, $path);
   if (empty($links)) {
     // If content language is set up to fall back to the interface language,
-    // then there will be no switch links for Language::TYPE_CONTENT, ergo we
-    // also need to use interface switch links.
-    $links = \Drupal::languageManager()->getLanguageSwitchLinks(Language::TYPE_INTERFACE, $path);
+    // then there will be no switch links for LanguageInterface::TYPE_CONTENT,
+    // ergo we also need to use interface switch links.
+    $links = \Drupal::languageManager()->getLanguageSwitchLinks(LanguageInterface::TYPE_INTERFACE, $path);
   }
   return $links;
 }
@@ -186,10 +186,10 @@ function _content_translation_get_switch_links($path) {
  *
  * @param EntityInterface $entity
  *   The entity being translated.
- * @param Language $source
+ * @param \Drupal\Core\Language\LanguageInterface $source
  *   (optional) The language of the values being translated. Defaults to the
  *   entity language.
- * @param Language $target
+ * @param \Drupal\Core\Language\LanguageInterface $target
  *   (optional) The language of the translated values. Defaults to the current
  *   content language.
  *
@@ -199,9 +199,9 @@ function _content_translation_get_switch_links($path) {
  * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
  *   Use \Drupal\content_translation\Controller\ContentTranslationController::add().
  */
-function content_translation_add_page(EntityInterface $entity, Language $source = NULL, Language $target = NULL) {
+function content_translation_add_page(EntityInterface $entity, LanguageInterface $source = NULL, LanguageInterface $target = NULL) {
   $source = !empty($source) ? $source : $entity->language();
-  $target = !empty($target) ? $target : \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT);
+  $target = !empty($target) ? $target : \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
   // @todo Exploit the upcoming hook_entity_prepare() when available.
   content_translation_prepare_translation($entity, $source, $target);
   $form_state['langcode'] = $target->id;
@@ -216,7 +216,7 @@ function content_translation_add_page(EntityInterface $entity, Language $source 
  *
  * @param \Drupal\Core\Entity\EntityInterface $entity
  *   The entity being translated.
- * @param \Drupal\Core\Language\Language $language
+ * @param \Drupal\Core\Language\LanguageInterface $language
  *   (optional) The language of the translated values. Defaults to the current
  *   content language.
  *
@@ -226,8 +226,8 @@ function content_translation_add_page(EntityInterface $entity, Language $source 
  * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
  *   Use \Drupal\content_translation\Controller\ContentTranslationController::edit().
  */
-function content_translation_edit_page(EntityInterface $entity, Language $language = NULL) {
-  $language = !empty($language) ? $language : \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT);
+function content_translation_edit_page(EntityInterface $entity, LanguageInterface $language = NULL) {
+  $language = !empty($language) ? $language : \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
   $form_state['langcode'] = $language->id;
   $form_state['content_translation']['translation_form'] = TRUE;
   return \Drupal::service('entity.form_builder')->getForm($entity, 'default', $form_state);
@@ -238,12 +238,12 @@ function content_translation_edit_page(EntityInterface $entity, Language $langua
  *
  * @param \Drupal\Core\Entity\EntityInterface $entity
  *   The entitiy being translated.
- * @param \Drupal\Core\Language\Language $source
+ * @param \Drupal\Core\Language\LanguageInterface $source
  *   The language to be used as source.
- * @param \Drupal\Core\Language\Language $target
+ * @param \Drupal\Core\Language\LanguageInterface $target
  *   The language to be used as target.
  */
-function content_translation_prepare_translation(EntityInterface $entity, Language $source, Language $target) {
+function content_translation_prepare_translation(EntityInterface $entity, LanguageInterface $source, LanguageInterface $target) {
   if ($entity instanceof ContentEntityInterface) {
     $source_translation = $entity->getTranslation($source->id);
     $entity->addTranslation($target->id, $source_translation->toArray());
diff --git a/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php b/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
index b0e0fb6..137b52e 100644
--- a/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
+++ b/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
@@ -8,7 +8,7 @@
 namespace Drupal\content_translation\Access;
 
 use Drupal\Core\Entity\EntityManagerInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Routing\Access\AccessInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\Routing\Route;
@@ -70,7 +70,7 @@ class ContentTranslationManageAccessCheck implements AccessInterface {
       switch ($operation) {
         case 'create':
           $source = language_load($source) ?: $entity->language();
-          $target = language_load($target) ?: \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT);
+          $target = language_load($target) ?: \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
           return ($source->id != $target->id
             && isset($languages[$source->id])
             && isset($languages[$target->id])
@@ -80,7 +80,7 @@ class ContentTranslationManageAccessCheck implements AccessInterface {
 
         case 'update':
         case 'delete':
-          $language = language_load($language) ?: \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT);
+          $language = language_load($language) ?: \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
           return isset($languages[$language->id])
             && $language->id != $entity->getUntranslated()->language()->id
             && isset($translations[$language->id])
diff --git a/core/modules/content_translation/src/ContentTranslationHandler.php b/core/modules/content_translation/src/ContentTranslationHandler.php
index 76723c2..bd9a9c1 100644
--- a/core/modules/content_translation/src/ContentTranslationHandler.php
+++ b/core/modules/content_translation/src/ContentTranslationHandler.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Render\Element;
 
 /**
@@ -129,7 +129,7 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface {
           '#submit' => array(array($this, 'entityFormSourceChange')),
         ),
       );
-      foreach (language_list(Language::STATE_CONFIGURABLE) as $language) {
+      foreach (language_list(LanguageInterface::STATE_CONFIGURABLE) as $language) {
         if (isset($translations[$language->id])) {
           $form['source_langcode']['source']['#options'][$language->id] = $language->name;
         }
@@ -142,7 +142,7 @@ class ContentTranslationHandler implements ContentTranslationHandlerInterface {
     $language_widget = isset($form['langcode']) && $form['langcode']['#type'] == 'language_select';
     if ($language_widget && $has_translations) {
       $form['langcode']['#options'] = array();
-      foreach (language_list(Language::STATE_CONFIGURABLE) as $language) {
+      foreach (language_list(LanguageInterface::STATE_CONFIGURABLE) as $language) {
         if (empty($translations[$language->id]) || $language->id == $entity_langcode) {
           $form['langcode']['#options'][$language->id] = $language->name;
         }
diff --git a/core/modules/content_translation/src/Form/ContentTranslationDeleteForm.php b/core/modules/content_translation/src/Form/ContentTranslationDeleteForm.php
index 3435315..4100fdb 100644
--- a/core/modules/content_translation/src/Form/ContentTranslationDeleteForm.php
+++ b/core/modules/content_translation/src/Form/ContentTranslationDeleteForm.php
@@ -25,7 +25,7 @@ class ContentTranslationDeleteForm extends ConfirmFormBase {
   /**
    * The language of the translation being deleted.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $language;
 
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationSettingsTest.php b/core/modules/content_translation/src/Tests/ContentTranslationSettingsTest.php
index 5220da7..8f3b803 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationSettingsTest.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationSettingsTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\content_translation\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\simpletest\WebTestBase;
 
@@ -76,7 +76,7 @@ function testSettingsUI() {
     // language is set as default and the language selector is hidden.
     $edit = array(
       'entity_types[comment]' => TRUE,
-      'settings[comment][node__comment_article][settings][language][langcode]' => Language::LANGCODE_NOT_SPECIFIED,
+      'settings[comment][node__comment_article][settings][language][langcode]' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'settings[comment][node__comment_article][settings][language][language_show]' => FALSE,
       'settings[comment][node__comment_article][translatable]' => TRUE,
       'settings[comment][node__comment_article][fields][comment_body]' => TRUE,
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationUITest.php b/core/modules/content_translation/src/Tests/ContentTranslationUITest.php
index 12caf73..10b56cb 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationUITest.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationUITest.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\ContentEntityBase;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests the Content Translation UI.
@@ -251,7 +251,7 @@ function testTranslationUI() {
    */
   protected function getEditValues($values, $langcode, $new = FALSE) {
     $edit = $values[$langcode];
-    $langcode = $new ? Language::LANGCODE_NOT_SPECIFIED : $langcode;
+    $langcode = $new ? LanguageInterface::LANGCODE_NOT_SPECIFIED : $langcode;
     foreach ($values[$langcode] as $property => $value) {
       if (is_array($value)) {
         $edit["{$property}[0][value]"] = $value[0]['value'];
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php b/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php
index 43e5d77..06674b8 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationWorkflowsTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\content_translation\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\user\UserInterface;
 
 /**
@@ -183,7 +183,7 @@ function testWorkflows() {
    * Assert that the current page does not contain shared form elements.
    */
   protected function assertNoSharedElements() {
-    $language_none = Language::LANGCODE_NOT_SPECIFIED;
+    $language_none = LanguageInterface::LANGCODE_NOT_SPECIFIED;
     return $this->assertNoFieldByXPath("//input[@name='field_test_text[$language_none][0][value]']", NULL, 'Shared elements are not available on the translation form.');
   }
 
diff --git a/core/modules/editor/src/Tests/QuickEditIntegrationTest.php b/core/modules/editor/src/Tests/QuickEditIntegrationTest.php
index 5f0c279..dcaf31d 100644
--- a/core/modules/editor/src/Tests/QuickEditIntegrationTest.php
+++ b/core/modules/editor/src/Tests/QuickEditIntegrationTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\editor\Tests;
 
 use Drupal\Component\Serialization\Json;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\quickedit\EditorSelector;
 use Drupal\quickedit\MetadataGenerator;
 use Drupal\quickedit\Plugin\InPlaceEditorManager;
@@ -119,7 +119,7 @@ class QuickEditIntegrationTest extends QuickEditTestBase {
    */
   protected function getSelectedEditor($entity_id, $field_name, $view_mode = 'default') {
     $entity = entity_load('entity_test', $entity_id, TRUE);
-    $items = $entity->getTranslation(Language::LANGCODE_NOT_SPECIFIED)->get($field_name);
+    $items = $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED)->get($field_name);
     $options = entity_get_display('entity_test', 'entity_test', $view_mode)->getComponent($field_name);
     return $this->editorSelector->getEditor($options['type'], $items);
   }
@@ -172,7 +172,7 @@ class QuickEditIntegrationTest extends QuickEditTestBase {
     $entity = entity_load('entity_test', $this->entity->id());
 
     // Verify metadata.
-    $items = $entity->getTranslation(Language::LANGCODE_NOT_SPECIFIED)->get($this->field_name);
+    $items = $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED)->get($this->field_name);
     $metadata = $this->metadataGenerator->generateFieldMetadata($items, 'default');
     $expected = array(
       'access' => TRUE,
@@ -212,7 +212,7 @@ class QuickEditIntegrationTest extends QuickEditTestBase {
     // Verify AJAX response.
     $controller = new EditorController();
     $request = new Request();
-    $response = $controller->getUntransformedText($entity, $this->field_name, Language::LANGCODE_NOT_SPECIFIED, 'default');
+    $response = $controller->getUntransformedText($entity, $this->field_name, LanguageInterface::LANGCODE_NOT_SPECIFIED, 'default');
     $expected = array(
       array(
         'command' => 'editorGetUntransformedText',
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceItemTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceItemTest.php
index 8c33d47..90e5a25 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceItemTest.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceItemTest.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldItemInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\Tests\FieldUnitTestBase;
 
 /**
@@ -58,14 +58,14 @@ class EntityReferenceItemTest extends FieldUnitTestBase {
     $this->vocabulary = entity_create('taxonomy_vocabulary', array(
       'name' => $this->randomName(),
       'vid' => drupal_strtolower($this->randomName()),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $this->vocabulary->save();
 
     $this->term = entity_create('taxonomy_term', array(
       'name' => $this->randomName(),
       'vid' => $this->vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $this->term->save();
 
@@ -106,7 +106,7 @@ class EntityReferenceItemTest extends FieldUnitTestBase {
     $term2 = entity_create('taxonomy_term', array(
       'name' => $this->randomName(),
       'vid' => $this->term->bundle(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $term2->save();
 
@@ -153,7 +153,7 @@ class EntityReferenceItemTest extends FieldUnitTestBase {
     $vocabulary2 = entity_create('taxonomy_vocabulary', array(
       'name' => $this->randomName(),
       'vid' => drupal_strtolower($this->randomName()),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $vocabulary2->save();
 
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceSelectionAccessTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceSelectionAccessTest.php
index 19f5035..968e60c 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceSelectionAccessTest.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceSelectionAccessTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\entity_reference\Tests;
 
 use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\comment\CommentInterface;
 use Drupal\simpletest\WebTestBase;
 
@@ -410,7 +410,7 @@ function setUp() {
         'pid' => 0,
         'status' => CommentInterface::PUBLISHED,
         'subject' => 'Comment Published <&>',
-        'language' => Language::LANGCODE_NOT_SPECIFIED,
+        'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       ),
       'published_unpublished' => array(
         'entity_id' => $nodes['published']->id(),
@@ -421,7 +421,7 @@ function setUp() {
         'pid' => 0,
         'status' => CommentInterface::NOT_PUBLISHED,
         'subject' => 'Comment Unpublished <&>',
-        'language' => Language::LANGCODE_NOT_SPECIFIED,
+        'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       ),
       'unpublished_published' => array(
         'entity_id' => $nodes['unpublished']->id(),
@@ -432,7 +432,7 @@ function setUp() {
         'pid' => 0,
         'status' => CommentInterface::NOT_PUBLISHED,
         'subject' => 'Comment Published on Unpublished node <&>',
-        'language' => Language::LANGCODE_NOT_SPECIFIED,
+        'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       ),
     );
 
diff --git a/core/modules/field/src/Plugin/views/field/Field.php b/core/modules/field/src/Plugin/views/field/Field.php
index ec794fd..6bb46a9 100644
--- a/core/modules/field/src/Plugin/views/field/Field.php
+++ b/core/modules/field/src/Plugin/views/field/Field.php
@@ -16,7 +16,7 @@
 use Drupal\Core\Entity\ContentEntityDatabaseStorage;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FormatterPluginManager;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManager;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\views\Views;
@@ -295,7 +295,7 @@ function get_base_table() {
         $default_langcode = language_default()->id;
         $langcode = str_replace(
           array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
-          array($this->languageManager->getCurrentLanguage(Language::TYPE_CONTENT), $default_langcode),
+          array($this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT), $default_langcode),
           $this->view->display_handler->options['field_langcode']
         );
         $placeholder = $this->placeholder();
@@ -902,7 +902,7 @@ function field_langcode(EntityInterface $entity) {
       $default_langcode = language_default()->id;
       $langcode = str_replace(
         array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
-        array($this->languageManager->getCurrentLanguage(Language::TYPE_CONTENT), $default_langcode),
+        array($this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT), $default_langcode),
         $this->view->display_handler->options['field_language']
       );
 
@@ -916,7 +916,7 @@ function field_langcode(EntityInterface $entity) {
       return $langcode;
     }
     else {
-      return Language::LANGCODE_NOT_SPECIFIED;
+      return LanguageInterface::LANGCODE_NOT_SPECIFIED;
     }
   }
 
diff --git a/core/modules/field/src/Tests/DisplayApiTest.php b/core/modules/field/src/Tests/DisplayApiTest.php
index 3a31e00..9a9ed1e 100644
--- a/core/modules/field/src/Tests/DisplayApiTest.php
+++ b/core/modules/field/src/Tests/DisplayApiTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\field\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests the field display API.
@@ -149,7 +149,7 @@ function testFieldItemListView() {
     $setting = $display['settings']['test_formatter_setting_multiple'];
     $this->assertNoText($this->label, 'Label was not displayed.');
     $this->assertText('field_test_entity_display_build_alter', 'Alter fired, display passed.');
-    $this->assertText('entity language is ' . Language::LANGCODE_NOT_SPECIFIED, 'Language is placed onto the context.');
+    $this->assertText('entity language is ' . LanguageInterface::LANGCODE_NOT_SPECIFIED, 'Language is placed onto the context.');
     $array = array();
     foreach ($this->values as $delta => $value) {
       $array[] = $delta . ':' . $value['value'];
diff --git a/core/modules/field/src/Tests/FieldAttachOtherTest.php b/core/modules/field/src/Tests/FieldAttachOtherTest.php
index a748939..4010b4f 100644
--- a/core/modules/field/src/Tests/FieldAttachOtherTest.php
+++ b/core/modules/field/src/Tests/FieldAttachOtherTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\field\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Unit test class for non-storage related field_attach_* functions.
@@ -180,7 +180,7 @@ function testEntityDisplayViewMultiple() {
   function testFieldAttachCache() {
     // Initialize random values and a test entity.
     $entity_init = entity_create('entity_test', array('type' => $this->instance->bundle));
-    $langcode = Language::LANGCODE_NOT_SPECIFIED;
+    $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
     $values = $this->_generateTestFieldValues($this->field->getCardinality());
 
     // Non-cacheable entity type.
diff --git a/core/modules/field/src/Tests/FieldTestBase.php b/core/modules/field/src/Tests/FieldTestBase.php
index 3f5d2c5..6bf45a4 100644
--- a/core/modules/field/src/Tests/FieldTestBase.php
+++ b/core/modules/field/src/Tests/FieldTestBase.php
@@ -8,7 +8,7 @@
 namespace Drupal\field\Tests;
 
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -46,11 +46,11 @@ function _generateTestFieldValues($cardinality) {
    *   The array of expected values.
    * @param $langcode
    *   (Optional) The language code for the values. Defaults to
-   *   Drupal\Core\Language\Language::LANGCODE_NOT_SPECIFIED.
+   *   \Drupal\Core\Language\LanguageInterface::LANGCODE_NOT_SPECIFIED.
    * @param $column
    *   (Optional) The name of the column to check. Defaults to 'value'.
    */
-  function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = Language::LANGCODE_NOT_SPECIFIED, $column = 'value') {
+  function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $column = 'value') {
     // Re-load the entity to make sure we have the latest changes.
     entity_get_controller($entity->getEntityTypeId())->resetCache(array($entity->id()));
     $e = entity_load($entity->getEntityTypeId(), $entity->id());
diff --git a/core/modules/field/src/Tests/FieldUnitTestBase.php b/core/modules/field/src/Tests/FieldUnitTestBase.php
index 5717a23..9f250d2 100644
--- a/core/modules/field/src/Tests/FieldUnitTestBase.php
+++ b/core/modules/field/src/Tests/FieldUnitTestBase.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Utility\Xss;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\DrupalUnitTestBase;
 
 /**
@@ -145,11 +145,11 @@ function _generateTestFieldValues($cardinality) {
    *   The array of expected values.
    * @param $langcode
    *   (Optional) The language code for the values. Defaults to
-   *   Drupal\Core\Language\Language::LANGCODE_NOT_SPECIFIED.
+   *   \Drupal\Core\Language\LanguageInterface::LANGCODE_NOT_SPECIFIED.
    * @param $column
    *   (Optional) The name of the column to check. Defaults to 'value'.
    */
-  function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = Language::LANGCODE_NOT_SPECIFIED, $column = 'value') {
+  function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $column = 'value') {
     // Re-load the entity to make sure we have the latest changes.
     entity_get_controller($entity->getEntityTypeId())->resetCache(array($entity->id()));
     $e = entity_load($entity->getEntityTypeId(), $entity->id());
diff --git a/core/modules/field_ui/src/Tests/FieldUiTestBase.php b/core/modules/field_ui/src/Tests/FieldUiTestBase.php
index f103e6d..3e54cea 100644
--- a/core/modules/field_ui/src/Tests/FieldUiTestBase.php
+++ b/core/modules/field_ui/src/Tests/FieldUiTestBase.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\field_ui\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -39,7 +39,7 @@ function setUp() {
       'name' => $this->randomName(),
       'description' => $this->randomName(),
       'vid' => drupal_strtolower($this->randomName()),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'help' => '',
       'nodes' => array('article' => 'article'),
       'weight' => mt_rand(0, 10),
diff --git a/core/modules/field_ui/src/Tests/ManageFieldsTest.php b/core/modules/field_ui/src/Tests/ManageFieldsTest.php
index 505e8a1..d112049 100644
--- a/core/modules/field_ui/src/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/src/Tests/ManageFieldsTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\field_ui\Tests;
 
 use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Component\Utility\String;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldInstanceConfig;
@@ -42,7 +42,7 @@ function setUp() {
     $vocabulary = entity_create('taxonomy_vocabulary', array(
       'name' => 'Tags',
       'vid' => 'tags',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $vocabulary->save();
 
diff --git a/core/modules/file/src/Entity/File.php b/core/modules/file/src/Entity/File.php
index 39f27d6..26416d6 100644
--- a/core/modules/file/src/Entity/File.php
+++ b/core/modules/file/src/Entity/File.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\FieldDefinition;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\file\FileInterface;
 use Drupal\user\UserInterface;
 
@@ -43,7 +43,7 @@ class File extends ContentEntityBase implements FileInterface {
    * @var array
    */
   protected $values = array(
-    'langcode' => array(Language::LANGCODE_DEFAULT => array(0 => array('value' => Language::LANGCODE_NOT_SPECIFIED))),
+    'langcode' => array(LanguageInterface::LANGCODE_DEFAULT => array(0 => array('value' => LanguageInterface::LANGCODE_NOT_SPECIFIED))),
   );
 
   /**
diff --git a/core/modules/file/src/Tests/SaveTest.php b/core/modules/file/src/Tests/SaveTest.php
index 50d6847..daa4048 100644
--- a/core/modules/file/src/Tests/SaveTest.php
+++ b/core/modules/file/src/Tests/SaveTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\file\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests saving files.
@@ -46,7 +46,7 @@ function testFileSave() {
     $this->assertEqual($loaded_file->isPermanent(), $file->isPermanent(), 'Status was saved correctly.');
     $this->assertEqual($file->getSize(), filesize($file->getFileUri()), 'File size was set correctly.', 'File');
     $this->assertTrue($file->getChangedTime() > 1, 'File size was set correctly.', 'File');
-    $this->assertEqual($loaded_file->langcode->value, Language::LANGCODE_NOT_SPECIFIED, 'Langcode was defaulted correctly.');
+    $this->assertEqual($loaded_file->langcode->value, LanguageInterface::LANGCODE_NOT_SPECIFIED, 'Langcode was defaulted correctly.');
 
     // Resave the file, updating the existing record.
     file_test_reset();
diff --git a/core/modules/hal/src/Normalizer/ContentEntityNormalizer.php b/core/modules/hal/src/Normalizer/ContentEntityNormalizer.php
index f374fa3..d433656 100644
--- a/core/modules/hal/src/Normalizer/ContentEntityNormalizer.php
+++ b/core/modules/hal/src/Normalizer/ContentEntityNormalizer.php
@@ -10,7 +10,7 @@
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\rest\LinkManager\LinkManagerInterface;
 use Symfony\Component\Serializer\Exception\UnexpectedValueException;
 
@@ -136,7 +136,7 @@ class ContentEntityNormalizer extends NormalizerBase {
       $langcode = language_get_default_langcode($typed_data_ids['entity_type'], $typed_data_ids['bundle']);
     }
     else {
-      $langcode = Language::LANGCODE_NOT_SPECIFIED;
+      $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
     }
 
     $entity_type = $this->entityManager->getDefinition($typed_data_ids['entity_type']);
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index fb95001..b747c77 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -6,7 +6,7 @@
  */
 
 use Drupal\Core\PhpStorage\PhpStorageFactory;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\ConfigurableLanguageManager;
 use Drupal\language\ConfigurableLanguageManagerInterface;
 use Drupal\language\Entity\Language as LanguageEntity;
@@ -132,7 +132,7 @@ function language_element_info_alter(&$type) {
     $type['language_select']['#process'] = array_merge($type['language_select']['#process'], array('language_process_language_select', 'form_process_select', 'ajax_process_form'));
     $type['language_select']['#theme'] = 'select';
     $type['language_select']['#theme_wrappers'] = array_merge($type['language_select']['#theme_wrappers'], array('form_element'));
-    $type['language_select']['#languages'] = Language::STATE_CONFIGURABLE;
+    $type['language_select']['#languages'] = LanguageInterface::STATE_CONFIGURABLE;
     $type['language_select']['#multiple'] = FALSE;
   }
 }
@@ -198,7 +198,7 @@ function language_configuration_element_default_options() {
     'authors_default' => t("Author's preferred language"),
   );
 
-  $languages = \Drupal::languageManager()->getLanguages(Language::STATE_ALL);
+  $languages = \Drupal::languageManager()->getLanguages(LanguageInterface::STATE_ALL);
   foreach ($languages as $langcode => $language) {
     $language_options[$langcode] = $language->locked ? t('- @name -', array('@name' => $language->name)) : $language->name;
   }
@@ -446,7 +446,7 @@ function language_save($language) {
  *   TRUE if language is successfully deleted. Otherwise FALSE.
  */
 function language_delete($langcode) {
-  $languages = \Drupal::languageManager()->getLanguages(Language::STATE_ALL);
+  $languages = \Drupal::languageManager()->getLanguages(LanguageInterface::STATE_ALL);
   if (isset($languages[$langcode]) && !$languages[$langcode]->locked) {
     $language = $languages[$langcode];
 
@@ -488,18 +488,18 @@ function language_delete($langcode) {
  */
 function language_language_types_info() {
   return array(
-    Language::TYPE_INTERFACE => array(
+    LanguageInterface::TYPE_INTERFACE => array(
       'name' => t('User interface text'),
       'description' => t('Order of language detection methods for user interface text. If a translation of user interface text is available in the detected language, it will be displayed.'),
       'locked' => TRUE,
     ),
-    Language::TYPE_CONTENT => array(
+    LanguageInterface::TYPE_CONTENT => array(
       'name' => t('Content'),
       'description' => t('Order of language detection methods for content. If a version of content is available in the detected language, it will be displayed.'),
       'fixed' => array(LanguageNegotiationUI::METHOD_ID),
       'locked' => TRUE,
     ),
-    Language::TYPE_URL => array(
+    LanguageInterface::TYPE_URL => array(
       'fixed' => array(LanguageNegotiationUrl::METHOD_ID, LanguageNegotiationUrlFallback::METHOD_ID),
       'locked' => TRUE,
     ),
diff --git a/core/modules/language/src/Config/LanguageConfigFactoryOverride.php b/core/modules/language/src/Config/LanguageConfigFactoryOverride.php
index fb2a0c3..6c71478 100644
--- a/core/modules/language/src/Config/LanguageConfigFactoryOverride.php
+++ b/core/modules/language/src/Config/LanguageConfigFactoryOverride.php
@@ -12,8 +12,8 @@
 use Drupal\Core\Config\ConfigEvents;
 use Drupal\Core\Config\StorageInterface;
 use Drupal\Core\Config\TypedConfigManagerInterface;
-use Drupal\Core\Language\Language;
 use Drupal\Core\Language\LanguageDefault;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
@@ -56,7 +56,7 @@ class LanguageConfigFactoryOverride implements LanguageConfigFactoryOverrideInte
   /**
    * The language object used to override configuration data.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $language;
 
@@ -127,7 +127,7 @@ class LanguageConfigFactoryOverride implements LanguageConfigFactoryOverrideInte
   /**
    * {@inheritdoc}
    */
-  public function setLanguage(Language $language = NULL) {
+  public function setLanguage(LanguageInterface $language = NULL) {
     $this->language = $language;
     return $this;
   }
diff --git a/core/modules/language/src/Config/LanguageConfigFactoryOverrideInterface.php b/core/modules/language/src/Config/LanguageConfigFactoryOverrideInterface.php
index c7b297d..3b3fae0 100644
--- a/core/modules/language/src/Config/LanguageConfigFactoryOverrideInterface.php
+++ b/core/modules/language/src/Config/LanguageConfigFactoryOverrideInterface.php
@@ -8,7 +8,7 @@
 namespace Drupal\language\Config;
 
 use Drupal\Core\Config\ConfigFactoryOverrideInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageDefault;
 
 /**
@@ -19,7 +19,7 @@
   /**
    * Gets the language object used to override configuration data.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   The language object used to override configuration data.
    */
   public function getLanguage();
@@ -27,12 +27,12 @@
   /**
    * Sets the language to be used in configuration overrides.
    *
-   * @param \Drupal\Core\Language\Language $language
+   * @param \Drupal\Core\Language\LanguageInterface $language
    *   The language object used to override configuration data.
    *
    * @return $this
    */
-  public function setLanguage(Language $language = NULL);
+  public function setLanguage(LanguageInterface $language = NULL);
 
   /**
    * Sets the language to be used in configuration overrides from the default.
diff --git a/core/modules/language/src/ConfigurableLanguageManager.php b/core/modules/language/src/ConfigurableLanguageManager.php
index b28e02b..acd1d64 100644
--- a/core/modules/language/src/ConfigurableLanguageManager.php
+++ b/core/modules/language/src/ConfigurableLanguageManager.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\language;
 
+use Drupal\Core\Language\LanguageInterface as BaseLanguageInterface;
 use Drupal\Core\PhpStorage\PhpStorageFactory;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
@@ -135,7 +136,7 @@ class ConfigurableLanguageManager extends LanguageManager implements Configurabl
    * {@inheritdoc}
    */
   public function isMultilingual() {
-    return count($this->getLanguages(Language::STATE_CONFIGURABLE)) > 1;
+    return count($this->getLanguages(BaseLanguageInterface::STATE_CONFIGURABLE)) > 1;
   }
 
   /**
@@ -197,7 +198,7 @@ class ConfigurableLanguageManager extends LanguageManager implements Configurabl
   /**
    * {@inheritdoc}
    */
-  public function getCurrentLanguage($type = Language::TYPE_INTERFACE) {
+  public function getCurrentLanguage($type = BaseLanguageInterface::TYPE_INTERFACE) {
     if (!isset($this->negotiatedLanguages[$type])) {
       // Ensure we have a valid value for this language type.
       $this->negotiatedLanguages[$type] = $this->getDefaultLanguage();
@@ -214,8 +215,8 @@ class ConfigurableLanguageManager extends LanguageManager implements Configurabl
         // original strings which can be translated by calling them again
         // afterwards. This can happen for instance while parsing negotiation
         // method definitions.
-        elseif ($type == Language::TYPE_INTERFACE) {
-          return new Language(array('id' => Language::LANGCODE_SYSTEM));
+        elseif ($type == BaseLanguageInterface::TYPE_INTERFACE) {
+          return new Language(array('id' => BaseLanguageInterface::LANGCODE_SYSTEM));
         }
       }
     }
@@ -269,7 +270,7 @@ class ConfigurableLanguageManager extends LanguageManager implements Configurabl
   /**
    * {@inheritdoc}
    */
-  public function getLanguages($flags = Language::STATE_CONFIGURABLE) {
+  public function getLanguages($flags = BaseLanguageInterface::STATE_CONFIGURABLE) {
     if (!isset($this->languages)) {
       // Prepopulate the language list with the default language to keep things
       // working even if we have no configuration.
@@ -310,14 +311,14 @@ class ConfigurableLanguageManager extends LanguageManager implements Configurabl
     $max_weight = 0;
 
     // Get maximum weight to update the system languages to keep them on bottom.
-    foreach ($this->getLanguages(Language::STATE_CONFIGURABLE) as $language) {
+    foreach ($this->getLanguages(BaseLanguageInterface::STATE_CONFIGURABLE) as $language) {
       if (!$language->locked && $language->weight > $max_weight) {
         $max_weight = $language->weight;
       }
     }
 
     // Loop locked languages to maintain the existing order.
-    $locked_languages = $this->getLanguages(Language::STATE_LOCKED);
+    $locked_languages = $this->getLanguages(BaseLanguageInterface::STATE_LOCKED);
     $config_ids = array_map(function($language) { return 'language.entity.' . $language->id; }, $locked_languages);
     foreach ($this->configFactory->loadMultiple($config_ids) as $config_id => $config) {
       // Update system languages weight.
@@ -335,7 +336,7 @@ class ConfigurableLanguageManager extends LanguageManager implements Configurabl
       // Get languages ordered by weight, add Language::LANGCODE_NOT_SPECIFIED
       // at the end.
       $candidates = array_keys($this->getLanguages());
-      $candidates[] = Language::LANGCODE_NOT_SPECIFIED;
+      $candidates[] = BaseLanguageInterface::LANGCODE_NOT_SPECIFIED;
       $candidates = array_combine($candidates, $candidates);
 
       // The first candidate should always be the desired language if specified.
@@ -388,7 +389,7 @@ class ConfigurableLanguageManager extends LanguageManager implements Configurabl
   /**
    * {@inheritdoc}
    */
-  public function setConfigOverrideLanguage(Language $language = NULL) {
+  public function setConfigOverrideLanguage(BaseLanguageInterface $language = NULL) {
     $this->configFactoryOverride->setLanguage($language);
     return $this;
   }
diff --git a/core/modules/language/src/Entity/Language.php b/core/modules/language/src/Entity/Language.php
index 8a2f9fe..bdb3d78 100644
--- a/core/modules/language/src/Entity/Language.php
+++ b/core/modules/language/src/Entity/Language.php
@@ -184,7 +184,7 @@ class Language extends ConfigEntityBase implements LanguageInterface {
    * @todo fix return type hint after https://drupal.org/node/2246665 and
    *   https://drupal.org/node/2246679.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   The language configuration entity expressed as a Language value object.
    */
   protected function toLanguageObject() {
diff --git a/core/modules/language/src/Form/LanguageFormBase.php b/core/modules/language/src/Form/LanguageFormBase.php
index d3719bc..583787a 100644
--- a/core/modules/language/src/Form/LanguageFormBase.php
+++ b/core/modules/language/src/Form/LanguageFormBase.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Entity\EntityForm;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\ConfigurableLanguageManagerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -85,8 +85,8 @@
       '#description' => $this->t('Direction that text in this language is presented.'),
       '#default_value' => $language->direction,
       '#options' => array(
-        Language::DIRECTION_LTR => $this->t('Left to right'),
-        Language::DIRECTION_RTL => $this->t('Right to left'),
+        LanguageInterface::DIRECTION_LTR => $this->t('Left to right'),
+        LanguageInterface::DIRECTION_RTL => $this->t('Right to left'),
       ),
     );
 
diff --git a/core/modules/language/src/Form/NegotiationSelectedForm.php b/core/modules/language/src/Form/NegotiationSelectedForm.php
index 14c13f4..47d61eb 100644
--- a/core/modules/language/src/Form/NegotiationSelectedForm.php
+++ b/core/modules/language/src/Form/NegotiationSelectedForm.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\language\Form;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Form\ConfigFormBase;
 
 /**
@@ -30,7 +30,7 @@ class NegotiationSelectedForm extends ConfigFormBase {
     $form['selected_langcode'] = array(
       '#type' => 'language_select',
       '#title' => t('Language'),
-      '#languages' => Language::STATE_CONFIGURABLE | Language::STATE_SITE_DEFAULT,
+      '#languages' => LanguageInterface::STATE_CONFIGURABLE | LanguageInterface::STATE_SITE_DEFAULT,
       '#default_value' => $config->get('selected_langcode'),
     );
 
diff --git a/core/modules/language/src/LanguageNegotiationMethodBase.php b/core/modules/language/src/LanguageNegotiationMethodBase.php
index 9ed0f7c..3f48f7a 100644
--- a/core/modules/language/src/LanguageNegotiationMethodBase.php
+++ b/core/modules/language/src/LanguageNegotiationMethodBase.php
@@ -8,7 +8,7 @@
 namespace Drupal\language;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface as BaseLanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 
 /**
@@ -61,7 +61,7 @@
   /**
    * {@inheritdoc}
    */
-  public function persist(Language $language) {
+  public function persist(BaseLanguageInterface $language) {
     // Remember the method ID used to detect the language.
     $language->method_id = static::METHOD_ID;
   }
diff --git a/core/modules/language/src/LanguageNegotiationMethodInterface.php b/core/modules/language/src/LanguageNegotiationMethodInterface.php
index fefa585..1913d41 100644
--- a/core/modules/language/src/LanguageNegotiationMethodInterface.php
+++ b/core/modules/language/src/LanguageNegotiationMethodInterface.php
@@ -8,7 +8,7 @@
 namespace Drupal\language;
 
 use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface as BaseLanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Symfony\Component\HttpFoundation\Request;
 
@@ -57,9 +57,9 @@
   /**
    * Notifies the plugin that the language code it returned has been accepted.
    *
-   * @param \Drupal\Core\Language\Language $language
+   * @param \Drupal\Core\Language\LanguageInterface $language
    *   The accepted language.
    */
-  public function persist(Language $language);
+  public function persist(BaseLanguageInterface $language);
 
 }
diff --git a/core/modules/language/src/LanguageNegotiator.php b/core/modules/language/src/LanguageNegotiator.php
index ec924e3..cdeb8cf 100644
--- a/core/modules/language/src/LanguageNegotiator.php
+++ b/core/modules/language/src/LanguageNegotiator.php
@@ -187,7 +187,7 @@ class LanguageNegotiator implements LanguageNegotiatorInterface {
    *   The string identifier of the language negotiation method to use to detect
    *   language.
    *
-   * @return \Drupal\Core\Language\Language|NULL
+   * @return \Drupal\Core\Language\LanguageInterface|null
    *   Negotiated language object for given type and method, FALSE otherwise.
    */
   protected function negotiateLanguage($type, $method_id) {
diff --git a/core/modules/language/src/LanguageNegotiatorInterface.php b/core/modules/language/src/LanguageNegotiatorInterface.php
index d12fd6f..5978b42 100644
--- a/core/modules/language/src/LanguageNegotiatorInterface.php
+++ b/core/modules/language/src/LanguageNegotiatorInterface.php
@@ -137,7 +137,7 @@
    * @param string $type
    *   The language type to be initialized.
    *
-   * @return \Drupal\Core\Language\Language
+   * @return \Drupal\Core\Language\LanguageInterface
    *   Return either the language of the specified type or the default language.
    */
   public function initializeType($type);
diff --git a/core/modules/language/src/LanguageServiceProvider.php b/core/modules/language/src/LanguageServiceProvider.php
index 95eb700..a565c1c 100644
--- a/core/modules/language/src/LanguageServiceProvider.php
+++ b/core/modules/language/src/LanguageServiceProvider.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Config\BootstrapConfigStorageFactory;
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\DependencyInjection\ServiceProviderBase;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface as BaseLanguageInterface;
 use Symfony\Component\DependencyInjection\Reference;
 
 /**
@@ -81,7 +81,7 @@ class LanguageServiceProvider extends ServiceProviderBase {
     //   container has finished building.
     $config_storage = BootstrapConfigStorageFactory::get();
     $config_ids = array_filter($config_storage->listAll($prefix), function($config_id) use ($prefix) {
-      return $config_id != $prefix . Language::LANGCODE_NOT_SPECIFIED && $config_id != $prefix . Language::LANGCODE_NOT_APPLICABLE;
+      return $config_id != $prefix . BaseLanguageInterface::LANGCODE_NOT_SPECIFIED && $config_id != $prefix . BaseLanguageInterface::LANGCODE_NOT_APPLICABLE;
     });
     return count($config_ids) > 1;
   }
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
index e56278d..8cf294a 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationSession.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\language\Plugin\LanguageNegotiation;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\PathProcessor\OutboundPathProcessorInterface;
 use Drupal\language\LanguageNegotiationMethodBase;
 use Drupal\language\LanguageSwitcherInterface;
@@ -68,7 +68,7 @@ class LanguageNegotiationSession extends LanguageNegotiationMethodBase implement
   /**
    * {@inheritdoc}
    */
-  public function persist(Language $language) {
+  public function persist(LanguageInterface $language) {
     parent::persist($language);
 
     // We need to update the session parameter with the request value only if we
diff --git a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
index 42a0933..18a2805 100644
--- a/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
+++ b/core/modules/language/src/Plugin/LanguageNegotiation/LanguageNegotiationUrl.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\language\Plugin\LanguageNegotiation;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\PathProcessor\InboundPathProcessorInterface;
 use Drupal\Core\PathProcessor\OutboundPathProcessorInterface;
 use Drupal\language\LanguageNegotiationMethodBase;
@@ -129,7 +129,7 @@ class LanguageNegotiationUrl extends LanguageNegotiationMethodBase implements In
     $languages = array_flip(array_keys($this->languageManager->getLanguages()));
     // Language can be passed as an option, or we go for current URL language.
     if (!isset($options['language'])) {
-      $language_url = $this->languageManager->getCurrentLanguage(Language::TYPE_URL);
+      $language_url = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_URL);
       $options['language'] = $language_url;
     }
     // We allow only added languages here.
diff --git a/core/modules/language/src/Tests/LanguageConfigurationTest.php b/core/modules/language/src/Tests/LanguageConfigurationTest.php
index 6093263..39eb36f 100644
--- a/core/modules/language/src/Tests/LanguageConfigurationTest.php
+++ b/core/modules/language/src/Tests/LanguageConfigurationTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\language\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -160,7 +160,7 @@ function testLanguageConfigurationWeight() {
     \Drupal::languageManager()->reset();
     $max_configurable_language_weight = $this->getHighestConfigurableLanguageWeight();
     $replacements = array('@event' => $state);
-    foreach (\Drupal::languageManager()->getLanguages(Language::STATE_LOCKED) as $locked_language) {
+    foreach (\Drupal::languageManager()->getLanguages(LanguageInterface::STATE_LOCKED) as $locked_language) {
       $replacements['%language'] = $locked_language->name;
       $this->assertTrue($locked_language->weight > $max_configurable_language_weight, format_string('System language %language has higher weight than configurable languages @event', $replacements));
     }
diff --git a/core/modules/language/src/Tests/LanguageCustomLanguageConfigurationTest.php b/core/modules/language/src/Tests/LanguageCustomLanguageConfigurationTest.php
index 9554dd8..b8481ac 100644
--- a/core/modules/language/src/Tests/LanguageCustomLanguageConfigurationTest.php
+++ b/core/modules/language/src/Tests/LanguageCustomLanguageConfigurationTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\simpletest\WebTestBase;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Functional tests for language configuration.
@@ -57,7 +58,7 @@ class LanguageCustomLanguageConfigurationTest extends WebTestBase {
       'predefined_langcode' => 'custom',
       'langcode' => 'white space',
       'name' => '<strong>evil markup</strong>',
-      'direction' => Language::DIRECTION_LTR,
+      'direction' => LanguageInterface::DIRECTION_LTR,
     );
     $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
     $this->assertRaw(t('%field may only contain characters a-z, underscores, or hyphens.', array('%field' => t('Language code'))));
@@ -69,7 +70,7 @@ class LanguageCustomLanguageConfigurationTest extends WebTestBase {
       'predefined_langcode' => 'custom',
       'langcode' => 'de',
       'name' => 'German',
-      'direction' => Language::DIRECTION_LTR,
+      'direction' => LanguageInterface::DIRECTION_LTR,
     );
 
     // Add the language the first time.
diff --git a/core/modules/language/src/Tests/LanguageDependencyInjectionTest.php b/core/modules/language/src/Tests/LanguageDependencyInjectionTest.php
index 067c477..23ba560 100644
--- a/core/modules/language/src/Tests/LanguageDependencyInjectionTest.php
+++ b/core/modules/language/src/Tests/LanguageDependencyInjectionTest.php
@@ -30,7 +30,7 @@ class LanguageDependencyInjectionTest extends LanguageTestBase {
   /**
    * Test dependency injected languages against a new Language object.
    *
-   * @see \Drupal\Core\Language\Language
+   * @see \Drupal\Core\Language\LanguageInterface
    */
   function testDependencyInjectedNewLanguage() {
     $expected = $this->languageManager->getDefaultLanguage();
diff --git a/core/modules/language/src/Tests/LanguageFallbackTest.php b/core/modules/language/src/Tests/LanguageFallbackTest.php
index fb621d8..335909b 100644
--- a/core/modules/language/src/Tests/LanguageFallbackTest.php
+++ b/core/modules/language/src/Tests/LanguageFallbackTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\language\Tests;
 
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests the language fallback behavior.
@@ -41,7 +42,7 @@ class LanguageFallbackTest extends LanguageTestBase {
    */
   public function testCandidates() {
     $language_list = $this->languageManager->getLanguages();
-    $expected = array_keys($language_list + array(Language::LANGCODE_NOT_SPECIFIED => NULL));
+    $expected = array_keys($language_list + array(LanguageInterface::LANGCODE_NOT_SPECIFIED => NULL));
 
     // Check that language fallback candidates by default are all the available
     // languages sorted by weight.
@@ -57,8 +58,8 @@ class LanguageFallbackTest extends LanguageTestBase {
     // Check that candidates are alterable for specific operations.
     $this->state->set('language_test.fallback_alter.candidates', FALSE);
     $this->state->set('language_test.fallback_operation_alter.candidates', TRUE);
-    $expected[] = Language::LANGCODE_NOT_SPECIFIED;
-    $expected[] = Language::LANGCODE_NOT_APPLICABLE;
+    $expected[] = LanguageInterface::LANGCODE_NOT_SPECIFIED;
+    $expected[] = LanguageInterface::LANGCODE_NOT_APPLICABLE;
     $candidates = $this->languageManager->getFallbackCandidates(NULL, array('operation' => 'test'));
     $this->assertEqual(array_values($candidates), $expected, 'Language fallback candidates are alterable for specific operations.');
 
@@ -70,7 +71,7 @@ class LanguageFallbackTest extends LanguageTestBase {
       }
     }
     $candidates = $this->languageManager->getFallbackCandidates();
-    $this->assertEqual(array_values($candidates), array(Language::LANGCODE_DEFAULT), 'Language fallback is not applied when the Language module is not enabled.');
+    $this->assertEqual(array_values($candidates), array(LanguageInterface::LANGCODE_DEFAULT), 'Language fallback is not applied when the Language module is not enabled.');
   }
 
 }
diff --git a/core/modules/language/src/Tests/LanguageListTest.php b/core/modules/language/src/Tests/LanguageListTest.php
index d5abded..6d45905 100644
--- a/core/modules/language/src/Tests/LanguageListTest.php
+++ b/core/modules/language/src/Tests/LanguageListTest.php
@@ -9,6 +9,7 @@
 
 use Drupal\simpletest\WebTestBase;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Functional tests for the language list configuration forms.
@@ -179,10 +180,10 @@ function testLanguageStates() {
     $expected_all_languages = array('l4' => 'l4', 'l3' => 'l3', 'l2' => 'l2', 'l1' => 'l1', 'en' => 'en', 'und' => 'und', 'zxx' => 'zxx');
     $expected_conf_languages = array('l3' => 'l3', 'l1' => 'l1', 'en' => 'en');
 
-    $locked_languages = $this->container->get('language_manager')->getLanguages(Language::STATE_LOCKED);
+    $locked_languages = $this->container->get('language_manager')->getLanguages(LanguageInterface::STATE_LOCKED);
     $this->assertEqual(array_diff_key($expected_locked_languages, $locked_languages), array(), 'Locked languages loaded correctly.');
 
-    $all_languages = $this->container->get('language_manager')->getLanguages(Language::STATE_ALL);
+    $all_languages = $this->container->get('language_manager')->getLanguages(LanguageInterface::STATE_ALL);
     $this->assertEqual(array_diff_key($expected_all_languages, $all_languages), array(), 'All languages loaded correctly.');
 
     $conf_languages = $this->container->get('language_manager')->getLanguages();
diff --git a/core/modules/language/src/Tests/LanguageNegotiationInfoTest.php b/core/modules/language/src/Tests/LanguageNegotiationInfoTest.php
index 70d297c..19d4d82 100644
--- a/core/modules/language/src/Tests/LanguageNegotiationInfoTest.php
+++ b/core/modules/language/src/Tests/LanguageNegotiationInfoTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\language\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI;
 use Drupal\simpletest\WebTestBase;
 
@@ -91,7 +91,7 @@ function testInfoAlterations() {
     // of saving the language negotiation settings.
     $this->checkFixedLanguageTypes();
 
-    $type = Language::TYPE_CONTENT;
+    $type = LanguageInterface::TYPE_CONTENT;
     $language_types = $this->languageManager()->getLanguageTypes();
     $this->assertTrue(in_array($type, $language_types), 'Content language type is configurable.');
 
@@ -138,7 +138,7 @@ function testInfoAlterations() {
     $last = $this->container->get('state')->get('language_test.language_negotiation_last');
     foreach ($this->languageManager()->getDefinedLanguageTypes() as $type) {
       $langcode = $last[$type];
-      $value = $type == Language::TYPE_CONTENT || strpos($type, 'test') !== FALSE ? 'it' : 'en';
+      $value = $type == LanguageInterface::TYPE_CONTENT || strpos($type, 'test') !== FALSE ? 'it' : 'en';
       $this->assertEqual($langcode, $value, format_string('The negotiated language for %type is %language', array('%type' => $type, '%language' => $value)));
     }
 
diff --git a/core/modules/language/src/Tests/LanguageSwitchingTest.php b/core/modules/language/src/Tests/LanguageSwitchingTest.php
index b4c4616..d7609cc 100644
--- a/core/modules/language/src/Tests/LanguageSwitchingTest.php
+++ b/core/modules/language/src/Tests/LanguageSwitchingTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\language\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -43,7 +43,7 @@ function setUp() {
    */
   function testLanguageBlock() {
     // Enable the language switching block..
-    $block = $this->drupalPlaceBlock('language_block:' . Language::TYPE_INTERFACE, array(
+    $block = $this->drupalPlaceBlock('language_block:' . LanguageInterface::TYPE_INTERFACE, array(
       'id' => 'test_language_block',
       // Ensure a 2-byte UTF-8 sequence is in the tested output.
       'label' => $this->randomName(8) . '×',
diff --git a/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php b/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php
index 1a2e5d6..9ccdd9f 100644
--- a/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php
+++ b/core/modules/language/src/Tests/LanguageUILanguageNegotiationTest.php
@@ -14,6 +14,7 @@
 use Drupal\user\Plugin\LanguageNegotiation\LanguageNegotiationUserAdmin;
 use Drupal\simpletest\WebTestBase;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Drupal\language\LanguageNegotiatorInterface;
 
@@ -243,7 +244,7 @@ function testUILanguageNegotiation() {
     // Unknown language prefix should return 404.
     $definitions = \Drupal::languageManager()->getNegotiator()->getNegotiationMethods();
     \Drupal::config('language.types')
-      ->set('negotiation.' . Language::TYPE_INTERFACE . '.enabled', array_flip(array_keys($definitions)))
+      ->set('negotiation.' . LanguageInterface::TYPE_INTERFACE . '.enabled', array_flip(array_keys($definitions)))
       ->save();
     $this->drupalGet("$langcode_unknown/admin/config", array(), $http_header_browser_fallback);
     $this->assertResponse(404, "Unknown language path prefix should return 404");
@@ -338,7 +339,7 @@ function testUILanguageNegotiation() {
   protected function runTest($test) {
     if (!empty($test['language_negotiation'])) {
       $method_weights = array_flip($test['language_negotiation']);
-      $this->container->get('language_negotiator')->saveConfiguration(Language::TYPE_INTERFACE, $method_weights);
+      $this->container->get('language_negotiator')->saveConfiguration(LanguageInterface::TYPE_INTERFACE, $method_weights);
     }
     if (!empty($test['language_negotiation_url_part'])) {
       \Drupal::config('language.negotiation')
@@ -382,7 +383,7 @@ function testUrlLanguageFallback() {
     $this->drupalGet('admin/config/regional/language/detection');
 
     // Enable the language switcher block.
-    $this->drupalPlaceBlock('language_block:' . Language::TYPE_INTERFACE, array('id' => 'test_language_block'));
+    $this->drupalPlaceBlock('language_block:' . LanguageInterface::TYPE_INTERFACE, array('id' => 'test_language_block'));
 
     // Log out, because for anonymous users, the "active" class is set by PHP
     // (which means we can easily test it here), whereas for authenticated users
diff --git a/core/modules/language/tests/language_test/language_test.module b/core/modules/language/tests/language_test/language_test.module
index e1fd47e..aaa34fd 100644
--- a/core/modules/language/tests/language_test/language_test.module
+++ b/core/modules/language/tests/language_test/language_test.module
@@ -5,7 +5,7 @@
  * Mock module for language layer tests.
  */
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUI;
 
 /**
@@ -41,13 +41,13 @@ function language_test_language_types_info() {
  */
 function language_test_language_types_info_alter(array &$language_types) {
   if (\Drupal::state()->get('language_test.content_language_type')) {
-    $language_types[Language::TYPE_CONTENT]['locked'] = FALSE;
-    unset($language_types[Language::TYPE_CONTENT]['fixed']);
-    // By default languages are not configurable. Make Language::TYPE_CONTENT
-    // configurable.
+    $language_types[LanguageInterface::TYPE_CONTENT]['locked'] = FALSE;
+    unset($language_types[LanguageInterface::TYPE_CONTENT]['fixed']);
+    // By default languages are not configurable. Make
+    // LanguageInterface::TYPE_CONTENT configurable.
     $configurable = \Drupal::config('language.types')->get('configurable');
-    if (!in_array(Language::TYPE_CONTENT, $configurable)) {
-      $configurable[] = Language::TYPE_CONTENT;
+    if (!in_array(LanguageInterface::TYPE_CONTENT, $configurable)) {
+      $configurable[] = LanguageInterface::TYPE_CONTENT;
       \Drupal::config('language.types')->set('configurable', $configurable)->save();
     }
   }
@@ -80,7 +80,7 @@ function language_test_store_language_negotiation() {
  */
 function language_test_language_fallback_candidates_alter(array &$candidates, array $context) {
   if (Drupal::state()->get('language_test.fallback_alter.candidates')) {
-    unset($candidates[Language::LANGCODE_NOT_SPECIFIED]);
+    unset($candidates[LanguageInterface::LANGCODE_NOT_SPECIFIED]);
   }
 }
 
@@ -89,7 +89,7 @@ function language_test_language_fallback_candidates_alter(array &$candidates, ar
  */
 function language_test_language_fallback_candidates_test_alter(array &$candidates, array $context) {
   if (Drupal::state()->get('language_test.fallback_operation_alter.candidates')) {
-    $langcode = Language::LANGCODE_NOT_APPLICABLE;
+    $langcode = LanguageInterface::LANGCODE_NOT_APPLICABLE;
     $candidates[$langcode] = $langcode;
   }
 }
diff --git a/core/modules/locale/locale.bulk.inc b/core/modules/locale/locale.bulk.inc
index 06c0887..2aafd92 100644
--- a/core/modules/locale/locale.bulk.inc
+++ b/core/modules/locale/locale.bulk.inc
@@ -7,6 +7,7 @@
 
 use Drupal\locale\Gettext;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\file\FileInterface;
 
 /**
@@ -192,7 +193,7 @@ function locale_translate_batch_import($file, $options, &$context) {
     'customized' => LOCALE_NOT_CUSTOMIZED,
   );
 
-  if (isset($file->langcode) && $file->langcode != Language::LANGCODE_NOT_SPECIFIED) {
+  if (isset($file->langcode) && $file->langcode != LanguageInterface::LANGCODE_NOT_SPECIFIED) {
 
     try {
       if (empty($context['sandbox'])) {
@@ -459,7 +460,7 @@ function locale_translate_file_attach_properties($file, $options = array()) {
     $file->langcode = isset($options['langcode']) ? $options['langcode'] : $matches[5];
   }
   else {
-    $file->langcode = Language::LANGCODE_NOT_SPECIFIED;
+    $file->langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
   }
   return $file;
 }
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index d3e05dc..06fa802 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -15,6 +15,7 @@
 use Drupal\Component\Utility\Xss;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\Entity\Language as LanguageEntity;
 use Drupal\Component\Utility\Crypt;
 use Symfony\Component\HttpFoundation\Request;
@@ -628,7 +629,7 @@ function locale_library_alter(array &$library, $name) {
 
     $language_interface = \Drupal::languageManager()->getCurrentLanguage();
     $settings['jquery']['ui']['datepicker'] = array(
-      'isRTL' => $language_interface->direction == Language::DIRECTION_RTL,
+      'isRTL' => $language_interface->direction == LanguageInterface::DIRECTION_RTL,
       'firstDay' => \Drupal::config('system.date')->get('first_day'),
     );
     $library['js'][] = array(
@@ -801,7 +802,7 @@ function locale_system_file_system_settings_submit(&$form, $form_state) {
  * Implements hook_preprocess_HOOK() for node templates.
  */
 function locale_preprocess_node(&$variables) {
-  if ($variables['node']->language()->id != Language::LANGCODE_NOT_SPECIFIED) {
+  if ($variables['node']->language()->id != LanguageInterface::LANGCODE_NOT_SPECIFIED) {
     $language_interface = \Drupal::languageManager()->getCurrentLanguage();
 
     $node_language = $variables['node']->language();
diff --git a/core/modules/locale/src/Form/ExportForm.php b/core/modules/locale/src/Form/ExportForm.php
index 433c8c9..70f611c 100644
--- a/core/modules/locale/src/Form/ExportForm.php
+++ b/core/modules/locale/src/Form/ExportForm.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Gettext\PoStreamWriter;
 use Drupal\Core\Form\FormBase;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\locale\PoDatabaseReader;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -69,7 +69,7 @@ class ExportForm extends FormBase {
     if (empty($language_options)) {
       $form['langcode'] = array(
         '#type' => 'value',
-        '#value' => Language::LANGCODE_SYSTEM,
+        '#value' => LanguageInterface::LANGCODE_SYSTEM,
       );
       $form['langcode_text'] = array(
         '#type' => 'item',
@@ -84,7 +84,7 @@ class ExportForm extends FormBase {
         '#options' => $language_options,
         '#default_value' => $language_default->id,
         '#empty_option' => $this->t('Source text only, no translations'),
-        '#empty_value' => Language::LANGCODE_SYSTEM,
+        '#empty_value' => LanguageInterface::LANGCODE_SYSTEM,
       );
       $form['content_options'] = array(
         '#type' => 'details',
@@ -93,7 +93,7 @@ class ExportForm extends FormBase {
         '#tree' => TRUE,
         '#states' => array(
           'invisible' => array(
-            ':input[name="langcode"]' => array('value' => Language::LANGCODE_SYSTEM),
+            ':input[name="langcode"]' => array('value' => LanguageInterface::LANGCODE_SYSTEM),
           ),
         ),
       );
@@ -129,7 +129,7 @@ class ExportForm extends FormBase {
    */
   public function submitForm(array &$form, array &$form_state) {
     // If template is required, language code is not given.
-    if ($form_state['values']['langcode'] != Language::LANGCODE_SYSTEM) {
+    if ($form_state['values']['langcode'] != LanguageInterface::LANGCODE_SYSTEM) {
       $language = $this->languageManager->getLanguage($form_state['values']['langcode']);
     }
     else {
diff --git a/core/modules/locale/src/LocaleConfigManager.php b/core/modules/locale/src/LocaleConfigManager.php
index 5b0aa4e..9e0f3de 100644
--- a/core/modules/locale/src/LocaleConfigManager.php
+++ b/core/modules/locale/src/LocaleConfigManager.php
@@ -8,10 +8,10 @@
 namespace Drupal\locale;
 
 use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\Language\Language;
 use Drupal\Core\Config\TypedConfigManager;
 use Drupal\Core\Config\StorageInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\language\ConfigurableLanguageManagerInterface;
 
 /**
@@ -307,13 +307,13 @@ class LocaleConfigManager extends TypedConfigManager {
    *
    * @param string $name
    *   Configuration name.
-   * @param \Drupal\Core\Language\Language $language
+   * @param \Drupal\Core\Language\LanguageInterface $language
    *   A language object.
    *
    * @return bool
    *   A boolean indicating if a language has configuration translations.
    */
-  public function hasTranslation($name, Language $language) {
+  public function hasTranslation($name, LanguageInterface $language) {
     $translation = $this->languageManager->getLanguageConfigOverride($language->id, $name);
     return !$translation->isNew();
   }
diff --git a/core/modules/locale/src/LocaleTranslation.php b/core/modules/locale/src/LocaleTranslation.php
index 63abc07..d9a9800 100644
--- a/core/modules/locale/src/LocaleTranslation.php
+++ b/core/modules/locale/src/LocaleTranslation.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\DestructableInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Lock\LockBackendInterface;
 use Drupal\Core\StringTranslation\Translator\TranslatorInterface;
@@ -101,7 +101,7 @@ class LocaleTranslation implements TranslatorInterface, DestructableInterface {
    */
   public function getStringTranslation($langcode, $string, $context) {
     // If the language is not suitable for locale module, just return.
-    if ($langcode == Language::LANGCODE_SYSTEM || ($langcode == 'en' && !$this->canTranslateEnglish())) {
+    if ($langcode == LanguageInterface::LANGCODE_SYSTEM || ($langcode == 'en' && !$this->canTranslateEnglish())) {
       return FALSE;
     }
     // Strings are cached by langcode, context and roles, using instances of the
diff --git a/core/modules/locale/src/Tests/LocalePathTest.php b/core/modules/locale/src/Tests/LocalePathTest.php
index cae7f4b..64d9b1b 100644
--- a/core/modules/locale/src/Tests/LocalePathTest.php
+++ b/core/modules/locale/src/Tests/LocalePathTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\locale\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -106,7 +106,7 @@ function testPathLanguageConfiguration() {
     $edit = array(
       'source'   => 'node/' . $node->id(),
       'alias'    => $custom_path,
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
     $this->container->get('path.alias_storage')->save($edit['source'], $edit['alias'], $edit['langcode']);
     $lookup_path = $this->container->get('path.alias_manager')->getAliasByPath('node/' . $node->id(), 'en');
@@ -118,7 +118,7 @@ function testPathLanguageConfiguration() {
 
     // Create language nodes to check priority of aliases.
     $first_node = $this->drupalCreateNode(array('type' => 'page', 'promote' => 1, 'langcode' => 'en'));
-    $second_node = $this->drupalCreateNode(array('type' => 'page', 'promote' => 1, 'langcode' => Language::LANGCODE_NOT_SPECIFIED));
+    $second_node = $this->drupalCreateNode(array('type' => 'page', 'promote' => 1, 'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED));
 
     // Assign a custom path alias to the first node with the English language.
     $edit = array(
diff --git a/core/modules/locale/src/Tests/LocaleTranslationUiTest.php b/core/modules/locale/src/Tests/LocaleTranslationUiTest.php
index fa33010..ed3660d 100644
--- a/core/modules/locale/src/Tests/LocaleTranslationUiTest.php
+++ b/core/modules/locale/src/Tests/LocaleTranslationUiTest.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\simpletest\WebTestBase;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Component\Utility\String;
 
 /**
@@ -152,7 +153,7 @@ function testStringTranslation() {
     $this->container->get('string_translation')->reset();
     // Now we should get the proper fresh translation from t().
     $this->assertTrue($name != $translation_to_en && t($name, array(), array('langcode' => 'en')) == $translation_to_en, 't() works for English.');
-    $this->assertTrue(t($name, array(), array('langcode' => Language::LANGCODE_SYSTEM)) == $name, 't() works for Language::LANGCODE_SYSTEM.');
+    $this->assertTrue(t($name, array(), array('langcode' => LanguageInterface::LANGCODE_SYSTEM)) == $name, 't() works for Language::LANGCODE_SYSTEM.');
 
     $search = array(
       'string' => $name,
diff --git a/core/modules/menu_link/src/MenuLinkForm.php b/core/modules/menu_link/src/MenuLinkForm.php
index d428734..6eee313 100644
--- a/core/modules/menu_link/src/MenuLinkForm.php
+++ b/core/modules/menu_link/src/MenuLinkForm.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Utility\UrlHelper;
 use Drupal\Core\Entity\EntityForm;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Path\AliasManagerInterface;
 use Drupal\Core\Routing\UrlGenerator;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -181,7 +181,7 @@ class MenuLinkForm extends EntityForm {
     $form['langcode'] = array(
       '#type' => 'language_select',
       '#title' => t('Language'),
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
       '#default_value' => $default_langcode,
       '#access' => $language_show,
     );
diff --git a/core/modules/menu_ui/src/MenuForm.php b/core/modules/menu_ui/src/MenuForm.php
index a1c422d..4d2eac8 100644
--- a/core/modules/menu_ui/src/MenuForm.php
+++ b/core/modules/menu_ui/src/MenuForm.php
@@ -10,7 +10,7 @@
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Entity\EntityForm;
 use Drupal\Core\Entity\Query\QueryFactory;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Render\Element;
 use Drupal\menu_link\MenuLinkStorageInterface;
 use Drupal\menu_link\MenuTreeInterface;
@@ -117,7 +117,7 @@ class MenuForm extends EntityForm {
     $form['langcode'] = array(
       '#type' => 'language_select',
       '#title' => t('Menu language'),
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
       '#default_value' => $menu->langcode,
     );
     // Unlike the menu langcode, the default language configuration for menu
diff --git a/core/modules/migrate/src/Plugin/migrate/process/MachineName.php b/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
index 80532bc..9af3fdc 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MachineName.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\migrate\Plugin\migrate\process;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate\Row;
@@ -34,7 +34,7 @@ class MachineName extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutable $migrate_executable, Row $row, $destination_property) {
-    $new_value = $this->getTransliteration()->transliterate($value, Language::LANGCODE_DEFAULT, '_');
+    $new_value = $this->getTransliteration()->transliterate($value, LanguageInterface::LANGCODE_DEFAULT, '_');
     $new_value = strtolower($new_value);
     $new_value = preg_replace('/[^a-z0-9_]+/', '_', $new_value);
     return preg_replace('/_+/', '_', $new_value);
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateAggregatorFeedTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateAggregatorFeedTest.php
index 1110f72..6b57800 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateAggregatorFeedTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateAggregatorFeedTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\migrate_drupal\Tests\d6;
 
 use Drupal\aggregator\Entity\Feed;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
 
@@ -52,7 +52,7 @@ class MigrateAggregatorFeedTest extends MigrateDrupalTestBase {
     $feed = entity_load('aggregator_feed', 5);
     $this->assertNotNull($feed->uuid());
     $this->assertEqual($feed->title->value, 'Know Your Meme');
-    $this->assertEqual($feed->language()->id, Language::LANGCODE_NOT_SPECIFIED);
+    $this->assertEqual($feed->language()->id, LanguageInterface::LANGCODE_NOT_SPECIFIED);
     $this->assertEqual($feed->url->value, 'http://knowyourmeme.com/newsfeed.rss');
     $this->assertEqual($feed->refresh->value, 900);
     $this->assertEqual($feed->checked->value, 1387659487);
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateAggregatorItemTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateAggregatorItemTest.php
index c5ca816..520dccf 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateAggregatorItemTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateAggregatorItemTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\migrate_drupal\Tests\d6;
 
 use Drupal\aggregator\Entity\Item;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
 
@@ -76,7 +76,7 @@ class MigrateAggregatorItemTest extends MigrateDrupalTestBase {
     $this->assertEqual($item->getDescription(), "<h2 id='new'>What's new with Drupal 8?</h2>");
     $this->assertEqual($item->getLink(), 'https://groups.drupal.org/node/395218');
     $this->assertEqual($item->getPostedTime(), 1389297196);
-    $this->assertEqual($item->language()->id, Language::LANGCODE_NOT_SPECIFIED);
+    $this->assertEqual($item->language()->id, LanguageInterface::LANGCODE_NOT_SPECIFIED);
     $this->assertEqual($item->getGuid(), '395218 at https://groups.drupal.org');
 
   }
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTest.php
index 9b1b78c..c8cb1a6 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateCommentTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\migrate_drupal\Tests\d6;
 
 use Drupal\comment\Entity\Comment;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
 
@@ -76,7 +76,7 @@ class MigrateCommentTest extends MigrateDrupalTestBase {
     $this->assertEqual(0, $comment->pid->target_id);
     $this->assertEqual(1, $comment->entity_id->target_id);
     $this->assertEqual('node', $comment->entity_type->value);
-    $this->assertEqual(Language::LANGCODE_NOT_SPECIFIED, $comment->language()->id);
+    $this->assertEqual(LanguageInterface::LANGCODE_NOT_SPECIFIED, $comment->language()->id);
 
     $comment = entity_load('comment', 2);
     $this->assertEqual('The response to the second comment.', $comment->subject->value);
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateCustomBlockTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateCustomBlockTest.php
index d48acaf..128dc3c 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateCustomBlockTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateCustomBlockTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\migrate_drupal\Tests\d6;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\custom_block\Entity\CustomBlock;
 use Drupal\migrate\MigrateExecutable;
 use Drupal\migrate_drupal\Tests\MigrateDrupalTestBase;
@@ -59,7 +59,7 @@ class MigrateCustomBlockTest extends MigrateDrupalTestBase {
     $this->assertEqual('My block 1', $block->label());
     $this->assertEqual(1, $block->getRevisionId());
     $this->assertTrue(REQUEST_TIME <= $block->getChangedTime() && $block->getChangedTime() <= time());
-    $this->assertEqual(Language::LANGCODE_NOT_SPECIFIED, $block->language()->id);
+    $this->assertEqual(LanguageInterface::LANGCODE_NOT_SPECIFIED, $block->language()->id);
     $this->assertEqual('<h3>My first custom block body</h3>', $block->body->value);
     $this->assertEqual('full_html', $block->body->format);
 
@@ -67,7 +67,7 @@ class MigrateCustomBlockTest extends MigrateDrupalTestBase {
     $this->assertEqual('My block 2', $block->label());
     $this->assertEqual(2, $block->getRevisionId());
     $this->assertTrue(REQUEST_TIME <= $block->getChangedTime() && $block->getChangedTime() <= time());
-    $this->assertEqual(Language::LANGCODE_NOT_SPECIFIED, $block->language()->id);
+    $this->assertEqual(LanguageInterface::LANGCODE_NOT_SPECIFIED, $block->language()->id);
     $this->assertEqual('<h3>My second custom block body</h3>', $block->body->value);
     $this->assertEqual('full_html', $block->body->format);
   }
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 2253f71..2369217 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -9,7 +9,7 @@
  */
 
 use Drupal\Component\Utility\Xss;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Render\Element;
 use Drupal\Core\Url;
 use Symfony\Component\HttpFoundation\Request;
@@ -1033,7 +1033,7 @@ function node_block_access(Block $block, $operation, AccountInterface $account, 
  */
 function node_feed($nids = FALSE, $channel = array()) {
   global $base_url;
-  $language_content = \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT);
+  $language_content = \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT);
   $rss_config = \Drupal::config('system.rss');
 
   if ($nids === FALSE) {
diff --git a/core/modules/node/node.tokens.inc b/core/modules/node/node.tokens.inc
index 8789047..6a09163 100644
--- a/core/modules/node/node.tokens.inc
+++ b/core/modules/node/node.tokens.inc
@@ -5,7 +5,7 @@
  * Builds placeholder replacement tokens for node-related data.
  */
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Implements hook_token_info().
@@ -94,7 +94,7 @@ function node_tokens($type, $tokens, array $data = array(), array $options = arr
     $langcode = $options['langcode'];
   }
   else {
-    $langcode = Language::LANGCODE_DEFAULT;
+    $langcode = LanguageInterface::LANGCODE_DEFAULT;
   }
   $sanitize = !empty($options['sanitize']);
 
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index 1d21504..cbe39f0 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\FieldDefinition;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\node\NodeInterface;
 use Drupal\user\UserInterface;
@@ -163,7 +163,7 @@ class Node extends ContentEntityBase implements NodeInterface {
       // Load languages the node exists in.
       $node_translations = $this->getTranslationLanguages();
       // Load the language from content negotiation.
-      $content_negotiation_langcode = \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT)->id;
+      $content_negotiation_langcode = \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id;
       // If there is a translation available, use it.
       if (isset($node_translations[$content_negotiation_langcode])) {
         $langcode = $content_negotiation_langcode;
diff --git a/core/modules/node/src/NodeAccessController.php b/core/modules/node/src/NodeAccessController.php
index 7b85600..6c058ad 100644
--- a/core/modules/node/src/NodeAccessController.php
+++ b/core/modules/node/src/NodeAccessController.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Database\Query\SelectInterface;
 use Drupal\Core\Entity\EntityControllerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Entity\EntityAccessController;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\ContentEntityBase;
@@ -58,7 +58,7 @@ class NodeAccessController extends EntityAccessController implements NodeAccessC
   /**
    * {@inheritdoc}
    */
-  public function access(EntityInterface $entity, $operation, $langcode = Language::LANGCODE_DEFAULT, AccountInterface $account = NULL) {
+  public function access(EntityInterface $entity, $operation, $langcode = LanguageInterface::LANGCODE_DEFAULT, AccountInterface $account = NULL) {
     if (user_access('bypass node access', $account)) {
       return TRUE;
     }
diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php
index 37bb7da..6a8c193 100644
--- a/core/modules/node/src/NodeForm.php
+++ b/core/modules/node/src/NodeForm.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Entity\ContentEntityForm;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Component\Utility\String;
 
 /**
@@ -90,7 +90,7 @@ class NodeForm extends ContentEntityForm {
       '#title' => t('Language'),
       '#type' => 'language_select',
       '#default_value' => $node->getUntranslated()->language()->id,
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
       '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'],
     );
 
diff --git a/core/modules/node/src/NodeListBuilder.php b/core/modules/node/src/NodeListBuilder.php
index fc9c0ba..4ddc56e 100644
--- a/core/modules/node/src/NodeListBuilder.php
+++ b/core/modules/node/src/NodeListBuilder.php
@@ -13,7 +13,7 @@
 use Drupal\Core\Entity\EntityListBuilder;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -99,7 +99,7 @@ class NodeListBuilder extends EntityListBuilder {
     $langcode = $entity->language()->id;
     $uri = $entity->urlInfo();
     $options = $uri->getOptions();
-    $options += ($langcode != Language::LANGCODE_NOT_SPECIFIED && isset($languages[$langcode]) ? array('language' => $languages[$langcode]) : array());
+    $options += ($langcode != LanguageInterface::LANGCODE_NOT_SPECIFIED && isset($languages[$langcode]) ? array('language' => $languages[$langcode]) : array());
     $uri->setOptions($options);
     $row['title']['data'] = array(
       '#type' => 'link',
diff --git a/core/modules/node/src/NodeStorage.php b/core/modules/node/src/NodeStorage.php
index 8bb17fd..a95d69e 100644
--- a/core/modules/node/src/NodeStorage.php
+++ b/core/modules/node/src/NodeStorage.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Database\Database;
 use Drupal\Core\Entity\ContentEntityDatabaseStorage;
 use Drupal\Core\Session\AccountInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Defines the controller class for nodes.
@@ -55,7 +55,7 @@ class NodeStorage extends ContentEntityDatabaseStorage implements NodeStorageInt
    */
   public function clearRevisionsLanguage($language) {
     return $this->database->update('node_revision')
-      ->fields(array('langcode' => Language::LANGCODE_NOT_SPECIFIED))
+      ->fields(array('langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED))
       ->condition('langcode', $language->id)
       ->execute();
   }
diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index 1bcd79b..ecb01d6 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -13,7 +13,7 @@
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\State\StateInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Access\AccessibleInterface;
 use Drupal\Core\Database\Query\Condition;
@@ -452,7 +452,7 @@ class NodeSearch extends ConfigurableSearchPluginBase implements AccessibleInter
 
     // Add languages.
     $language_options = array();
-    $language_list = \Drupal::languageManager()->getLanguages(Language::STATE_ALL);
+    $language_list = \Drupal::languageManager()->getLanguages(LanguageInterface::STATE_ALL);
     foreach ($language_list as $langcode => $language) {
       // Make locked languages appear special in the list.
       $language_options[$langcode] = $language->locked ? t('- @name -', array('@name' => $language->name)) : $language->name;
diff --git a/core/modules/node/src/Tests/NodeAccessLanguageTest.php b/core/modules/node/src/Tests/NodeAccessLanguageTest.php
index feeae45..619fcac 100644
--- a/core/modules/node/src/Tests/NodeAccessLanguageTest.php
+++ b/core/modules/node/src/Tests/NodeAccessLanguageTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\node\Tests;
 
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Verifies node access functionality for multiple languages.
@@ -82,7 +83,7 @@ function testNodeAccess() {
     // Creating a public node with no special langcode, like when no language
     // module enabled.
     $node_public_no_language = $this->drupalCreateNode(array('private' => FALSE));
-    $this->assertTrue($node_public_no_language->language()->id == Language::LANGCODE_NOT_SPECIFIED, 'Node created with not specified language.');
+    $this->assertTrue($node_public_no_language->language()->id == LanguageInterface::LANGCODE_NOT_SPECIFIED, 'Node created with not specified language.');
 
     // Tests that access is granted if requested with no language.
     $this->assertNodeAccess($expected_node_access, $node_public_no_language, $web_user);
@@ -172,7 +173,7 @@ function testNodeAccessPrivate() {
     // Creating a private node with no special langcode, like when no language
     // module enabled.
     $node_private_no_language = $this->drupalCreateNode(array('private' => TRUE));
-    $this->assertTrue($node_private_no_language->language()->id == Language::LANGCODE_NOT_SPECIFIED, 'Node created with not specified language.');
+    $this->assertTrue($node_private_no_language->language()->id == LanguageInterface::LANGCODE_NOT_SPECIFIED, 'Node created with not specified language.');
 
     // Tests that access is not granted if requested with no language.
     $this->assertNodeAccess($expected_node_access_no_access, $node_private_no_language, $web_user);
@@ -245,7 +246,7 @@ function testNodeAccessQueryTag() {
     // Creating a public node with no special langcode, like when no language
     // module enabled.
     $node_no_language = $this->drupalCreateNode(array('private' => FALSE));
-    $this->assertTrue($node_no_language->language()->id == Language::LANGCODE_NOT_SPECIFIED, 'Node created with not specified language.');
+    $this->assertTrue($node_no_language->language()->id == LanguageInterface::LANGCODE_NOT_SPECIFIED, 'Node created with not specified language.');
 
     // Query the nodes table as the web user with the node access tag and no
     // specific langcode.
diff --git a/core/modules/node/src/Tests/NodeCreationTest.php b/core/modules/node/src/Tests/NodeCreationTest.php
index 540f952..62846cf 100644
--- a/core/modules/node/src/Tests/NodeCreationTest.php
+++ b/core/modules/node/src/Tests/NodeCreationTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\node\Tests;
 
 use Drupal\Core\Database\Database;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests creating and saving a node.
@@ -84,7 +84,7 @@ function testFailedPageCreation() {
       'uid'      => $this->loggedInUser->id(),
       'name'     => $this->loggedInUser->name,
       'type'     => 'page',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'title'    => 'testing_transaction_exception',
     );
 
diff --git a/core/modules/node/src/Tests/NodeFieldMultilingualTestCase.php b/core/modules/node/src/Tests/NodeFieldMultilingualTestCase.php
index fd83b93..fee7ba3 100644
--- a/core/modules/node/src/Tests/NodeFieldMultilingualTestCase.php
+++ b/core/modules/node/src/Tests/NodeFieldMultilingualTestCase.php
@@ -11,6 +11,7 @@
 use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationUrl;
 use Drupal\simpletest\WebTestBase;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Functional test for multilingual fields.
@@ -101,7 +102,7 @@ function testMultilingualNodeForm() {
     $this->assertTrue($node->language()->id == $langcode && $node->body->value == $body_value, 'Field language correctly changed.');
 
     // Enable content language URL detection.
-    $this->container->get('language_negotiator')->saveConfiguration(Language::TYPE_CONTENT, array(LanguageNegotiationUrl::METHOD_ID => 0));
+    $this->container->get('language_negotiator')->saveConfiguration(LanguageInterface::TYPE_CONTENT, array(LanguageNegotiationUrl::METHOD_ID => 0));
 
     // Test multilingual field language fallback logic.
     $this->drupalGet("it/node/{$node->id()}");
diff --git a/core/modules/node/src/Tests/PagePreviewTest.php b/core/modules/node/src/Tests/PagePreviewTest.php
index 48a8ea6..5137bbd 100644
--- a/core/modules/node/src/Tests/PagePreviewTest.php
+++ b/core/modules/node/src/Tests/PagePreviewTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\node\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests the node entity preview functionality.
@@ -47,7 +47,7 @@ function setUp() {
       'name' => $this->randomName(),
       'description' => $this->randomName(),
       'vid' => $this->randomName(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'help' => '',
     ));
     $vocabulary->save();
@@ -59,7 +59,7 @@ function setUp() {
       'name' => $this->randomName(),
       'description' => $this->randomName(),
       'vid' => $this->vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $term->save();
 
diff --git a/core/modules/path/src/Form/AddForm.php b/core/modules/path/src/Form/AddForm.php
index a5b056b..aab238b 100644
--- a/core/modules/path/src/Form/AddForm.php
+++ b/core/modules/path/src/Form/AddForm.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\path\Form;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Provides the path add form.
@@ -28,7 +28,7 @@ class AddForm extends PathFormBase {
     return array(
       'source' => '',
       'alias' => '',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'pid' => NULL,
     );
   }
diff --git a/core/modules/path/src/Form/PathFormBase.php b/core/modules/path/src/Form/PathFormBase.php
index ca507d1..a9e80c4 100644
--- a/core/modules/path/src/Form/PathFormBase.php
+++ b/core/modules/path/src/Form/PathFormBase.php
@@ -8,7 +8,7 @@
 namespace Drupal\path\Form;
 
 use Drupal\Core\Form\FormBase;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Path\AliasManagerInterface;
 use Drupal\Core\Path\AliasStorageInterface;
 use Drupal\Core\Url;
@@ -109,7 +109,7 @@
         '#type' => 'select',
         '#title' => $this->t('Language'),
         '#options' => $language_options,
-        '#empty_value' => Language::LANGCODE_NOT_SPECIFIED,
+        '#empty_value' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
         '#empty_option' => $this->t('- None -'),
         '#default_value' => $this->path['langcode'],
         '#weight' => -10,
@@ -141,7 +141,7 @@
     $alias = $form_state['values']['alias'];
     // Language is only set if language.module is enabled, otherwise save for all
     // languages.
-    $langcode = isset($form_state['values']['langcode']) ? $form_state['values']['langcode'] : Language::LANGCODE_NOT_SPECIFIED;
+    $langcode = isset($form_state['values']['langcode']) ? $form_state['values']['langcode'] : LanguageInterface::LANGCODE_NOT_SPECIFIED;
 
     if ($this->aliasStorage->aliasExists($alias, $langcode, $source)) {
       $this->setFormError('alias', $form_state, t('The alias %alias is already in use in this language.', array('%alias' => $alias)));
@@ -164,7 +164,7 @@
     $alias = $form_state['values']['alias'];
     // Language is only set if language.module is enabled, otherwise save for all
     // languages.
-    $langcode = isset($form_state['values']['langcode']) ? $form_state['values']['langcode'] : Language::LANGCODE_NOT_SPECIFIED;
+    $langcode = isset($form_state['values']['langcode']) ? $form_state['values']['langcode'] : LanguageInterface::LANGCODE_NOT_SPECIFIED;
 
     $this->aliasStorage->save($source, $alias, $langcode, $pid);
 
diff --git a/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php b/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
index ac465d9..e416bc5 100644
--- a/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
+++ b/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\WidgetBase;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\Validator\ConstraintViolationInterface;
 
 /**
@@ -33,7 +33,7 @@ class PathWidget extends WidgetBase {
     $path = array();
     if (!$entity->isNew()) {
       $conditions = array('source' => $entity->getSystemPath());
-      if ($items->getLangcode() != Language::LANGCODE_NOT_SPECIFIED) {
+      if ($items->getLangcode() != LanguageInterface::LANGCODE_NOT_SPECIFIED) {
         $conditions['langcode'] = $items->getLangcode();
       }
       $path = \Drupal::service('path.alias_storage')->load($conditions);
diff --git a/core/modules/quickedit/src/Tests/EditorSelectionTest.php b/core/modules/quickedit/src/Tests/EditorSelectionTest.php
index b84f3af..03ce968 100644
--- a/core/modules/quickedit/src/Tests/EditorSelectionTest.php
+++ b/core/modules/quickedit/src/Tests/EditorSelectionTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\quickedit\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\quickedit\Plugin\InPlaceEditorManager;
 use Drupal\quickedit\EditorSelector;
 
@@ -50,7 +50,7 @@ class EditorSelectionTest extends QuickEditTestBase {
    */
   protected function getSelectedEditor($entity_id, $field_name, $view_mode = 'default') {
     $entity = entity_load('entity_test', $entity_id, TRUE);
-    $items = $entity->getTranslation(Language::LANGCODE_NOT_SPECIFIED)->get($field_name);
+    $items = $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED)->get($field_name);
     $options = entity_get_display('entity_test', 'entity_test', $view_mode)->getComponent($field_name);
     return $this->editorSelector->getEditor($options['type'], $items);
   }
diff --git a/core/modules/quickedit/src/Tests/MetadataGeneratorTest.php b/core/modules/quickedit/src/Tests/MetadataGeneratorTest.php
index 3a07223..7418ec0 100644
--- a/core/modules/quickedit/src/Tests/MetadataGeneratorTest.php
+++ b/core/modules/quickedit/src/Tests/MetadataGeneratorTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\quickedit\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\quickedit\EditorSelector;
 use Drupal\quickedit\MetadataGenerator;
 use Drupal\quickedit\Plugin\InPlaceEditorManager;
@@ -102,7 +102,7 @@ class MetadataGeneratorTest extends QuickEditTestBase {
     $entity = entity_load('entity_test', $this->entity->id());
 
     // Verify metadata for field 1.
-    $items_1 = $entity->getTranslation(Language::LANGCODE_NOT_SPECIFIED)->get($field_1_name);
+    $items_1 = $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED)->get($field_1_name);
     $metadata_1 = $this->metadataGenerator->generateFieldMetadata($items_1, 'default');
     $expected_1 = array(
       'access' => TRUE,
@@ -113,7 +113,7 @@ class MetadataGeneratorTest extends QuickEditTestBase {
     $this->assertEqual($expected_1, $metadata_1, 'The correct metadata is generated for the first field.');
 
     // Verify metadata for field 2.
-    $items_2 = $entity->getTranslation(Language::LANGCODE_NOT_SPECIFIED)->get($field_2_name);
+    $items_2 = $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED)->get($field_2_name);
     $metadata_2 = $this->metadataGenerator->generateFieldMetadata($items_2, 'default');
     $expected_2 = array(
       'access' => TRUE,
@@ -175,7 +175,7 @@ class MetadataGeneratorTest extends QuickEditTestBase {
     $entity = entity_load('entity_test', $this->entity->id());
 
     // Verify metadata.
-    $items = $entity->getTranslation(Language::LANGCODE_NOT_SPECIFIED)->get($field_name);
+    $items = $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED)->get($field_name);
     $metadata = $this->metadataGenerator->generateFieldMetadata($items, 'default');
     $expected = array(
       'access' => TRUE,
diff --git a/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php b/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
index 15d8ca9..9bee3e1 100644
--- a/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
+++ b/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -211,7 +211,7 @@ class QuickEditAutocompleteTermTest extends WebTestBase {
       // Use the first available text format.
       'format' => $format->format,
       'vid' => $this->vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $term->save();
     return $term;
diff --git a/core/modules/quickedit/tests/modules/quickedit_test.module b/core/modules/quickedit/tests/modules/quickedit_test.module
index 4d4606c..a9cd1d9 100644
--- a/core/modules/quickedit/tests/modules/quickedit_test.module
+++ b/core/modules/quickedit/tests/modules/quickedit_test.module
@@ -5,9 +5,9 @@
  * Helper module for the Quick Edit tests.
  */
 
-use Drupal\Core\Language\Language;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Implements hook_entity_view_alter().
@@ -21,7 +21,7 @@ function quickedit_test_entity_view_alter(&$build, EntityInterface $entity, Enti
       '#label_display' => 'Label',
       '#entity_type' => $entity->getEntityTypeId(),
       '#bundle' => $entity->bundle(),
-      '#language' => Language::LANGCODE_NOT_SPECIFIED,
+      '#language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       '#field_type' => 'pseudo',
       '#view_mode' => 'default',
       '#object' => $entity,
diff --git a/core/modules/quickedit/tests/src/Access/EditEntityFieldAccessCheckTest.php b/core/modules/quickedit/tests/src/Access/EditEntityFieldAccessCheckTest.php
index d1b0228..d02c092 100644
--- a/core/modules/quickedit/tests/src/Access/EditEntityFieldAccessCheckTest.php
+++ b/core/modules/quickedit/tests/src/Access/EditEntityFieldAccessCheckTest.php
@@ -12,8 +12,8 @@
 use Drupal\quickedit\Access\EditEntityFieldAccessCheck;
 use Drupal\Tests\UnitTestCase;
 use Drupal\field\FieldConfigInterface;
-use Drupal\Core\Language\Language;
 use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests the edit entity field access controller.
@@ -127,14 +127,14 @@ class EditEntityFieldAccessCheckTest extends UnitTestCase {
       ->will($this->returnValue($field));
     $entity_with_field->expects($this->once())
       ->method('hasTranslation')
-      ->with(Language::LANGCODE_NOT_SPECIFIED)
+      ->with(LanguageInterface::LANGCODE_NOT_SPECIFIED)
       ->will($this->returnValue(TRUE));
 
     // Prepare the request to be valid.
     $request->attributes->set('entity_type', 'test_entity');
     $request->attributes->set('entity', $entity_with_field);
     $request->attributes->set('field_name', $field_name);
-    $request->attributes->set('langcode', Language::LANGCODE_NOT_SPECIFIED);
+    $request->attributes->set('langcode', LanguageInterface::LANGCODE_NOT_SPECIFIED);
 
     $account = $this->getMock('Drupal\Core\Session\AccountInterface');
     $access = $this->editAccessCheck->access($request, $field_name, $account);
diff --git a/core/modules/rdf/src/Tests/Field/TaxonomyTermReferenceRdfaTest.php b/core/modules/rdf/src/Tests/Field/TaxonomyTermReferenceRdfaTest.php
index 5086bf1..e9a74a0 100644
--- a/core/modules/rdf/src/Tests/Field/TaxonomyTermReferenceRdfaTest.php
+++ b/core/modules/rdf/src/Tests/Field/TaxonomyTermReferenceRdfaTest.php
@@ -8,7 +8,7 @@
 
 use Drupal\rdf\Tests\Field\FieldRdfaTestBase;
 use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests the RDFa output of the taxonomy term reference field formatter.
@@ -55,7 +55,7 @@ class TaxonomyTermReferenceRdfaTest extends FieldRdfaTestBase {
     $vocabulary = entity_create('taxonomy_vocabulary', array(
       'name' => $this->randomName(),
       'vid' => drupal_strtolower($this->randomName()),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $vocabulary->save();
 
@@ -82,7 +82,7 @@ class TaxonomyTermReferenceRdfaTest extends FieldRdfaTestBase {
     $this->term = entity_create('taxonomy_term', array(
       'name' => $this->randomName(),
       'vid' => $vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $this->term->save();
 
diff --git a/core/modules/search/search.pages.inc b/core/modules/search/search.pages.inc
index 34b235c..10c498f 100644
--- a/core/modules/search/search.pages.inc
+++ b/core/modules/search/search.pages.inc
@@ -5,7 +5,7 @@
  * User page callbacks for the Search module.
  */
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Implements hook_theme_suggestions_HOOK().
@@ -36,7 +36,7 @@ function template_preprocess_search_result(&$variables) {
   $result = $variables['result'];
   $variables['url'] = check_url($result['link']);
   $variables['title'] = check_plain($result['title']);
-  if (isset($result['language']) && $result['language'] != $language_interface->id && $result['language'] != Language::LANGCODE_NOT_SPECIFIED) {
+  if (isset($result['language']) && $result['language'] != $language_interface->id && $result['language'] != LanguageInterface::LANGCODE_NOT_SPECIFIED) {
     $variables['title_attributes']['lang'] = $result['language'];
     $variables['content_attributes']['lang'] = $result['language'];
   }
diff --git a/core/modules/search/src/Tests/SearchMatchTest.php b/core/modules/search/src/Tests/SearchMatchTest.php
index 27b427d..14ea024 100644
--- a/core/modules/search/src/Tests/SearchMatchTest.php
+++ b/core/modules/search/src/Tests/SearchMatchTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\search\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 // The search index can contain different types of content. Typically the type
 // is 'node'. Here we test with _test_ and _test2_ as the type.
@@ -42,10 +42,10 @@ function _setup() {
     \Drupal::config('search.settings')->set('index.minimum_word_size', 3)->save();
 
     for ($i = 1; $i <= 7; ++$i) {
-      search_index($i, SEARCH_TYPE, $this->getText($i), Language::LANGCODE_NOT_SPECIFIED);
+      search_index($i, SEARCH_TYPE, $this->getText($i), LanguageInterface::LANGCODE_NOT_SPECIFIED);
     }
     for ($i = 1; $i <= 5; ++$i) {
-      search_index($i + 7, SEARCH_TYPE_2, $this->getText2($i), Language::LANGCODE_NOT_SPECIFIED);
+      search_index($i + 7, SEARCH_TYPE_2, $this->getText2($i), LanguageInterface::LANGCODE_NOT_SPECIFIED);
     }
     // No getText builder function for Japanese text; just a simple array.
     foreach (array(
@@ -53,7 +53,7 @@ function _setup() {
       14 => 'ドルーパルが大好きよ！',
       15 => 'コーヒーとケーキ',
     ) as $i => $jpn) {
-      search_index($i, SEARCH_TYPE_JPN, $jpn, Language::LANGCODE_NOT_SPECIFIED);
+      search_index($i, SEARCH_TYPE_JPN, $jpn, LanguageInterface::LANGCODE_NOT_SPECIFIED);
     }
     search_update_totals();
   }
diff --git a/core/modules/search/src/Tests/SearchNumberMatchingTest.php b/core/modules/search/src/Tests/SearchNumberMatchingTest.php
index f52a222..65d2bfd 100644
--- a/core/modules/search/src/Tests/SearchNumberMatchingTest.php
+++ b/core/modules/search/src/Tests/SearchNumberMatchingTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\search\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests that various number formats match each other in searching.
@@ -49,7 +49,7 @@ function setUp() {
       $info = array(
         'body' => array(array('value' => $num)),
         'type' => 'page',
-        'language' => Language::LANGCODE_NOT_SPECIFIED,
+        'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       );
       $this->nodes[] = $this->drupalCreateNode($info);
     }
diff --git a/core/modules/search/src/Tests/SearchNumbersTest.php b/core/modules/search/src/Tests/SearchNumbersTest.php
index 6275943..41a41ae 100644
--- a/core/modules/search/src/Tests/SearchNumbersTest.php
+++ b/core/modules/search/src/Tests/SearchNumbersTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\search\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests that numbers with different formats can be searched.
@@ -55,7 +55,7 @@ function setUp() {
       $info = array(
         'body' => array(array('value' => $num)),
         'type' => 'page',
-        'language' => Language::LANGCODE_NOT_SPECIFIED,
+        'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
         'title' => $doc . ' number',
       );
       $this->nodes[$doc] = $this->drupalCreateNode($info);
diff --git a/core/modules/serialization/src/Tests/EntitySerializationTest.php b/core/modules/serialization/src/Tests/EntitySerializationTest.php
index 865704d..d53502a 100644
--- a/core/modules/serialization/src/Tests/EntitySerializationTest.php
+++ b/core/modules/serialization/src/Tests/EntitySerializationTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\serialization\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\Serializer\Serializer;
 use Drupal\Component\Utility\String;
 
@@ -87,7 +87,7 @@ class EntitySerializationTest extends NormalizerTestBase {
         array('value' => $this->entity->uuid()),
       ),
       'langcode' => array(
-        array('value' => Language::LANGCODE_NOT_SPECIFIED),
+        array('value' => LanguageInterface::LANGCODE_NOT_SPECIFIED),
       ),
       'default_langcode' => array(
         array('value' => NULL),
@@ -143,7 +143,7 @@ class EntitySerializationTest extends NormalizerTestBase {
       'id' => '<id><value>' . $this->entity->id() . '</value></id>',
       'revision_id' => '<revision_id><value>' . $this->entity->getRevisionId() . '</value></revision_id>',
       'uuid' => '<uuid><value>' . $this->entity->uuid() . '</value></uuid>',
-      'langcode' => '<langcode><value>' . Language::LANGCODE_NOT_SPECIFIED . '</value></langcode>',
+      'langcode' => '<langcode><value>' . LanguageInterface::LANGCODE_NOT_SPECIFIED . '</value></langcode>',
       'default_langcode' => '<default_langcode><value/></default_langcode>',
       'name' => '<name><value>' . $this->values['name'] . '</value></name>',
       'type' => '<type><value>entity_test_mulrev</value></type>',
diff --git a/core/modules/shortcut/src/ShortcutForm.php b/core/modules/shortcut/src/ShortcutForm.php
index 0e101ff..33c169a 100644
--- a/core/modules/shortcut/src/ShortcutForm.php
+++ b/core/modules/shortcut/src/ShortcutForm.php
@@ -8,7 +8,7 @@
 namespace Drupal\shortcut;
 
 use Drupal\Core\Entity\ContentEntityForm;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Form controller for the shortcut entity forms.
@@ -41,7 +41,7 @@ class ShortcutForm extends ContentEntityForm {
       '#title' => t('Language'),
       '#type' => 'language_select',
       '#default_value' => $this->entity->getUntranslated()->language()->id,
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
     );
 
     return $form;
diff --git a/core/modules/simpletest/src/WebTestBase.php b/core/modules/simpletest/src/WebTestBase.php
index ec50d4d..512ed86 100644
--- a/core/modules/simpletest/src/WebTestBase.php
+++ b/core/modules/simpletest/src/WebTestBase.php
@@ -16,7 +16,7 @@
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\ConnectionNotDefinedException;
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Session\AnonymousUserSession;
 use Drupal\Core\Session\UserSession;
@@ -271,7 +271,7 @@ function drupalGetNodeByTitle($title, $reset = FALSE) {
       'status'    => NODE_PUBLISHED,
       'sticky'    => NODE_NOT_STICKY,
       'type'      => 'page',
-      'langcode'  => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode'  => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
 
     // Use the original node's created time for existing nodes.
diff --git a/core/modules/system/language.api.php b/core/modules/system/language.api.php
index ed6de6c..1fb40e2 100644
--- a/core/modules/system/language.api.php
+++ b/core/modules/system/language.api.php
@@ -5,6 +5,8 @@
  * Hooks provided by the base system for language support.
  */
 
+use Drupal\Core\Language\LanguageInterface;
+
 /**
  * @addtogroup hooks
  * @{
@@ -27,7 +29,7 @@
 function hook_language_switch_links_alter(array &$links, $type, $path) {
   $language_interface = \Drupal::languageManager()->getCurrentLanguage();
 
-  if ($type == \Drupal\Core\Language\Language::TYPE_CONTENT && isset($links[$language_interface->id])) {
+  if ($type == LanguageInterface::TYPE_CONTENT && isset($links[$language_interface->id])) {
     foreach ($links[$language_interface->id] as $link) {
       $link['attributes']['class'][] = 'active-language';
     }
diff --git a/core/modules/system/src/Form/DateFormatFormBase.php b/core/modules/system/src/Form/DateFormatFormBase.php
index 3bfcb60..b528edb 100644
--- a/core/modules/system/src/Form/DateFormatFormBase.php
+++ b/core/modules/system/src/Form/DateFormatFormBase.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Ajax\ReplaceCommand;
 use Drupal\Core\Config\Entity\ConfigEntityStorageInterface;
 use Drupal\Core\Datetime\Date;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Entity\EntityForm;
@@ -146,7 +146,7 @@
     $form['langcode'] = array(
       '#type' => 'language_select',
       '#title' => t('Language'),
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
       '#default_value' => $this->entity->langcode,
     );
 
diff --git a/core/modules/system/src/Tests/Common/FormatDateTest.php b/core/modules/system/src/Tests/Common/FormatDateTest.php
index 171b915..7fd5683 100644
--- a/core/modules/system/src/Tests/Common/FormatDateTest.php
+++ b/core/modules/system/src/Tests/Common/FormatDateTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\system\Tests\Common;
 
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -113,7 +114,7 @@ function testFormatDate() {
       'predefined_langcode' => 'custom',
       'langcode' => self::LANGCODE,
       'name' => self::LANGCODE,
-      'direction' => Language::DIRECTION_LTR,
+      'direction' => LanguageInterface::DIRECTION_LTR,
     );
     $this->drupalPostForm('admin/config/regional/language/add', $edit, t('Add custom language'));
 
diff --git a/core/modules/system/src/Tests/Entity/EntityCrudHookTest.php b/core/modules/system/src/Tests/Entity/EntityCrudHookTest.php
index 1d49a02..f2858ad 100644
--- a/core/modules/system/src/Tests/Entity/EntityCrudHookTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityCrudHookTest.php
@@ -8,8 +8,8 @@
 namespace Drupal\system\Tests\Entity;
 
 use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
-use Drupal\Core\Language\Language;
 use Drupal\Core\Database\Database;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests invocation of hooks when performing an action.
@@ -148,7 +148,7 @@ class EntityCrudHookTest extends EntityUnitTestBase {
       'status' => 1,
       'promote' => 0,
       'sticky' => 0,
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'created' => REQUEST_TIME,
       'changed' => REQUEST_TIME,
     ));
@@ -167,7 +167,7 @@ class EntityCrudHookTest extends EntityUnitTestBase {
       'created' => REQUEST_TIME,
       'changed' => REQUEST_TIME,
       'status' => 1,
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
 
     $this->assertHookMessageOrder(array(
@@ -292,7 +292,7 @@ class EntityCrudHookTest extends EntityUnitTestBase {
       'status' => 1,
       'promote' => 0,
       'sticky' => 0,
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'created' => REQUEST_TIME,
       'changed' => REQUEST_TIME,
     ));
@@ -351,7 +351,7 @@ class EntityCrudHookTest extends EntityUnitTestBase {
     $vocabulary = entity_create('taxonomy_vocabulary', array(
       'name' => 'Test vocabulary',
       'vid' => 'test',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'description' => NULL,
       'module' => 'entity_crud_hook_test',
     ));
@@ -361,7 +361,7 @@ class EntityCrudHookTest extends EntityUnitTestBase {
     $term = entity_create('taxonomy_term', array(
       'vid' => $vocabulary->id(),
       'name' => 'Test term',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'description' => NULL,
       'format' => 1,
     ));
@@ -420,7 +420,7 @@ class EntityCrudHookTest extends EntityUnitTestBase {
     $vocabulary = entity_create('taxonomy_vocabulary', array(
       'name' => 'Test vocabulary',
       'vid' => 'test',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'description' => NULL,
       'module' => 'entity_crud_hook_test',
     ));
diff --git a/core/modules/system/src/Tests/Entity/EntityFieldDefaultValueTest.php b/core/modules/system/src/Tests/Entity/EntityFieldDefaultValueTest.php
index d624080..aaa544c 100644
--- a/core/modules/system/src/Tests/Entity/EntityFieldDefaultValueTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityFieldDefaultValueTest.php
@@ -7,9 +7,9 @@
 
 namespace Drupal\system\Tests\Entity;
 
-use Drupal\Core\Language\Language;
 use Drupal\Component\Uuid\Uuid;
 use Drupal\Component\Utility\String;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests Entity API default field value functionality.
@@ -55,7 +55,7 @@ class EntityFieldDefaultValueTest extends EntityUnitTestBase  {
    */
   protected function assertDefaultValues($entity_type) {
     $entity = entity_create($entity_type);
-    $this->assertEqual($entity->langcode->value, Language::LANGCODE_NOT_SPECIFIED, String::format('%entity_type: Default language', array('%entity_type' => $entity_type)));
+    $this->assertEqual($entity->langcode->value, LanguageInterface::LANGCODE_NOT_SPECIFIED, String::format('%entity_type: Default language', array('%entity_type' => $entity_type)));
     $this->assertTrue(Uuid::isValid($entity->uuid->value), String::format('%entity_type: Default UUID', array('%entity_type' => $entity_type)));
     $this->assertEqual($entity->name->getValue(), array(0 => array('value' => NULL)), 'Field has one empty value by default.');
   }
diff --git a/core/modules/system/src/Tests/Entity/EntityFieldTest.php b/core/modules/system/src/Tests/Entity/EntityFieldTest.php
index a838d2f..00abd55 100644
--- a/core/modules/system/src/Tests/Entity/EntityFieldTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityFieldTest.php
@@ -12,7 +12,7 @@
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldItemInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\TypedData\ComplexDataDefinitionInterface;
 use Drupal\Core\TypedData\DataDefinitionInterface;
 use Drupal\Core\TypedData\Type\StringInterface;
@@ -190,8 +190,8 @@ class EntityFieldTest extends EntityUnitTestBase  {
     $this->assertFalse(isset($entity->name->value), format_string('%entity_type: Name is not set.', array('%entity_type' => $entity_type)));
 
     // Access the language field.
-    $this->assertEqual(Language::LANGCODE_NOT_SPECIFIED, $entity->langcode->value, format_string('%entity_type: Language code can be read.', array('%entity_type' => $entity_type)));
-    $this->assertEqual(\Drupal::languageManager()->getLanguage(Language::LANGCODE_NOT_SPECIFIED), $entity->langcode->language, format_string('%entity_type: Language object can be read.', array('%entity_type' => $entity_type)));
+    $this->assertEqual(LanguageInterface::LANGCODE_NOT_SPECIFIED, $entity->langcode->value, format_string('%entity_type: Language code can be read.', array('%entity_type' => $entity_type)));
+    $this->assertEqual(\Drupal::languageManager()->getLanguage(LanguageInterface::LANGCODE_NOT_SPECIFIED), $entity->langcode->language, format_string('%entity_type: Language object can be read.', array('%entity_type' => $entity_type)));
 
     // Change the language by code.
     $entity->langcode->value = \Drupal::languageManager()->getDefaultLanguage()->id;
@@ -199,7 +199,7 @@ class EntityFieldTest extends EntityUnitTestBase  {
     $this->assertEqual(\Drupal::languageManager()->getDefaultLanguage(), $entity->langcode->language, format_string('%entity_type: Language object can be read.', array('%entity_type' => $entity_type)));
 
     // Revert language by code then try setting it by language object.
-    $entity->langcode->value = Language::LANGCODE_NOT_SPECIFIED;
+    $entity->langcode->value = LanguageInterface::LANGCODE_NOT_SPECIFIED;
     $entity->langcode->language = \Drupal::languageManager()->getDefaultLanguage();
     $this->assertEqual(\Drupal::languageManager()->getDefaultLanguage()->id, $entity->langcode->value, format_string('%entity_type: Language code can be read.', array('%entity_type' => $entity_type)));
     $this->assertEqual(\Drupal::languageManager()->getDefaultLanguage(), $entity->langcode->language, format_string('%entity_type: Language object can be read.', array('%entity_type' => $entity_type)));
@@ -329,8 +329,8 @@ class EntityFieldTest extends EntityUnitTestBase  {
     // Access the name field.
     $this->assertEqual(1, $entity->id->value, format_string('%entity_type: ID value can be read.', array('%entity_type' => $entity_type)));
     $this->assertTrue(is_string($entity->uuid->value), format_string('%entity_type: UUID value can be read.', array('%entity_type' => $entity_type)));
-    $this->assertEqual(Language::LANGCODE_NOT_SPECIFIED, $entity->langcode->value, format_string('%entity_type: Language code can be read.', array('%entity_type' => $entity_type)));
-    $this->assertEqual(\Drupal::languageManager()->getLanguage(Language::LANGCODE_NOT_SPECIFIED), $entity->langcode->language, format_string('%entity_type: Language object can be read.', array('%entity_type' => $entity_type)));
+    $this->assertEqual(LanguageInterface::LANGCODE_NOT_SPECIFIED, $entity->langcode->value, format_string('%entity_type: Language code can be read.', array('%entity_type' => $entity_type)));
+    $this->assertEqual(\Drupal::languageManager()->getLanguage(LanguageInterface::LANGCODE_NOT_SPECIFIED), $entity->langcode->language, format_string('%entity_type: Language object can be read.', array('%entity_type' => $entity_type)));
     $this->assertEqual($this->entity_user->id(), $entity->user_id->target_id, format_string('%entity_type: User id can be read.', array('%entity_type' => $entity_type)));
     $this->assertEqual($this->entity_user->getUsername(), $entity->user_id->entity->name->value, format_string('%entity_type: User name can be read.', array('%entity_type' => $entity_type)));
     $this->assertEqual($this->entity_field_text, $entity->field_test_text->value, format_string('%entity_type: Text field can be read.', array('%entity_type' => $entity_type)));
@@ -504,7 +504,7 @@ class EntityFieldTest extends EntityUnitTestBase  {
     // the user name and other user entity strings as well.
     $target_strings = array(
       $entity->uuid->value,
-      Language::LANGCODE_NOT_SPECIFIED,
+      LanguageInterface::LANGCODE_NOT_SPECIFIED,
       $this->entity_name,
       // Bundle name.
       $entity->bundle(),
diff --git a/core/modules/system/src/Tests/Entity/EntityTranslationFormTest.php b/core/modules/system/src/Tests/Entity/EntityTranslationFormTest.php
index 8c0288e..bd4df45 100644
--- a/core/modules/system/src/Tests/Entity/EntityTranslationFormTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityTranslationFormTest.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\system\Tests\Entity;
 
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\simpletest\WebTestBase;
 use Drupal\Core\Language\Language;
@@ -85,7 +86,7 @@ function testEntityFormLanguage() {
 
     // Enable language selector.
     $this->drupalGet('admin/structure/types/manage/page');
-    $edit = array('language_configuration[language_show]' => TRUE, 'language_configuration[langcode]' => Language::LANGCODE_NOT_SPECIFIED);
+    $edit = array('language_configuration[language_show]' => TRUE, 'language_configuration[langcode]' => LanguageInterface::LANGCODE_NOT_SPECIFIED);
     $this->drupalPostForm('admin/structure/types/manage/page', $edit, t('Save content type'));
     $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Basic page')), 'Basic page content type has been updated.');
 
diff --git a/core/modules/system/src/Tests/Entity/EntityTranslationTest.php b/core/modules/system/src/Tests/Entity/EntityTranslationTest.php
index 2086c14..ce5503d 100644
--- a/core/modules/system/src/Tests/Entity/EntityTranslationTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityTranslationTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\system\Tests\Entity;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\entity_test\Entity\EntityTestMulRev;
 
 /**
@@ -44,15 +44,15 @@ class EntityTranslationTest extends EntityLanguageTestBase {
       'name' => 'test',
       'user_id' => $this->container->get('current_user')->id(),
     ));
-    $this->assertEqual($entity->language()->id, Language::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Entity language not specified.', array('%entity_type' => $entity_type)));
+    $this->assertEqual($entity->language()->id, LanguageInterface::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Entity language not specified.', array('%entity_type' => $entity_type)));
     $this->assertFalse($entity->getTranslationLanguages(FALSE), format_string('%entity_type: No translations are available', array('%entity_type' => $entity_type)));
 
     // Set the value in default language.
     $entity->set($this->field_name, array(0 => array('value' => 'default value')));
     // Get the value.
-    $field = $entity->getTranslation(Language::LANGCODE_DEFAULT)->get($this->field_name);
+    $field = $entity->getTranslation(LanguageInterface::LANGCODE_DEFAULT)->get($this->field_name);
     $this->assertEqual($field->value, 'default value', format_string('%entity_type: Untranslated value retrieved.', array('%entity_type' => $entity_type)));
-    $this->assertEqual($field->getLangcode(), Language::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Field object has the expected langcode.', array('%entity_type' => $entity_type)));
+    $this->assertEqual($field->getLangcode(), LanguageInterface::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Field object has the expected langcode.', array('%entity_type' => $entity_type)));
 
     // Set the value in a certain language. As the entity is not
     // language-specific it should use the default language and so ignore the
@@ -65,7 +65,7 @@ class EntityTranslationTest extends EntityLanguageTestBase {
     // language-specific entity.
     $field = $entity->getTranslation($this->langcodes[1])->get($this->field_name);
     $this->assertEqual($field->value, 'default value2', format_string('%entity_type: Untranslated value retrieved.', array('%entity_type' => $entity_type)));
-    $this->assertEqual($field->getLangcode(), Language::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Field object has the expected langcode.', array('%entity_type' => $entity_type)));
+    $this->assertEqual($field->getLangcode(), LanguageInterface::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Field object has the expected langcode.', array('%entity_type' => $entity_type)));
 
     // Now, make the entity language-specific by assigning a language and test
     // translating it.
@@ -153,11 +153,11 @@ class EntityTranslationTest extends EntityLanguageTestBase {
     $entity->save();
     $entity = entity_load($entity_type, $entity->id());
     $default_langcode = $entity->language()->id;
-    $this->assertEqual($default_langcode, Language::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Entity created as language neutral.', array('%entity_type' => $entity_type)));
-    $field = $entity->getTranslation(Language::LANGCODE_DEFAULT)->get('name');
+    $this->assertEqual($default_langcode, LanguageInterface::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Entity created as language neutral.', array('%entity_type' => $entity_type)));
+    $field = $entity->getTranslation(LanguageInterface::LANGCODE_DEFAULT)->get('name');
     $this->assertEqual($name, $field->value, format_string('%entity_type: The entity name has been correctly stored as language neutral.', array('%entity_type' => $entity_type)));
     $this->assertEqual($default_langcode, $field->getLangcode(), format_string('%entity_type: The field object has the expect langcode.', array('%entity_type' => $entity_type)));
-    $this->assertEqual($uid, $entity->getTranslation(Language::LANGCODE_DEFAULT)->get('user_id')->target_id, format_string('%entity_type: The entity author has been correctly stored as language neutral.', array('%entity_type' => $entity_type)));
+    $this->assertEqual($uid, $entity->getTranslation(LanguageInterface::LANGCODE_DEFAULT)->get('user_id')->target_id, format_string('%entity_type: The entity author has been correctly stored as language neutral.', array('%entity_type' => $entity_type)));
     $field = $entity->getTranslation($langcode)->get('name');
     $this->assertEqual($name, $field->value, format_string('%entity_type: The entity name defaults to neutral language.', array('%entity_type' => $entity_type)));
     $this->assertEqual($default_langcode, $field->getLangcode(), format_string('%entity_type: The field object has the expect langcode.', array('%entity_type' => $entity_type)));
@@ -180,10 +180,10 @@ class EntityTranslationTest extends EntityLanguageTestBase {
     $this->assertEqual($uid, $entity->getTranslation($langcode)->get('user_id')->target_id, format_string('%entity_type: The entity author has been correctly stored as a language-aware property.', array('%entity_type' => $entity_type)));
     // Translatable properties on a translatable entity should use default
     // language if Language::LANGCODE_NOT_SPECIFIED is passed.
-    $field = $entity->getTranslation(Language::LANGCODE_NOT_SPECIFIED)->get('name');
+    $field = $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED)->get('name');
     $this->assertEqual($name, $field->value, format_string('%entity_type: The entity name defaults to the default language.', array('%entity_type' => $entity_type)));
     $this->assertEqual($default_langcode, $field->getLangcode(), format_string('%entity_type: The field object has the expect langcode.', array('%entity_type' => $entity_type)));
-    $this->assertEqual($uid, $entity->getTranslation(Language::LANGCODE_NOT_SPECIFIED)->get('user_id')->target_id, format_string('%entity_type: The entity author defaults to the default language.', array('%entity_type' => $entity_type)));
+    $this->assertEqual($uid, $entity->getTranslation(LanguageInterface::LANGCODE_NOT_SPECIFIED)->get('user_id')->target_id, format_string('%entity_type: The entity author defaults to the default language.', array('%entity_type' => $entity_type)));
     $field = $entity->get('name');
     $this->assertEqual($name, $field->value, format_string('%entity_type: The entity name can be retrieved without specifying a language.', array('%entity_type' => $entity_type)));
     $this->assertEqual($default_langcode, $field->getLangcode(), format_string('%entity_type: The field object has the expect langcode.', array('%entity_type' => $entity_type)));
@@ -309,7 +309,7 @@ function testEntityTranslationAPI() {
     $entity->langcode->value = $default_langcode;
     $translation = $entity->getTranslation($default_langcode);
     $this->assertEqual($entity, $translation, 'The translation object corresponding to the default language (explicit) is the entity object itself.');
-    $translation = $entity->getTranslation(Language::LANGCODE_DEFAULT);
+    $translation = $entity->getTranslation(LanguageInterface::LANGCODE_DEFAULT);
     $this->assertEqual($entity, $translation, 'The translation object corresponding to the default language (implicit) is the entity object itself.');
 
     // Create a translation and verify that the translation object and the
@@ -377,7 +377,7 @@ function testEntityTranslationAPI() {
 
     // Check that removing an invalid translation causes an exception to be
     // thrown.
-    foreach (array($default_langcode, Language::LANGCODE_DEFAULT, $this->randomName()) as $invalid_langcode) {
+    foreach (array($default_langcode, LanguageInterface::LANGCODE_DEFAULT, $this->randomName()) as $invalid_langcode) {
       $message = format_string('Removing an invalid translation (@langcode) causes an exception to be thrown.', array('@langcode' => $invalid_langcode));
       try {
         $entity->removeTranslation($invalid_langcode);
@@ -448,7 +448,7 @@ function testEntityTranslationAPI() {
    * Tests language fallback applied to field and entity translations.
    */
   function testLanguageFallback() {
-    $current_langcode = $this->languageManager->getCurrentLanguage(Language::TYPE_CONTENT)->id;
+    $current_langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id;
     $this->langcodes[] = $current_langcode;
 
     $values = array();
diff --git a/core/modules/system/src/Tests/Entity/FieldTranslationSqlStorageTest.php b/core/modules/system/src/Tests/Entity/FieldTranslationSqlStorageTest.php
index b9d8cec..ce0650b 100644
--- a/core/modules/system/src/Tests/Entity/FieldTranslationSqlStorageTest.php
+++ b/core/modules/system/src/Tests/Entity/FieldTranslationSqlStorageTest.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\ContentEntityDatabaseStorage;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\Entity\FieldConfig;
 
 /**
@@ -48,7 +49,7 @@ class FieldTranslationSqlStorageTest extends EntityLanguageTestBase {
     $entity->langcode->value = $langcode;
     $entity->save();
     $this->assertFieldStorageLangcode($entity, 'Field language successfully changed.');
-    $langcode = Language::LANGCODE_NOT_SPECIFIED;
+    $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
     $entity->langcode->value = $langcode;
     $entity->save();
     $this->assertFieldStorageLangcode($entity, 'Field language successfully changed to language neutral.');
diff --git a/core/modules/system/src/Tests/Form/LanguageSelectElementTest.php b/core/modules/system/src/Tests/Form/LanguageSelectElementTest.php
index f501ad1..c613885 100644
--- a/core/modules/system/src/Tests/Form/LanguageSelectElementTest.php
+++ b/core/modules/system/src/Tests/Form/LanguageSelectElementTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\system\Tests\Form;
 
 use Drupal\Component\Serialization\Json;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 use Drupal\Core\Language\Language;
 
@@ -52,10 +53,10 @@ function testLanguageSelectElementOptions() {
 
     $this->drupalGet('form-test/language_select');
     // Check that the language fields were rendered on the page.
-    $ids = array('edit-languages-all' => Language::STATE_ALL,
-                 'edit-languages-configurable' => Language::STATE_CONFIGURABLE,
-                 'edit-languages-locked' => Language::STATE_LOCKED,
-                 'edit-languages-config-and-locked' => Language::STATE_CONFIGURABLE | Language::STATE_LOCKED);
+    $ids = array('edit-languages-all' => LanguageInterface::STATE_ALL,
+                 'edit-languages-configurable' => LanguageInterface::STATE_CONFIGURABLE,
+                 'edit-languages-locked' => LanguageInterface::STATE_LOCKED,
+                 'edit-languages-config-and-locked' => LanguageInterface::STATE_CONFIGURABLE | LanguageInterface::STATE_LOCKED);
     foreach ($ids as $id => $flags) {
       $this->assertField($id, format_string('The @id field was found on the page.', array('@id' => $id)));
       $options = array();
@@ -93,7 +94,7 @@ function testHiddenLanguageSelectElement() {
     $values = Json::decode($this->drupalGetContent());
     $this->assertEqual($values['languages_all'], 'xx');
     $this->assertEqual($values['languages_configurable'], 'en');
-    $this->assertEqual($values['languages_locked'], Language::LANGCODE_NOT_SPECIFIED);
+    $this->assertEqual($values['languages_locked'], LanguageInterface::LANGCODE_NOT_SPECIFIED);
     $this->assertEqual($values['languages_config_and_locked'], 'dummy_value');
     $this->assertEqual($values['language_custom_options'], 'opt2');
   }
diff --git a/core/modules/system/src/Tests/System/TokenReplaceUnitTestBase.php b/core/modules/system/src/Tests/System/TokenReplaceUnitTestBase.php
index c68f2e1..12aaf4f 100644
--- a/core/modules/system/src/Tests/System/TokenReplaceUnitTestBase.php
+++ b/core/modules/system/src/Tests/System/TokenReplaceUnitTestBase.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\system\Tests\System;
 
-use Drupal\Core\Language\Language;
 use Drupal\system\Tests\Entity\EntityUnitTestBase;
 
 /**
@@ -18,7 +17,7 @@
   /**
    * The interface language.
    *
-   * @var \Drupal\Core\Language\Language
+   * @var \Drupal\Core\Language\LanguageInterface
    */
   protected $interfaceLanguage;
 
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 377c30e..6aefa61 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -6,9 +6,9 @@
  */
 
 use Drupal\Core\Cache\Cache;
-use Drupal\Core\Language\Language;
 use Drupal\Core\Extension\Extension;
 use Drupal\Core\Extension\ExtensionDiscovery;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\block\BlockPluginInterface;
 use Drupal\user\UserInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -513,7 +513,7 @@ function system_element_info() {
   );
   $types['language_select'] = array(
     '#input' => TRUE,
-    '#default_value' => Language::LANGCODE_NOT_SPECIFIED,
+    '#default_value' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
   );
   $types['weight'] = array(
     '#input' => TRUE,
@@ -975,7 +975,7 @@ function system_page_build(&$page) {
       array(
         'path' => current_path(),
         'front' => drupal_is_front_page(),
-        'language' => \Drupal::languageManager()->getCurrentLanguage(\Drupal\Core\Language\Language::TYPE_URL)->id,
+        'language' => \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_URL)->id,
         'query' => \Drupal::service('request')->query->all(),
       )
     );
diff --git a/core/modules/system/tests/modules/entity_test/src/EntityTestAccessController.php b/core/modules/system/tests/modules/entity_test/src/EntityTestAccessController.php
index 034caa3..5f23487 100644
--- a/core/modules/system/tests/modules/entity_test/src/EntityTestAccessController.php
+++ b/core/modules/system/tests/modules/entity_test/src/EntityTestAccessController.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityAccessController;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 
 /**
@@ -22,7 +22,7 @@ class EntityTestAccessController extends EntityAccessController {
    */
   protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     if ($operation === 'view') {
-      if ($langcode != Language::LANGCODE_DEFAULT) {
+      if ($langcode != LanguageInterface::LANGCODE_DEFAULT) {
         return user_access('view test entity translations', $account);
       }
       return user_access('view test entity', $account);
diff --git a/core/modules/system/tests/modules/entity_test/src/EntityTestForm.php b/core/modules/system/tests/modules/entity_test/src/EntityTestForm.php
index 849ea17..2ca9d0d 100644
--- a/core/modules/system/tests/modules/entity_test/src/EntityTestForm.php
+++ b/core/modules/system/tests/modules/entity_test/src/EntityTestForm.php
@@ -7,7 +7,7 @@
 namespace Drupal\entity_test;
 
 use Drupal\Core\Entity\ContentEntityForm;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Form controller for the test entity edit forms.
@@ -45,7 +45,7 @@ class EntityTestForm extends ContentEntityForm {
       '#title' => t('Language'),
       '#type' => 'language_select',
       '#default_value' => $entity->getUntranslated()->language()->id,
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
     );
 
     // @todo: Is there a better way to check if an entity type is revisionable?
diff --git a/core/modules/system/tests/modules/form_test/form_test.module b/core/modules/system/tests/modules/form_test/form_test.module
index 42ef667..38f5176 100644
--- a/core/modules/system/tests/modules/form_test/form_test.module
+++ b/core/modules/system/tests/modules/form_test/form_test.module
@@ -7,7 +7,7 @@
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Database\Database;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\form_test\Callbacks;
 use Drupal\Core\Datetime\DrupalDateTime;
 use Symfony\Component\HttpFoundation\JsonResponse;
@@ -1000,30 +1000,30 @@ function form_test_language_select() {
   $form['languages_all'] = array(
     '#title' => t('Languages: All'),
     '#type' => 'language_select',
-    '#languages' => Language::STATE_ALL,
+    '#languages' => LanguageInterface::STATE_ALL,
     '#default_value' => 'xx',
   );
   $form['languages_configurable'] = array(
     '#title' => t('Languages: Configurable'),
     '#type' => 'language_select',
-    '#languages' => Language::STATE_CONFIGURABLE,
+    '#languages' => LanguageInterface::STATE_CONFIGURABLE,
     '#default_value' => 'en',
   );
   $form['languages_locked'] = array(
     '#title' => t('Languages: Locked'),
     '#type' => 'language_select',
-    '#languages' => Language::STATE_LOCKED,
+    '#languages' => LanguageInterface::STATE_LOCKED,
   );
   $form['languages_config_and_locked'] = array(
     '#title' => t('Languages: Configurable and locked'),
     '#type' => 'language_select',
-    '#languages' => Language::STATE_CONFIGURABLE | Language::STATE_LOCKED,
+    '#languages' => LanguageInterface::STATE_CONFIGURABLE | LanguageInterface::STATE_LOCKED,
     '#default_value' => 'dummy_value',
   );
   $form['language_custom_options'] = array(
     '#title' => t('Languages: Custom'),
     '#type' => 'language_select',
-    '#languages' => Language::STATE_CONFIGURABLE | Language::STATE_LOCKED,
+    '#languages' => LanguageInterface::STATE_CONFIGURABLE | LanguageInterface::STATE_LOCKED,
     '#options' => array('opt1' => 'First option', 'opt2' => 'Second option', 'opt3' => 'Third option'),
     '#default_value' => 'opt2',
   );
diff --git a/core/modules/system/tests/modules/form_test/src/Controller/FormTestController.php b/core/modules/system/tests/modules/form_test/src/Controller/FormTestController.php
index ad96815..600b1d9 100644
--- a/core/modules/system/tests/modules/form_test/src/Controller/FormTestController.php
+++ b/core/modules/system/tests/modules/form_test/src/Controller/FormTestController.php
@@ -7,7 +7,7 @@
 namespace Drupal\form_test\Controller;
 
 use Drupal\Core\Controller\ControllerBase;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Controller routines for form_test routes.
@@ -26,7 +26,7 @@ class FormTestController extends ControllerBase {
       'uid' => $user->id(),
       'name' => $user->getUsername(),
       'type' => 'page',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     );
     $node1 = $this->entityManager()->getStorage('node')->create($values);
     $node2 = clone($node1);
diff --git a/core/modules/taxonomy/src/TermForm.php b/core/modules/taxonomy/src/TermForm.php
index e3b048a..58d198d 100644
--- a/core/modules/taxonomy/src/TermForm.php
+++ b/core/modules/taxonomy/src/TermForm.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Entity\ContentEntityForm;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Base for controller for taxonomy term edit forms.
@@ -32,7 +32,7 @@ class TermForm extends ContentEntityForm {
     $form['langcode'] = array(
       '#type' => 'language_select',
       '#title' => $this->t('Language'),
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
       '#default_value' => $term->getUntranslated()->language()->id,
       '#access' => !empty($language_configuration['language_show']),
     );
diff --git a/core/modules/taxonomy/src/Tests/TaxonomyTermReferenceItemTest.php b/core/modules/taxonomy/src/Tests/TaxonomyTermReferenceItemTest.php
index 0a67140..61be0d0 100644
--- a/core/modules/taxonomy/src/Tests/TaxonomyTermReferenceItemTest.php
+++ b/core/modules/taxonomy/src/Tests/TaxonomyTermReferenceItemTest.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldItemInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\field\Tests\FieldUnitTestBase;
 
 /**
@@ -48,7 +48,7 @@ class TaxonomyTermReferenceItemTest extends FieldUnitTestBase {
     $vocabulary = entity_create('taxonomy_vocabulary', array(
       'name' => $this->randomName(),
       'vid' => drupal_strtolower($this->randomName()),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $vocabulary->save();
 
@@ -74,7 +74,7 @@ class TaxonomyTermReferenceItemTest extends FieldUnitTestBase {
     $this->term = entity_create('taxonomy_term', array(
       'name' => $this->randomName(),
       'vid' => $vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $this->term->save();
   }
@@ -110,7 +110,7 @@ class TaxonomyTermReferenceItemTest extends FieldUnitTestBase {
     $term2 = entity_create('taxonomy_term', array(
       'name' => $this->randomName(),
       'vid' => $this->term->getVocabularyId(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $term2->save();
 
diff --git a/core/modules/taxonomy/src/Tests/TaxonomyTestBase.php b/core/modules/taxonomy/src/Tests/TaxonomyTestBase.php
index 9fd5a34..3840c65 100644
--- a/core/modules/taxonomy/src/Tests/TaxonomyTestBase.php
+++ b/core/modules/taxonomy/src/Tests/TaxonomyTestBase.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\taxonomy\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 
 /**
@@ -40,7 +40,7 @@ function createVocabulary() {
       'name' => $this->randomName(),
       'description' => $this->randomName(),
       'vid' => drupal_strtolower($this->randomName()),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'weight' => mt_rand(0, 10),
     ));
     $vocabulary->save();
@@ -61,7 +61,7 @@ function createTerm($vocabulary) {
         'format' => $format->format,
       ),
       'vid' => $vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $term->save();
     return $term;
diff --git a/core/modules/taxonomy/src/Tests/TermTranslationUITest.php b/core/modules/taxonomy/src/Tests/TermTranslationUITest.php
index a027ade..a003c12 100644
--- a/core/modules/taxonomy/src/Tests/TermTranslationUITest.php
+++ b/core/modules/taxonomy/src/Tests/TermTranslationUITest.php
@@ -7,8 +7,8 @@
 
 namespace Drupal\taxonomy\Tests;
 
-use Drupal\Core\Language\Language;
 use Drupal\content_translation\Tests\ContentTranslationUITest;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Tests the Term Translation UI.
@@ -60,7 +60,7 @@ function setUp() {
       'name' => $this->bundle,
       'description' => $this->randomName(),
       'vid' => $this->bundle,
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'weight' => mt_rand(0, 10),
     ));
     $this->vocabulary->save();
@@ -128,7 +128,7 @@ function testTranslateLinkVocabularyAdminPage() {
       'name' => 'untranslatable_voc',
       'description' => $this->randomName(),
       'vid' => 'untranslatable_voc',
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'weight' => mt_rand(0, 10),
     ));
     $untranslatable_vocabulary->save();
diff --git a/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php b/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php
index 2cc992e..587f4ce 100644
--- a/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php
+++ b/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php
@@ -8,7 +8,7 @@
 namespace Drupal\taxonomy\Tests\Views;
 
 use Drupal\Core\Field\FieldDefinitionInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\views\Tests\ViewTestBase;
 use Drupal\views\Tests\ViewTestData;
 
@@ -136,7 +136,7 @@ function setUp() {
       // Use the first available text format.
       'format' => $format->format,
       'vid' => $this->vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $term->save();
     return $term;
diff --git a/core/modules/taxonomy/src/VocabularyForm.php b/core/modules/taxonomy/src/VocabularyForm.php
index 341bcbe..7287055 100644
--- a/core/modules/taxonomy/src/VocabularyForm.php
+++ b/core/modules/taxonomy/src/VocabularyForm.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Entity\EntityForm;
 use Drupal\Core\Entity\EntityTypeInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 
 /**
  * Base form for vocabulary edit forms.
@@ -57,7 +57,7 @@ class VocabularyForm extends EntityForm {
     $form['langcode'] = array(
       '#type' => 'language_select',
       '#title' => $this->t('Vocabulary language'),
-      '#languages' => Language::STATE_ALL,
+      '#languages' => LanguageInterface::STATE_ALL,
       '#default_value' => $vocabulary->langcode,
     );
     if ($this->moduleHandler->moduleExists('language')) {
diff --git a/core/modules/text/src/Tests/Formatter/TextPlainUnitTest.php b/core/modules/text/src/Tests/Formatter/TextPlainUnitTest.php
index 1c35b24..8725b8a 100644
--- a/core/modules/text/src/Tests/Formatter/TextPlainUnitTest.php
+++ b/core/modules/text/src/Tests/Formatter/TextPlainUnitTest.php
@@ -9,7 +9,7 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\DrupalUnitTestBase;
 
 /**
@@ -92,7 +92,7 @@ function setUp() {
       ));
     $this->display->save();
 
-    $this->langcode = Language::LANGCODE_NOT_SPECIFIED;
+    $this->langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
   }
 
   /**
diff --git a/core/modules/tracker/src/Tests/Views/TrackerTestBase.php b/core/modules/tracker/src/Tests/Views/TrackerTestBase.php
index a727ad5..7f20868 100644
--- a/core/modules/tracker/src/Tests/Views/TrackerTestBase.php
+++ b/core/modules/tracker/src/Tests/Views/TrackerTestBase.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\tracker\Tests\Views;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\views\Tests\ViewTestBase;
 use Drupal\views\Tests\ViewTestData;
 
@@ -55,7 +55,7 @@
       'entity_type' => 'node',
       'field_name' => 'comment',
       'subject' => $this->randomName(),
-      'comment_body[' . Language::LANGCODE_NOT_SPECIFIED . '][0][value]' => $this->randomName(20),
+      'comment_body[' . LanguageInterface::LANGCODE_NOT_SPECIFIED . '][0][value]' => $this->randomName(20),
     ));
 
   }
diff --git a/core/modules/user/src/AccountForm.php b/core/modules/user/src/AccountForm.php
index 42a2292..1180fac 100644
--- a/core/modules/user/src/AccountForm.php
+++ b/core/modules/user/src/AccountForm.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\Query\QueryFactory;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\language\ConfigurableLanguageManagerInterface;
 use Drupal\user\Plugin\LanguageNegotiation\LanguageNegotiationUserAdmin;
@@ -253,7 +253,7 @@
     $user_language_added = FALSE;
     if ($this->languageManager instanceof ConfigurableLanguageManagerInterface) {
       $negotiator = $this->languageManager->getNegotiator();
-      $user_language_added = $negotiator && $negotiator->isNegotiationMethodEnabled(LanguageNegotiationUser::METHOD_ID, Language::TYPE_INTERFACE);
+      $user_language_added = $negotiator && $negotiator->isNegotiationMethodEnabled(LanguageNegotiationUser::METHOD_ID, LanguageInterface::TYPE_INTERFACE);
     }
     $form['language'] = array(
       '#type' => $this->languageManager->isMultilingual() ? 'details' : 'container',
@@ -267,7 +267,7 @@
     $form['language']['preferred_langcode'] = array(
       '#type' => 'language_select',
       '#title' => $this->t('Site language'),
-      '#languages' => Language::STATE_CONFIGURABLE,
+      '#languages' => LanguageInterface::STATE_CONFIGURABLE,
       '#default_value' => $user_preferred_langcode,
       '#description' => $user_language_added ? $this->t("This account's preferred language for e-mails and site presentation.") : $this->t("This account's preferred language for e-mails."),
     );
@@ -282,7 +282,7 @@
     $form['language']['preferred_admin_langcode'] = array(
       '#type' => 'language_select',
       '#title' => $this->t('Administration pages language'),
-      '#languages' => Language::STATE_CONFIGURABLE,
+      '#languages' => LanguageInterface::STATE_CONFIGURABLE,
       '#default_value' => $user_preferred_admin_langcode,
       '#access' => $show_admin_language,
     );
diff --git a/core/modules/user/src/Tests/UserEntityTest.php b/core/modules/user/src/Tests/UserEntityTest.php
index 43bee29..9621d33 100644
--- a/core/modules/user/src/Tests/UserEntityTest.php
+++ b/core/modules/user/src/Tests/UserEntityTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\user\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\DrupalUnitTestBase;
 use Drupal\user\Entity\User;
 
@@ -46,7 +46,7 @@ class UserEntityTest extends DrupalUnitTestBase {
     $role_storage->create(array('id' => 'test_role_two'))->save();
     $role_storage->create(array('id' => 'test_role_three'))->save();
 
-    $values = array('roles' => array(Language::LANGCODE_DEFAULT => array('test_role_one')));
+    $values = array('roles' => array(LanguageInterface::LANGCODE_DEFAULT => array('test_role_one')));
     $user = new User($values, 'user');
 
     $this->assertTrue($user->hasRole('test_role_one'));
diff --git a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
index b960d5b..cecfcc1 100644
--- a/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/src/Plugin/views/display/DisplayPluginBase.php
@@ -9,7 +9,7 @@
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\Cache\Cache;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Theme\Registry;
 use Drupal\views\Plugin\views\area\AreaPluginBase;
@@ -1243,7 +1243,7 @@
     $languages = array(
         '***CURRENT_LANGUAGE***' => t("Current user's language"),
         '***DEFAULT_LANGUAGE***' => t("Default site language"),
-        Language::LANGCODE_NOT_SPECIFIED => t('Language neutral'),
+        LanguageInterface::LANGCODE_NOT_SPECIFIED => t('Language neutral'),
     );
     if (\Drupal::moduleHandler()->moduleExists('language')) {
       $languages = array_merge($languages, language_list());
@@ -1617,7 +1617,7 @@
           $languages = array(
             '***CURRENT_LANGUAGE***' => t("Current user's language"),
             '***DEFAULT_LANGUAGE***' => t("Default site language"),
-            Language::LANGCODE_NOT_SPECIFIED => t('Language neutral'),
+            LanguageInterface::LANGCODE_NOT_SPECIFIED => t('Language neutral'),
           );
           $languages = array_merge($languages, views_language_list());
 
diff --git a/core/modules/views/src/Tests/DefaultViewsTest.php b/core/modules/views/src/Tests/DefaultViewsTest.php
index 6e74149..513c3b2 100644
--- a/core/modules/views/src/Tests/DefaultViewsTest.php
+++ b/core/modules/views/src/Tests/DefaultViewsTest.php
@@ -8,7 +8,7 @@
 namespace Drupal\views\Tests;
 
 use Drupal\comment\CommentInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\simpletest\WebTestBase;
 use Drupal\views\ViewExecutable;
 use Drupal\views\Views;
@@ -54,7 +54,7 @@ class DefaultViewsTest extends ViewTestBase {
       'name' => $this->randomName(),
       'description' => $this->randomName(),
       'vid' => drupal_strtolower($this->randomName()),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
       'help' => '',
       'nodes' => array('page' => 'page'),
       'weight' => mt_rand(0, 10),
@@ -164,7 +164,7 @@ function createTerm($vocabulary) {
       // Use the first available text format.
       'format' => $format->format,
       'vid' => $vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $term->save();
     return $term;
diff --git a/core/modules/views/src/Tests/ViewsTaxonomyAutocompleteTest.php b/core/modules/views/src/Tests/ViewsTaxonomyAutocompleteTest.php
index 766ae49..35d5f87 100644
--- a/core/modules/views/src/Tests/ViewsTaxonomyAutocompleteTest.php
+++ b/core/modules/views/src/Tests/ViewsTaxonomyAutocompleteTest.php
@@ -8,8 +8,8 @@
 namespace Drupal\views\Tests;
 
 use Drupal\Component\Utility\String;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\views\Tests\ViewTestBase;
-use Drupal\Core\Language\Language;
 
 /**
  * Tests the views taxonomy complete menu callback.
@@ -105,7 +105,7 @@ class ViewsTaxonomyAutocompleteTest extends ViewTestBase {
       'name' => $name ?: $this->randomName(),
       'description' => $this->randomName(),
       'vid' => $this->vocabulary->id(),
-      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
     ));
     $term->save();
     return $term;
diff --git a/core/modules/views/views.api.php b/core/modules/views/views.api.php
index f1551e2..ecc9f72 100644
--- a/core/modules/views/views.api.php
+++ b/core/modules/views/views.api.php
@@ -5,6 +5,8 @@
  * Describes hooks and plugins provided by the Views module.
  */
 
+use Drupal\Core\Language\LanguageInterface;
+
 /**
  * @defgroup views_plugins Views plugins
  *
@@ -341,7 +343,7 @@ function hook_views_query_substitutions(ViewExecutable $view) {
   return array(
     '***CURRENT_VERSION***' => \Drupal::VERSION,
     '***CURRENT_TIME***' => REQUEST_TIME,
-    '***CURRENT_LANGUAGE***' => \Drupal::languageManager()->getCurrentLanguage(\Drupal\Core\Language\Language::TYPE_CONTENT)->id,
+    '***CURRENT_LANGUAGE***' => \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id,
     '***DEFAULT_LANGUAGE***' => \Drupal::languageManager()->getDefaultLanguage()->id,
   );
 }
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 216bc93..33734c0 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -12,7 +12,7 @@
 use Drupal\Component\Utility\String;
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Database\Query\AlterableInterface;
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Render\Element;
 use Drupal\views\Plugin\Derivative\ViewsLocalTask;
 use Drupal\Core\Template\AttributeArray;
@@ -515,7 +515,7 @@ function views_add_contextual_links(&$render_element, $location, ViewExecutable 
  *
  * @see locale_language_list()
  */
-function views_language_list($field = 'name', $flags = Language::STATE_ALL) {
+function views_language_list($field = 'name', $flags = LanguageInterface::STATE_ALL) {
   $languages = \Drupal::languageManager()->getLanguages($flags);
   $list = array();
   foreach ($languages as $language) {
diff --git a/core/modules/views/views.views_execution.inc b/core/modules/views/views.views_execution.inc
index d1c040f..96b5006 100644
--- a/core/modules/views/views.views_execution.inc
+++ b/core/modules/views/views.views_execution.inc
@@ -5,7 +5,7 @@
  * Provides views runtime hooks for views.module.
  */
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\views\ViewExecutable;
 
 /**
@@ -17,7 +17,7 @@ function views_views_query_substitutions(ViewExecutable $view) {
   return array(
     '***CURRENT_VERSION***' => \Drupal::VERSION,
     '***CURRENT_TIME***' => REQUEST_TIME,
-    '***CURRENT_LANGUAGE***' => \Drupal::languageManager()->getCurrentLanguage(Language::TYPE_CONTENT)->id,
+    '***CURRENT_LANGUAGE***' => \Drupal::languageManager()->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->id,
     '***DEFAULT_LANGUAGE***' => \Drupal::languageManager()->getDefaultLanguage()->id,
   );
 }
diff --git a/core/modules/views_ui/tests/src/ViewUIObjectTest.php b/core/modules/views_ui/tests/src/ViewUIObjectTest.php
index 7cbf7b9..f105b3a 100644
--- a/core/modules/views_ui/tests/src/ViewUIObjectTest.php
+++ b/core/modules/views_ui/tests/src/ViewUIObjectTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\views_ui\Tests;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Tests\UnitTestCase;
 use Drupal\views\ViewExecutable;
 use Drupal\views_ui\ViewUI;
@@ -37,7 +37,7 @@ class ViewUIObjectTest extends UnitTestCase {
     $method_args['setOriginalId'] = array(12);
     $method_args['setStatus'] = array(TRUE);
     $method_args['enforceIsNew'] = array(FALSE);
-    $method_args['label'] = array(Language::LANGCODE_NOT_SPECIFIED);
+    $method_args['label'] = array(LanguageInterface::LANGCODE_NOT_SPECIFIED);
 
     $reflection = new \ReflectionClass('Drupal\Core\Config\Entity\ConfigEntityInterface');
     $interface_methods = array();
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
index e5eeda0..5a8c896 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
@@ -18,6 +18,7 @@
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Tests\UnitTestCase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -980,7 +981,7 @@ class EntityManagerTest extends UnitTestCase {
     $entity->expects($this->exactly(2))
       ->method('hasTranslation')
       ->will($this->returnValueMap(array(
-        array(Language::LANGCODE_DEFAULT, FALSE),
+        array(LanguageInterface::LANGCODE_DEFAULT, FALSE),
         array('custom_langcode', TRUE),
       )));
 
diff --git a/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php b/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
index f58edc5..bdcd093 100644
--- a/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
+++ b/core/tests/Drupal/Tests/Core/PathProcessor/PathProcessorTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Tests\Core\PathProcessor;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\PathProcessor\PathProcessorAlias;
 use Drupal\Core\PathProcessor\PathProcessorDecode;
 use Drupal\Core\PathProcessor\PathProcessorFront;
@@ -78,7 +78,7 @@ class PathProcessorTest extends UnitTestCase {
       ->will($this->returnValue($this->languages));
     $language_manager->expects($this->any())
       ->method('getLanguageTypes')
-      ->will($this->returnValue(array(Language::TYPE_INTERFACE)));
+      ->will($this->returnValue(array(LanguageInterface::TYPE_INTERFACE)));
     $language_manager->expects($this->any())
       ->method('getNegotiationMethods')
       ->will($this->returnValue($method_definitions));
diff --git a/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php b/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
index 2953f92..50be0cf 100644
--- a/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Plugin/DefaultPluginManagerTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\Tests\Core\Plugin;
 
 use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Tests\UnitTestCase;
 
 /**
@@ -168,7 +169,7 @@ class DefaultPluginManagerTest extends UnitTestCase {
     $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
     $language_manager->expects($this->once())
       ->method('getCurrentLanguage')
-      ->with(Language::TYPE_INTERFACE)
+      ->with(LanguageInterface::TYPE_INTERFACE)
       ->will($this->returnValue($language));
 
     $plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions);
@@ -199,7 +200,7 @@ class DefaultPluginManagerTest extends UnitTestCase {
     $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
     $language_manager->expects($this->once())
       ->method('getCurrentLanguage')
-      ->with(Language::TYPE_INTERFACE)
+      ->with(LanguageInterface::TYPE_INTERFACE)
       ->will($this->returnValue($language));
 
     $plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions);
@@ -230,7 +231,7 @@ class DefaultPluginManagerTest extends UnitTestCase {
     $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
     $language_manager->expects($this->once())
       ->method('getCurrentLanguage')
-      ->with(Language::TYPE_INTERFACE)
+      ->with(LanguageInterface::TYPE_INTERFACE)
       ->will($this->returnValue($language));
 
     $plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions);
diff --git a/core/tests/Drupal/Tests/Core/Utility/TokenTest.php b/core/tests/Drupal/Tests/Core/Utility/TokenTest.php
index f92502e..2f67a7b 100644
--- a/core/tests/Drupal/Tests/Core/Utility/TokenTest.php
+++ b/core/tests/Drupal/Tests/Core/Utility/TokenTest.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Tests\Core\Utility;
 
-use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Utility\Token;
 use Drupal\Tests\UnitTestCase;
 
@@ -87,7 +87,7 @@ class TokenTest extends UnitTestCase {
 
     $this->languageManager->expects($this->once())
       ->method('getCurrentLanguage')
-      ->with(Language::TYPE_CONTENT)
+      ->with(LanguageInterface::TYPE_CONTENT)
       ->will($this->returnValue($language));
 
     // The persistent cache must only be hit once, after which the info is
