diff --git a/core/modules/language/migration_templates/d6_default_language.yml b/core/modules/language/migration_templates/d6_default_language.yml
new file mode 100644
index 0000000..8c37415
--- /dev/null
+++ b/core/modules/language/migration_templates/d6_default_language.yml
@@ -0,0 +1,23 @@
+id: d6_default_language
+label: Default language
+migration_tags:
+  - Drupal 6
+source:
+  plugin: default_language
+process:
+  default_langcode:
+    -
+      plugin: callback
+      callable: get_object_vars
+      source: language_default
+    -
+      plugin: extract
+      index:
+        - language
+
+destination:
+  plugin: config
+  config_name: system.site
+migration_dependencies:
+  required:
+    - language
diff --git a/core/modules/language/src/Plugin/migrate/source/DefaultLanguage.php b/core/modules/language/src/Plugin/migrate/source/DefaultLanguage.php
new file mode 100644
index 0000000..2d0d650
--- /dev/null
+++ b/core/modules/language/src/Plugin/migrate/source/DefaultLanguage.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace Drupal\language\Plugin\migrate\source;
+
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\State\StateInterface;
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\migrate\MigrateException;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Default language variable from database.
+ *
+ * This source class is used exclusively for the language_default variable.
+ *
+ * @MigrateSource(
+ *   id = "default_language",
+ * )
+ */
+class DefaultLanguage extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function initializeIterator() {
+    return new \ArrayIterator(array($this->values()));
+  }
+
+  /**
+   * Return the value of the language_default variable.
+   *
+   * @return array
+   *   An associative array where the key is the variable name
+   *   and the value is the value found in the database.
+   */
+  protected function values() {
+    // Create an ID field so we can record migration in the map table.
+    $values['id'] = 'language_default';
+    $results = $this->prepareQuery()->execute()->fetchAllKeyed();
+    $language_default = unserialize($results['language_default']);
+
+    // Check if the language exists, fail otherwise.
+    if (ConfigurableLanguage::load($language_default->language) === NULL) {
+      throw new MigrateException("The language $language_default->language does not exists on this site.");
+    }
+
+    return $values + ['language_default' => $language_default];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    return $this->getDatabase()
+      ->select('variable', 'v')
+      ->fields('v', array('name', 'value'))
+      ->condition('name', 'language_default');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return ['language_default' => 'language_default'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['id']['type'] = 'string';
+    return $ids;
+  }
+
+}
diff --git a/core/modules/language/src/Tests/Migrate/d6/MigrateDefaultLanguageTest.php b/core/modules/language/src/Tests/Migrate/d6/MigrateDefaultLanguageTest.php
new file mode 100644
index 0000000..9f7c7c9
--- /dev/null
+++ b/core/modules/language/src/Tests/Migrate/d6/MigrateDefaultLanguageTest.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\language\Tests\Migrate\d6\MigrateDefaultLanguageTest.
+ */
+
+namespace Drupal\language\Tests\Migrate\d6;
+
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
+
+/**
+ * Tests the default language variable migration.
+ *
+ * @group migrate_drupal_6
+ */
+class MigrateDefaultLanguageTest extends MigrateDrupal6TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['language'];
+
+  /**
+   * Tests the migration of the language_default variable to the
+   * system.site.default_langcode config key, with an existing language.
+   */
+  public function testMigrationWithExistingLanguage() {
+    $this->doTestMigration('fr');
+  }
+
+  /**
+   * Tests the migration of the language_default variable to the
+   * system.site.default_langcode config key, with a non-existent language.
+   */
+  public function testMigrationWithNonExistentLanguage() {
+    $this->doTestMigration('tv');
+  }
+
+  /**
+   * Helper method to test the migration.
+   */
+  protected function doTestMigration($langcode) {
+    // The default language of the test fixture is English. Change it to
+    // something else before migrating, to be sure that the source site
+    // default language is migrated.
+    $value = 'O:8:"stdClass":11:{s:8:"language";s:2:"' . $langcode . '";s:4:"name";s:6:"French";s:6:"native";s:6:"French";s:9:"direction";s:1:"0";s:7:"enabled";i:1;s:7:"plurals";s:1:"0";s:7:"formula";s:0:"";s:6:"domain";s:0:"";s:6:"prefix";s:0:"";s:6:"weight";s:1:"0";s:10:"javascript";s:0:"";}';
+    $this->sourceDatabase->update('variable')
+      ->fields(array(
+        'value' => $value
+      ))
+      ->condition('name', 'language_default' )
+      ->execute();
+    $this->executeMigrations(['language', 'd6_default_language']);
+    $default_language = ConfigurableLanguage::load($langcode);
+    $this->assertNotNull($default_language);
+    $this->assertIdentical($langcode, $this->config('system.site')->get('default_langcode'));
+  }
+
+}
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
index fdcb26e..f5ffdbf 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
@@ -170,6 +170,10 @@ class MigrateUpgradeForm extends ConfirmFormBase {
       'source_module' => 'dblog',
       'destination_module' => 'dblog',
     ],
+    'd6_default_language' => [
+      'source_module' => 'locale',
+      'destination_module' => 'language',
+    ],
     'd6_field' => [
       'source_module' => 'content',
       'destination_module' => 'field',
