diff --git a/core/modules/migrate/src/Plugin/migrate/process/DefaultConfigValue.php b/core/modules/migrate/src/Plugin/migrate/process/DefaultConfigValue.php
new file mode 100644
index 0000000..b8d2e49
--- /dev/null
+++ b/core/modules/migrate/src/Plugin/migrate/process/DefaultConfigValue.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\process\DefaultConfigValue.
+ */
+
+namespace Drupal\migrate\Plugin\migrate\process;
+
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\Row;
+
+/**
+ * This plugin sets missing values on the destination using a value from configuration.
+ *
+ * @MigrateProcessPlugin(
+ *   id = "default_config_value"
+ * )
+ */
+class DefaultConfigValue extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    $config_object = $this->configuration['config_object'];
+    $config_key = $this->configuration['config_key'];
+    $config_value = \Drupal::config($config_object)->get($config_key);
+    if (!empty($this->configuration['strict'])) {
+      return isset($value) ? $value : $config_value;
+    }
+    return $value ?: $config_value;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index bbc8088..b405228 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -40846,6 +40846,24 @@
   'init' => 'odo@local.host',
   'data' => 'a:1:{s:7:"contact";i:1;}',
 ))
+->values(array(
+  'uid' => '3',
+  'name' => 'user3',
+  'pass' => '$S$D/HVkgCg1Hvi7DN5KVSgNl.2C5g8W6oe/OoIRMUlyjkmPugQRhoB',
+  'mail' => 'user3@local.host',
+  'theme' => '',
+  'signature' => '',
+  'signature_format' => NULL,
+  'created' => '0',
+  'access' => '1444945097',
+  'login' => '1444945097',
+  'status' => '1',
+  'timezone' => NULL,
+  'language' => 'is',
+  'picture' => '0',
+  'init' => '',
+  'data' => 'a:1:{s:7:"contact";i:1;}',
+))
 ->execute();
 
 $connection->schema()->createTable('users_roles', array(
diff --git a/core/modules/migrate_drupal_ui/src/Tests/d7/MigrateUpgrade7Test.php b/core/modules/migrate_drupal_ui/src/Tests/d7/MigrateUpgrade7Test.php
index 6b30ade..75f729d 100644
--- a/core/modules/migrate_drupal_ui/src/Tests/d7/MigrateUpgrade7Test.php
+++ b/core/modules/migrate_drupal_ui/src/Tests/d7/MigrateUpgrade7Test.php
@@ -61,7 +61,7 @@ protected function getEntityCounts() {
       'taxonomy_term' => 18,
       'taxonomy_vocabulary' => 3,
       'tour' => 4,
-      'user' => 3,
+      'user' => 4,
       'user_role' => 4,
       'menu_link_content' => 9,
       'view' => 12,
diff --git a/core/modules/user/migration_templates/d7_user.yml b/core/modules/user/migration_templates/d7_user.yml
index 12147f8..93a4394 100644
--- a/core/modules/user/migration_templates/d7_user.yml
+++ b/core/modules/user/migration_templates/d7_user.yml
@@ -15,9 +15,21 @@ process:
   login: login
   status: status
   timezone: timezone
-  langcode: language
-  preferred_langcode: language
-  preferred_admin_langcode: language
+  langcode:
+    plugin: default_config_value
+    source: language
+    config_object: system.site
+    config_key: default_langcode
+  preferred_langcode:
+    plugin: default_config_value
+    source: language
+    config_object: system.site
+    config_key: default_langcode
+  preferred_admin_langcode:
+    plugin: default_config_value
+    source: language
+    config_object: system.site
+    config_key: default_langcode
   init: init
   roles:
     plugin: migration
diff --git a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
index 2e0965d..208f963 100644
--- a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
+++ b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
@@ -87,7 +87,8 @@ protected function assertEntity($id, $label, $mail, $password, $access, $login,
    */
   public function testUser() {
     $password = '$S$DGFZUE.FhrXbe4y52eC7p0ZVRGD/gOPtVctDlmC89qkujnBokAlJ';
-    $this->assertEntity(2, 'Odo', 'odo@local.host', $password, '0', '0', FALSE, '', 'odo@local.host');
+    $default_langcode = \Drupal::config('system.site')->get('default_langcode');
+    $this->assertEntity(2, 'Odo', 'odo@local.host', $password, '0', '0', FALSE, $default_langcode, 'odo@local.host');
 
     // Ensure that the user can authenticate.
     $this->assertEquals(2, \Drupal::service('user.auth')->authenticate('Odo', 'a password'));
@@ -102,6 +103,8 @@ public function testUser() {
     $this->assertEquals(2, \Drupal::service('user.auth')->authenticate('Odo', 'a password'));
     $user = User::load(2);
     $this->assertEquals($rehash, $user->getPassword());
+
+    $this->assertEntity(3, 'user3', 'user3@local.host', '$S$D/HVkgCg1Hvi7DN5KVSgNl.2C5g8W6oe/OoIRMUlyjkmPugQRhoB', '1444945097', '1444945097', FALSE, 'is', NULL);
   }
 
 }
