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 961eb67..d524f33 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
@@ -20,6 +20,7 @@
  *   id = "language",
  *   label = @Translation("Language"),
  *   description = @Translation("An entity field referencing a language."),
+ *   default_widget = "language_select",
  *   no_ui = TRUE,
  *   constraints = {
  *     "ComplexData" = {
diff --git a/core/modules/language/src/Plugin/Field/FieldWidget/LanguageSelectWidget.php b/core/modules/language/src/Plugin/Field/FieldWidget/LanguageSelectWidget.php
new file mode 100644
index 0000000..72396a8
--- /dev/null
+++ b/core/modules/language/src/Plugin/Field/FieldWidget/LanguageSelectWidget.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\language\Plugin\Field\LanguageSelectWidget.
+ */
+
+namespace Drupal\language\Plugin\Field\FieldWidget;
+
+use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Field\WidgetBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageInterface;
+
+/**
+ * Plugin implementation of the 'langcode' widget.
+ *
+ * @FieldWidget(
+ *   id = "language_select",
+ *   label = @Translation("Language"),
+ *   field_types = {
+ *     "language"
+ *   }
+ * )
+ */
+class LanguageSelectWidget extends WidgetBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
+    $language_configuration = \Drupal::moduleHandler()->invoke('language', 'get_default_configuration', array('node', $items->getEntity()->bundle()));
+    $element['value'] = array(
+      '#title' => t('Language'),
+      '#type' => 'language_select',
+      '#default_value' => $items->getEntity()->language()->getId(),
+      '#languages' => LanguageInterface::STATE_ALL,
+      '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'],
+    );
+
+    return $element;
+  }
+
+}
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 4e3bc46..e0b3274 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -404,12 +404,6 @@ function node_entity_extra_field_info() {
         );
       }
     }
-    $extra['node'][$bundle->type]['display']['langcode'] = array(
-      'label' => t('Language'),
-      'description' => $description,
-      'weight' => 0,
-      'visible' => FALSE,
-    );
     $extra['node'][$bundle->type]['display']['links'] = array(
       'label' => t('Links'),
       'description' => $description,
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index b5bb8f8..10a9313 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -347,9 +347,14 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setReadOnly(TRUE);
 
     $fields['langcode'] = BaseFieldDefinition::create('language')
-      ->setLabel(t('Language code'))
+      ->setLabel(t('Language'))
       ->setDescription(t('The node language code.'))
-      ->setRevisionable(TRUE);
+      ->setRevisionable(TRUE)
+      ->setDisplayOptions('form', array(
+        'type' => 'language_select',
+        'weight' => 0,
+      ))
+      ->setDisplayConfigurable('form', TRUE);
 
     $fields['title'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Title'))
diff --git a/core/modules/node/src/NodeForm.php b/core/modules/node/src/NodeForm.php
index a214282..706a4d6 100644
--- a/core/modules/node/src/NodeForm.php
+++ b/core/modules/node/src/NodeForm.php
@@ -107,16 +107,6 @@ public function form(array $form, FormStateInterface $form_state) {
       '#type' => 'hidden',
       '#default_value' => $node->getChangedTime(),
     );
-
-    $language_configuration = \Drupal::moduleHandler()->invoke('language', 'get_default_configuration', array('node', $node->getType()));
-    $form['langcode'] = array(
-      '#title' => t('Language'),
-      '#type' => 'language_select',
-      '#default_value' => $node->getUntranslated()->language()->id,
-      '#languages' => LanguageInterface::STATE_ALL,
-      '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'],
-    );
-
     $form['advanced'] = array(
       '#type' => 'vertical_tabs',
       '#attributes' => array('class' => array('entity-meta')),
