diff --git a/core/authorize.php b/core/authorize.php
index d703b33..a571dd0 100644
--- a/core/authorize.php
+++ b/core/authorize.php
@@ -84,12 +84,6 @@ module_list(TRUE, FALSE, FALSE, $module_list);
 drupal_load('module', 'system');
 drupal_load('module', 'user');
 
-// We also want to have the language system available, but we do *NOT* want to
-// actually call drupal_bootstrap(DRUPAL_BOOTSTRAP_LANGUAGE), since that would
-// also force us through the DRUPAL_BOOTSTRAP_PAGE_HEADER phase, which loads
-// all the modules, and that's exactly what we're trying to avoid.
-drupal_language_initialize();
-
 // Initialize the maintenance theme for this administrative script.
 drupal_maintenance_theme();
 
diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index c376882..247e11f 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -3,7 +3,7 @@
 use Drupal\Core\Database\Database;
 use Symfony\Component\ClassLoader\UniversalClassLoader;
 use Symfony\Component\ClassLoader\ApcUniversalClassLoader;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Drupal\Core\DependencyInjection\Container;
 
 /**
  * @file
@@ -137,14 +137,9 @@ const DRUPAL_BOOTSTRAP_SESSION = 4;
 const DRUPAL_BOOTSTRAP_PAGE_HEADER = 5;
 
 /**
- * Seventh bootstrap phase: find out language of the page.
- */
-const DRUPAL_BOOTSTRAP_LANGUAGE = 6;
-
-/**
  * Final bootstrap phase: Drupal is fully loaded; validate and fix input data.
  */
-const DRUPAL_BOOTSTRAP_FULL = 7;
+const DRUPAL_BOOTSTRAP_FULL = 6;
 
 /**
  * Role ID for anonymous users; should match what's in the "role" table.
@@ -2023,7 +2018,6 @@ function drupal_bootstrap($phase = NULL, $new_phase = TRUE) {
     DRUPAL_BOOTSTRAP_VARIABLES,
     DRUPAL_BOOTSTRAP_SESSION,
     DRUPAL_BOOTSTRAP_PAGE_HEADER,
-    DRUPAL_BOOTSTRAP_LANGUAGE,
     DRUPAL_BOOTSTRAP_FULL,
   );
   // Not drupal_static(), because the only legitimate API to control this is to
@@ -2076,10 +2070,6 @@ function drupal_bootstrap($phase = NULL, $new_phase = TRUE) {
           _drupal_bootstrap_page_header();
           break;
 
-        case DRUPAL_BOOTSTRAP_LANGUAGE:
-          drupal_language_initialize();
-          break;
-
         case DRUPAL_BOOTSTRAP_FULL:
           require_once DRUPAL_ROOT . '/core/includes/common.inc';
           _drupal_bootstrap_full();
@@ -2338,7 +2328,7 @@ function drupal_get_bootstrap_phase() {
  * @param $reset
  *   TRUE or FALSE depending on whether the Container instance is to be reset.
  *
- * @return Symfony\Component\DependencyInjection\ContainerBuilder
+ * @return Drupal\Core\DependencyInjection\Container
  *   The instance of the Drupal Container used to set up and maintain object
  *   instances.
  */
@@ -2348,11 +2338,7 @@ function drupal_container($reset = FALSE) {
   // would leave Drupal in a nonfunctional state.
   static $container = NULL;
   if ($reset || !isset($container)) {
-    $container = new ContainerBuilder();
-    // An interface language always needs to be available for t() and other
-    // functions. This default is overridden by drupal_language_initialize()
-    // during language negotiation.
-    $container->register(LANGUAGE_TYPE_INTERFACE, 'Drupal\\Core\\Language\\Language');
+    $container = new Container();
   }
   return $container;
 }
@@ -2498,48 +2484,6 @@ function get_t() {
 }
 
 /**
- * Initializes all the defined language types.
- *
- * @see Drupal\Core\Language\Language
- */
-function drupal_language_initialize() {
-  $types = language_types_get_all();
-  $container = drupal_container();
-
-  // Ensure a language object is registered for each language type, whether the
-  // site is multilingual or not.
-  if (language_multilingual()) {
-    include_once DRUPAL_ROOT . '/core/includes/language.inc';
-    foreach ($types as $type) {
-      $language = language_types_initialize($type);
-      $container->set($type, NULL);
-      $container->register($type, 'Drupal\\Core\\Language\\Language')
-        ->addMethodCall('extend', array($language));
-    }
-    // Allow modules to react on language system initialization in multilingual
-    // environments.
-    bootstrap_invoke_all('language_init');
-  }
-  else {
-    $default = language_default();
-    foreach ($types as $type) {
-      $container->set($type, NULL);
-      $container->register($type, 'Drupal\\Core\\Language\\Language')
-        ->addMethodCall('extend', array($default));
-    }
-  }
-
-  // @todo Temporary backwards compatibility for code still using globals.
-  //   Remove after these issues:
-  //   - $language_interface: http://drupal.org/node/1510686
-  //   - $language_url: http://drupal.org/node/1512310
-  //   - $language_content: http://drupal.org/node/1512308
-  foreach ($types as $type) {
-    $GLOBALS[$type] = $container->get($type);
-  }
-}
-
-/**
  * Returns an array of the available language types.
  */
 function language_types_get_all() {
diff --git a/core/includes/common.inc b/core/includes/common.inc
index 17c626b..7fceaa1 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -1646,7 +1646,7 @@ function filter_xss_bad_protocol($string, $decode = TRUE) {
  * 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_container()->get(LANGUAGE_TYPE_CONTENT)->langcode;
+  $langcode = $langcode ? $langcode : drupal_container()->get('language_content')->langcode;
 
   $output = "<channel>\n";
   $output .= ' <title>' . check_plain($title) . "</title>\n";
@@ -6271,7 +6271,7 @@ function drupal_render_cid_parts($granularity = NULL) {
   // part.
   if (language_multilingual()) {
     foreach (language_types_get_configurable() as $language_type) {
-      $cid_parts[] = $GLOBALS[$language_type]->langcode;
+      $cid_parts[] = drupal_container()->get($language_type)->langcode;
     }
   }
 
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 5cb3399..de3a53f 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -254,10 +254,6 @@ function install_begin_request(&$install_state) {
   // Load module basics (needed for hook invokes).
   include_once DRUPAL_ROOT . '/core/includes/module.inc';
   include_once DRUPAL_ROOT . '/core/includes/session.inc';
-
-  // Set up $language, so t() caller functions will still work.
-  drupal_language_initialize();
-
   require_once DRUPAL_ROOT . '/core/includes/ajax.inc';
   $module_list['system']['filename'] = 'core/modules/system/system.module';
   $module_list['entity']['filename'] = 'core/modules/entity/entity.module';
diff --git a/core/includes/language.inc b/core/includes/language.inc
index 8e5f1ac..453c542 100644
--- a/core/includes/language.inc
+++ b/core/includes/language.inc
@@ -420,7 +420,7 @@ function language_url_split_prefix($path, $languages) {
  * @return
  *   An array of language codes.
  */
-function language_fallback_get_candidates($type = LANGUAGE_TYPE_CONTENT) {
+function language_fallback_get_candidates($type = 'language_content') {
   $fallback_candidates = &drupal_static(__FUNCTION__);
 
   if (!isset($fallback_candidates)) {
diff --git a/core/lib/Drupal/Core/DependencyInjection/Container.php b/core/lib/Drupal/Core/DependencyInjection/Container.php
new file mode 100644
index 0000000..0e57a20
--- /dev/null
+++ b/core/lib/Drupal/Core/DependencyInjection/Container.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\DependencyInjection\Container.
+ */
+
+namespace Drupal\Core\DependencyInjection;
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+
+/**
+ * The base Drupal dependency injection container.
+ */
+class Container extends ContainerBuilder {
+
+  /**
+   * Registers base Drupal services to the dependency injection container.
+   */
+  public function __construct() {
+    parent::__construct();
+
+    // An interface language always needs to be available for t() and other
+    // functions. This default is overridden by during language negotiation.
+    $types = array(LANGUAGE_TYPE_INTERFACE, LANGUAGE_TYPE_CONTENT, LANGUAGE_TYPE_URL);
+    foreach ($types as $type) {
+      $this->register($type, 'Drupal\\Core\\Language\\Language')
+        ->addMethodCall('bootstrap', array($type, $this));
+    }
+  }
+}
diff --git a/core/lib/Drupal/Core/Language/Language.php b/core/lib/Drupal/Core/Language/Language.php
index 9b9223d..0227565 100644
--- a/core/lib/Drupal/Core/Language/Language.php
+++ b/core/lib/Drupal/Core/Language/Language.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\Core\Language;
 
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
 /**
  * An object containing the information for an interface language.
  *
@@ -41,13 +43,46 @@ class Language {
 
   /**
    * Extend $this with properties from the given object.
-   *
-   * @todo Remove this function once $GLOBALS['language'] is gone.
    */
   public function extend($obj) {
     $vars = get_object_vars($obj);
     foreach ($vars as $var => $value) {
       $this->$var = $value;
     }
+    return $this;
+  }
+
+  /**
+   * Bootstraps the Language with the given type.
+   */
+  public function bootstrap($type, ContainerInterface $container) {
+    // Ensure a language object is registered for each language type, whether
+    // the site is multilingual or not.
+    if (language_multilingual()) {
+      // Initialize the language.
+      include_once DRUPAL_ROOT . '/core/includes/language.inc';
+      $language = language_types_initialize($type);
+      $GLOBALS[$type] = $this->extend($language);
+
+      // Check if we are to bootstrap the Language system.
+      if (!$container->has('language.bootstrap')) {
+        // Bootstrap modules should have been loaded when this function is called, so
+        // we don't need to tell module_list() to reset its internal list (and we
+        // therefore leave the first parameter at its default value of FALSE). We
+        // still pass in TRUE for the second parameter, though; in case this is the
+        // first time during the bootstrap that module_list() is called, we want to
+        // make sure that its internal cache is primed with the bootstrap modules
+        // only.
+        foreach (module_list(FALSE, TRUE) as $module) {
+          drupal_load('module', $module);
+          module_invoke($module, $hook);
+        }
+        $container->set('language.bootstrap', TRUE);
+      }
+    }
+    else {
+      $default = language_default();
+      $GLOBALS[$type] = $this->extend($default);
+    }
   }
 }
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index 2bfd765..a3255db 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -867,7 +867,7 @@ function block_block_list_alter(&$blocks) {
       continue;
     }
     foreach ($block_langcodes[$block->module][$block->delta] as $language_type => $langcodes) {
-      if (isset($langcodes[$GLOBALS[$language_type]->langcode])) {
+      if (isset($langcodes[drupal_container()->get($language_type)->langcode])) {
         // Found a language type - langcode combination in the configuration
         // that is applicable to the current request.
         continue 2;
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index c43e725..e4b23a8 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -949,7 +949,7 @@ function comment_prepare_thread(&$comments) {
  */
 function comment_view(Comment $comment, Node $node, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
-    $langcode = $GLOBALS['language_content']->langcode;
+    $langcode = drupal_container()->get('language_content')->langcode;
   }
 
   // Populate $comment->content with a render() array.
@@ -1016,7 +1016,7 @@ function comment_view(Comment $comment, Node $node, $view_mode = 'full', $langco
  */
 function comment_build_content(Comment $comment, Node $node, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
-    $langcode = $GLOBALS['language_content']->langcode;
+    $langcode = drupal_container()->get('language_content')->langcode;
   }
 
   // Remove previously built content, if exists.
@@ -1673,7 +1673,7 @@ function comment_forms() {
  * @ingroup forms
  */
 function comment_form($form, &$form_state, Comment $comment) {
-  global $user, $language_content;
+  global $user;
 
   // During initial form build, add the comment entity to the form state for
   // use during form building and processing. During a rebuild, use what is in
@@ -1838,7 +1838,7 @@ function comment_form($form, &$form_state, Comment $comment) {
   // content language. Otherwise mark the comment as language neutral.
   $comment_langcode = $comment->langcode;
   if (($comment_langcode == LANGUAGE_NOT_SPECIFIED) && variable_get('node_type_language_' . $node->type, 0)) {
-    $comment_langcode = $language_content->langcode;
+    $comment_langcode = drupal_container()->get('language_content')->langcode;
   }
   $form['langcode'] = array(
     '#type' => 'value',
diff --git a/core/modules/field/field.multilingual.inc b/core/modules/field/field.multilingual.inc
index f054bf1..9a7da4a 100644
--- a/core/modules/field/field.multilingual.inc
+++ b/core/modules/field/field.multilingual.inc
@@ -247,7 +247,7 @@ function field_valid_language($langcode, $default = TRUE) {
   if (in_array($langcode, $enabled_languages)) {
     return $langcode;
   }
-  global $language_content;
+  $language_content = drupal_container()->get('language_content');
   return $default ? language_default()->langcode : $language_content->langcode;
 }
 
diff --git a/core/modules/language/language.install b/core/modules/language/language.install
index 5a962fa..7c2dd89 100644
--- a/core/modules/language/language.install
+++ b/core/modules/language/language.install
@@ -43,10 +43,6 @@ function language_uninstall() {
     variable_del("language_negotiation_$type");
     variable_del("language_negotiation_methods_weight_$type");
   }
-
-  // Re-initialize the language system so successive calls to t() and other
-  // functions will not expect languages to be present.
-  drupal_language_initialize();
 }
 
 /**
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index c7d6f18..0f36705 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -276,7 +276,7 @@ function language_language_types_info() {
       '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.'),
     ),
-    LANGUAGE_TYPE_CONTENT => array(
+    'language_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(LANGUAGE_NEGOTIATION_INTERFACE),
@@ -296,7 +296,7 @@ function language_language_negotiation_info() {
 
   $negotiation_info = array();
   $negotiation_info[LANGUAGE_NEGOTIATION_URL] = array(
-    'types' => array(LANGUAGE_TYPE_CONTENT, LANGUAGE_TYPE_INTERFACE, LANGUAGE_TYPE_URL),
+    'types' => array('language_content', LANGUAGE_TYPE_INTERFACE, LANGUAGE_TYPE_URL),
     'callbacks' => array(
       'negotiation' => 'language_from_url',
       'language_switch' => 'language_switcher_url',
@@ -340,7 +340,7 @@ function language_language_negotiation_info() {
   );
 
   $negotiation_info[LANGUAGE_NEGOTIATION_INTERFACE] = array(
-    'types' => array(LANGUAGE_TYPE_CONTENT),
+    'types' => array('language_content'),
     'callbacks' => array('negotiation' => 'language_from_interface'),
     'file' => $file,
     'weight' => 8,
diff --git a/core/modules/language/language.test b/core/modules/language/language.test
index f0000e1..e641f7e 100644
--- a/core/modules/language/language.test
+++ b/core/modules/language/language.test
@@ -185,31 +185,11 @@ class LanguageDependencyInjectionTest extends DrupalWebTestCase {
   }
 
   /**
-   * Test dependency injected Language against the GLOBAL language object.
-   *
-   * @todo Once the PHP global is gone, we won't need this test as the same
-   * test is done without the PHP global in the following test.
-   */
-  function testDependencyInjectedLanguage() {
-    // Initialize the language system.
-    drupal_language_initialize();
-
-    $expected = $GLOBALS[LANGUAGE_TYPE_INTERFACE];
-    $result = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
-    foreach ($expected as $property => $value) {
-      $this->assertEqual($expected->$property, $result->$property, t('The dependency injected language object %prop property equals the $GLOBAL language object %prop property.', array('%prop' => $property)));
-    }
-  }
-
-  /**
    * Test dependency injected languages against a new Language object.
    *
    * @see Drupal\Core\Language\Language
    */
   function testDependencyInjectedNewLanguage() {
-    // Initialize the language system.
-    drupal_language_initialize();
-
     $expected = new Drupal\Core\Language\Language((array) language_default());
     $result = drupal_container()->get(LANGUAGE_TYPE_INTERFACE);
     foreach ($expected as $property => $value) {
@@ -234,9 +214,6 @@ class LanguageDependencyInjectionTest extends DrupalWebTestCase {
     );
     variable_set('language_default', $new_language_default);
 
-    // Initialize the language system.
-    drupal_language_initialize();
-
     // The langauge system creates a Language object which contains the
     // same properties as the new default language object.
     $expected = $new_language_default;
diff --git a/core/modules/locale/locale.install b/core/modules/locale/locale.install
index d740c67..aa85e1b 100644
--- a/core/modules/locale/locale.install
+++ b/core/modules/locale/locale.install
@@ -448,7 +448,7 @@ function locale_update_8007() {
   // is not available its functionality is rebuild.
   $language_types = variable_get('language_types', array(
     LANGUAGE_TYPE_INTERFACE => TRUE,
-    LANGUAGE_TYPE_CONTENT => FALSE,
+    'language_content' => FALSE,
     LANGUAGE_TYPE_URL => FALSE,
   ));
   foreach ($language_types as $language_type => $configurable) {
diff --git a/core/modules/locale/locale.test b/core/modules/locale/locale.test
index ded11ef..6ccbb85 100644
--- a/core/modules/locale/locale.test
+++ b/core/modules/locale/locale.test
@@ -1584,8 +1584,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
     language_save($language);
 
     // Check the UI language.
-    drupal_language_initialize();
-    $this->assertEqual($GLOBALS['language_interface']->langcode, $this->langcode, t('Current language: %lang', array('%lang' => $GLOBALS['language_interface']->langcode)));
+    $this->assertEqual(drupal_container()->get('language_interface')->langcode, $this->langcode, t('Current language: %lang', array('%lang' => drupal_container()->get('language_interface')->langcode)));
 
     // Enable multilingual workflow option for articles.
     variable_set('node_type_language_article', 1);
@@ -1614,7 +1613,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
     drupal_load('module', 'locale');
     variable_set('language_types', language_types_get_default() + array('language_custom' => TRUE));
     variable_set('language_negotiation_' . LANGUAGE_TYPE_INTERFACE, language_language_negotiation_info());
-    variable_set('language_negotiation_' . LANGUAGE_TYPE_CONTENT, language_language_negotiation_info());
+    variable_set('language_negotiation_language_content', language_language_negotiation_info());
     variable_set('language_negotiation_' . LANGUAGE_TYPE_URL, language_language_negotiation_info());
 
     // Change language negotiation settings.
@@ -1629,8 +1628,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
     $this->drupalGet('');
 
     // Check the init language logic.
-    drupal_language_initialize();
-    $this->assertEqual($GLOBALS['language_interface']->langcode, 'en', t('Language after uninstall: %lang', array('%lang' => $GLOBALS['language_interface']->langcode)));
+    $this->assertEqual(drupal_container()->get('language_interface')->langcode, 'en', t('Language after uninstall: %lang', array('%lang' => drupal_container()->get('language_interface')->langcode)));
 
     // Check JavaScript files deletion.
     $this->assertTrue($result = !file_exists($js_file), t('JavaScript file deleted: %file', array('%file' => $result ? $js_file : t('found'))));
@@ -1644,7 +1642,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
     $this->assertTrue(count(language_types_get_all()) == count(language_types_get_default()), t('Language types reset'));
     $language_negotiation = language_negotiation_method_get_first(LANGUAGE_TYPE_INTERFACE) == LANGUAGE_NEGOTIATION_DEFAULT;
     $this->assertTrue($language_negotiation, t('Interface language negotiation: %setting', array('%setting' => t($language_negotiation ? 'none' : 'set'))));
-    $language_negotiation = language_negotiation_method_get_first(LANGUAGE_TYPE_CONTENT) == LANGUAGE_NEGOTIATION_DEFAULT;
+    $language_negotiation = language_negotiation_method_get_first('language_content') == LANGUAGE_NEGOTIATION_DEFAULT;
     $this->assertTrue($language_negotiation, t('Content language negotiation: %setting', array('%setting' => t($language_negotiation ? 'none' : 'set'))));
     $language_negotiation = language_negotiation_method_get_first(LANGUAGE_TYPE_URL) == LANGUAGE_NEGOTIATION_DEFAULT;
     $this->assertTrue($language_negotiation, t('URL language negotiation: %setting', array('%setting' => t($language_negotiation ? 'none' : 'set'))));
@@ -2872,7 +2870,7 @@ class LocaleMultilingualFieldsFunctionalTest extends DrupalWebTestCase {
     $this->assertTrue($assert, t('Field language correctly changed.'));
 
     // Enable content language URL detection.
-    language_negotiation_set(LANGUAGE_TYPE_CONTENT, array(LANGUAGE_NEGOTIATION_URL => 0));
+    language_negotiation_set('language_content', array(LANGUAGE_NEGOTIATION_URL => 0));
 
     // Test multilingual field language fallback logic.
     $this->drupalGet("it/node/$node->nid");
@@ -3119,7 +3117,7 @@ class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase {
     // negotiation settings with the proper flag enabled.
     variable_set('locale_test_content_language_type', TRUE);
     $this->languageNegotiationUpdate();
-    $type = LANGUAGE_TYPE_CONTENT;
+    $type = 'language_content';
     $language_types = variable_get('language_types', language_types_get_default());
     $this->assertTrue($language_types[$type], t('Content language type is configurable.'));
 
@@ -3161,7 +3159,7 @@ class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase {
     $last = variable_get('locale_test_language_negotiation_last', array());
     foreach (language_types_get_all() as $type) {
       $langcode = $last[$type];
-      $value = $type == LANGUAGE_TYPE_CONTENT || strpos($type, 'test') !== FALSE ? 'it' : 'en';
+      $value = $type == 'language_content' || strpos($type, 'test') !== FALSE ? 'it' : 'en';
       $this->assertEqual($langcode, $value, t('The negotiated language for %type is %language', array('%type' => $type, '%language' => $langcode)));
     }
 
diff --git a/core/modules/locale/tests/locale_test.module b/core/modules/locale/tests/locale_test.module
index 93dfaa1..4e8f82e 100644
--- a/core/modules/locale/tests/locale_test.module
+++ b/core/modules/locale/tests/locale_test.module
@@ -22,8 +22,9 @@ function locale_test_boot() {
  */
 function locale_test_init() {
   locale_test_store_language_negotiation();
-  if (isset($GLOBALS['language_interface']) && isset($GLOBALS['language_interface']->method_id)) {
-    drupal_set_message(t('Language negotiation method: @name', array('@name' => $GLOBALS['language_interface']->method_id)));
+  $language_interface = drupal_container()->get('language_interface');
+  if (isset($language_interface) && isset($language_interface->method_id)) {
+    drupal_set_message(t('Language negotiation method: @name', array('@name' => $language_interface->method_id)));
   }
 }
 
@@ -49,7 +50,7 @@ function locale_test_language_types_info() {
  */
 function locale_test_language_types_info_alter(array &$language_types) {
   if (variable_get('locale_test_content_language_type', FALSE)) {
-    unset($language_types[LANGUAGE_TYPE_CONTENT]['fixed']);
+    unset($language_types['language_content']['fixed']);
   }
 }
 
@@ -70,7 +71,7 @@ function locale_test_language_negotiation_info() {
     return array(
       'test_language_negotiation_method' => array(
         'name' => t('Test'),
-        'types' => array(LANGUAGE_TYPE_CONTENT, 'test_language_type', 'fixed_test_language_type'),
+        'types' => array('language_content', 'test_language_type', 'fixed_test_language_type'),
       ) + $info,
       'test_language_negotiation_method_ts' => array(
         'name' => t('Type-specific test'),
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 5e1c3b3..07e5bfe 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -699,7 +699,7 @@ function node_type_update_nodes($old_type, $type) {
  *   type object by $type->disabled being set to TRUE.
  */
 function _node_types_build($rebuild = FALSE) {
-  $cid = 'node_types:' . $GLOBALS['language_interface']->langcode;
+  $cid = 'node_types:' . drupal_container()->get('language_interface')->langcode;
 
   if (!$rebuild) {
     $_node_types = &drupal_static(__FUNCTION__);
@@ -1142,7 +1142,7 @@ function node_revision_delete($revision_id) {
  */
 function node_view(Node $node, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
-    $langcode = $GLOBALS['language_content']->langcode;
+    $langcode = drupal_container()->get('language_content')->langcode;
   }
 
   // Populate $node->content with a render() array.
@@ -1204,7 +1204,7 @@ function node_view(Node $node, $view_mode = 'full', $langcode = NULL) {
  */
 function node_build_content(Node $node, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
-    $langcode = $GLOBALS['language_content']->langcode;
+    $langcode = drupal_container()->get('language_content')->langcode;
   }
 
   // Remove previously built content, if exists.
@@ -2393,7 +2393,7 @@ function node_block_list_alter(&$blocks) {
  * @see node_menu()
  */
 function node_feed($nids = FALSE, $channel = array()) {
-  global $base_url, $language_content;
+  global $base_url;
 
   if ($nids === FALSE) {
     $nids = db_select('node', 'n')
@@ -2448,7 +2448,7 @@ function node_feed($nids = FALSE, $channel = array()) {
     'title'       => variable_get('site_name', 'Drupal'),
     'link'        => $base_url,
     'description' => variable_get('feed_description', ''),
-    'language'    => $language_content->langcode
+    'language'    => drupal_container()->get('language_content')->langcode
   );
   $channel_extras = array_diff_key($channel, $channel_defaults);
   $channel = array_merge($channel_defaults, $channel);
diff --git a/core/modules/system/language.api.php b/core/modules/system/language.api.php
index 9f28619..73faa64 100644
--- a/core/modules/system/language.api.php
+++ b/core/modules/system/language.api.php
@@ -54,7 +54,7 @@ function hook_language_init() {
 function hook_language_switch_links_alter(array &$links, $type, $path) {
   global $language_interface;
 
-  if ($type == LANGUAGE_TYPE_CONTENT && isset($links[$language_interface->langcode])) {
+  if ($type == 'language_content' && isset($links[$language_interface->langcode])) {
     foreach ($links[$language_interface->langcode] as $link) {
       $link['attributes']['class'][] = 'active-language';
     }
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 024f3ed..c6737db 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -582,7 +582,7 @@ function taxonomy_term_delete_multiple(array $tids) {
  */
 function taxonomy_term_view(TaxonomyTerm $term, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
-    $langcode = $GLOBALS['language_content']->langcode;
+    $langcode = drupal_container()->get('language_content')->langcode;
   }
 
   field_attach_prepare_view('taxonomy_term', array($term->tid => $term), $view_mode, $langcode);
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 4219728..d826dbe 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -2358,7 +2358,7 @@ function user_view_page($account) {
  */
 function user_view($account, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
-    $langcode = $GLOBALS['language_content']->langcode;
+    $langcode = drupal_container()->get('language_content')->langcode;
   }
 
   // Retrieve all profile fields and attach to $account->content.
@@ -2395,7 +2395,7 @@ function user_view($account, $view_mode = 'full', $langcode = NULL) {
  */
 function user_build_content($account, $view_mode = 'full', $langcode = NULL) {
   if (!isset($langcode)) {
-    $langcode = $GLOBALS['language_content']->langcode;
+    $langcode = drupal_container()->get('language_content')->langcode;
   }
 
   // Remove previously built content, if exists.
diff --git a/core/update.php b/core/update.php
index 9797833..bd45ef2 100644
--- a/core/update.php
+++ b/core/update.php
@@ -424,9 +424,9 @@ if (empty($op) && update_access_allowed()) {
 }
 
 // update_fix_d8_requirements() needs to run before bootstrapping beyond path.
-// So bootstrap to DRUPAL_BOOTSTRAP_LANGUAGE then include unicode.inc.
+// So bootstrap to DRUPAL_BOOTSTRAP_PAGE_HEADER then include unicode.inc.
 
-drupal_bootstrap(DRUPAL_BOOTSTRAP_LANGUAGE);
+drupal_bootstrap(DRUPAL_BOOTSTRAP_PAGE_HEADER);
 include_once DRUPAL_ROOT . '/core/includes/unicode.inc';
 
 update_fix_d8_requirements();
