diff --git a/core/modules/contact/src/Entity/Message.php b/core/modules/contact/src/Entity/Message.php
index 158e576..f9670c1 100644
--- a/core/modules/contact/src/Entity/Message.php
+++ b/core/modules/contact/src/Entity/Message.php
@@ -29,7 +29,8 @@
  *   admin_permission = "administer contact forms",
  *   entity_keys = {
  *     "bundle" = "contact_form",
- *     "uuid" = "uuid"
+ *     "uuid" = "uuid",
+ *     "langcode" = "langcode"
  *   },
  *   bundle_entity_type = "contact_form",
  *   field_ui_base_route = "entity.contact_form.edit_form",
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 29c93d2..7501365 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -427,12 +427,12 @@ function language_form_alter(&$form, FormStateInterface $form_state) {
   // Content entity forms may have added a langcode field. But content language
   // configuration should decide if it should be exposed or not in the forms.
   $form_object = $form_state->getFormObject();
-  if ($form_object instanceof ContentEntityFormInterface) {
+  if ($form_object instanceof ContentEntityFormInterface && $form_object->getEntity()->getEntityType()->hasKey('langcode')) {
     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
     $entity = $form_object->getEntity();
     $entity_type = $entity->getEntityType();
     $langcode_key = $entity_type->getKey('langcode');
-    if (isset($form[$langcode_key]) && $entity_type->isTranslatable()) {
+    if (isset($form[$langcode_key])) {
       $language_configuration = ContentLanguageSettings::loadByEntityTypeBundle($entity->getEntityTypeId(), $entity->bundle());
       $form[$langcode_key]['#access'] = $language_configuration->isLanguageAlterable();
     }
diff --git a/core/modules/language/src/Tests/LanguageEntityFormTest.php b/core/modules/language/src/Tests/LanguageEntityFormTest.php
new file mode 100644
index 0000000..27ecac8
--- /dev/null
+++ b/core/modules/language/src/Tests/LanguageEntityFormTest.php
@@ -0,0 +1,99 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\language\Tests\LanguageEntityFormTest.
+ */
+
+namespace Drupal\language\Tests;
+
+use Drupal\language_test\Entity\NoLanguageEntityTest;
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests entity form with language module.
+ *
+ * This is to ensure that an entity form by default does not show the language
+ * select, but it does so when it's enabled from the content language settings
+ * page.
+ * In this test we test it with the particular cases of the contact messages
+ * and with a custom entity_test without language definition.
+ *
+ * @group language
+ */
+class LanguageEntityFormTest extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array(
+    'contact',
+    'language',
+    'contact_test',
+    'language_test',
+  );
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Create and login administrative user.
+    $admin_user = $this->drupalCreateUser(array(
+      'access site-wide contact form',
+      'administer languages',
+    ));
+    $this->drupalLogin($admin_user);
+  }
+
+  /**
+   * Tests configuration options with language.
+   */
+  public function testContactLanguage() {
+    // Ensure that contact form by default does not show the language select.
+    $this->drupalGet('contact');
+    $this->assertResponse(200, 'The page exists');
+    $this->assertNoField('edit-langcode-0-value');
+
+    // Enable language select from content language settings page.
+    $settings_path = 'admin/config/regional/content-language';
+    $edit['entity_types[contact_message]'] = TRUE;
+    $edit['settings[contact_message][feedback][settings][language][language_alterable]'] = TRUE;
+    $this->drupalPostForm($settings_path, $edit, t('Save configuration'));
+
+    // Ensure that contact form now shows the language select.
+    $this->drupalGet('contact');
+    $this->assertResponse(200, 'The page exists');
+    $this->assertField('edit-langcode-0-value');
+  }
+
+  /**
+   * Tests configuration options with empty langcode.
+   */
+  public function testEmptyLangcode() {
+    // Create an entity which empty langcode.
+    $entity = NoLanguageEntityTest::create();
+    $entity->save();
+
+    // Ensure that node by default does not show the language select.
+    $this->drupalGet('no_language_entity_test/manage/' . $entity->id());
+    $this->assertResponse(200, 'The page exists');
+    $this->assertNoField('edit-langcode-0-value');
+
+    // Enable language select from content language settings page.
+    $settings_path = 'admin/config/regional/content-language';
+    $edit['entity_types[no_language_entity_test]'] = TRUE;
+    $edit['settings[no_language_entity_test][no_language_entity_test][settings][language][language_alterable]'] = TRUE;
+    $this->drupalPostForm($settings_path, $edit, t('Save configuration'));
+
+    // Ensure that there is still no language selector for entity with
+    // empty langcode.
+    $this->drupalGet('no_language_entity_test/manage/' . $entity->id());
+    $this->assertResponse(200, 'The page exists');
+    $this->assertNoField('edit-langcode-0-value');
+  }
+
+}
diff --git a/core/modules/language/tests/language_test/language_test.info.yml b/core/modules/language/tests/language_test/language_test.info.yml
index 03051cd..3557210 100644
--- a/core/modules/language/tests/language_test/language_test.info.yml
+++ b/core/modules/language/tests/language_test/language_test.info.yml
@@ -4,3 +4,5 @@ description: 'Support module for the language layer tests.'
 core: 8.x
 package: Testing
 version: VERSION
+dependencies:
+  - entity_test
diff --git a/core/modules/language/tests/language_test/language_test.routing.yml b/core/modules/language/tests/language_test/language_test.routing.yml
index 489a7fe..bd5271b 100644
--- a/core/modules/language/tests/language_test/language_test.routing.yml
+++ b/core/modules/language/tests/language_test/language_test.routing.yml
@@ -31,3 +31,15 @@ language_test.entity_using_current_language:
         type: entity:configurable_language
         # Force load in the interface text language selected for page.
         with_config_overrides: TRUE
+
+entity.no_language_entity_test.edit:
+  path: '/no_language_entity_test/manage/{no_language_entity_test}'
+  defaults:
+    _controller: '\Drupal\entity_test\Controller\EntityTestController::testEdit'
+    entity_type_id: 'no_language_entity_test'
+  requirements:
+    _access: 'TRUE'
+  options:
+    parameters:
+      no_language_entity_test:
+        type: entity:no_language_entity_test
diff --git a/core/modules/language/tests/language_test/src/Entity/NoLanguageEntityTest.php b/core/modules/language/tests/language_test/src/Entity/NoLanguageEntityTest.php
new file mode 100755
index 0000000..edb0385
--- /dev/null
+++ b/core/modules/language/tests/language_test/src/Entity/NoLanguageEntityTest.php
@@ -0,0 +1,47 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\language_test\Entity\NoLanguageEntityTest.
+ */
+
+namespace Drupal\language_test\Entity;
+
+use Drupal\entity_test\Entity\EntityTest;
+
+/**
+ * Defines the test entity class.
+ *
+ * @ContentEntityType(
+ *   id = "no_language_entity_test",
+ *   label = @Translation("Test entity with no language support"),
+ *   handlers = {
+ *     "list_builder" = "Drupal\entity_test\EntityTestListBuilder",
+ *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder",
+ *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
+ *     "form" = {
+ *       "default" = "Drupal\entity_test\EntityTestForm",
+ *       "delete" = "Drupal\entity_test\EntityTestDeleteForm"
+ *     },
+ *     "translation" = "Drupal\content_translation\ContentTranslationHandler",
+ *     "views_data" = "Drupal\entity_test\EntityTestViewsData"
+ *   },
+ *   base_table = "no_language_entity_test",
+ *   persistent_cache = FALSE,
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "uuid" = "uuid",
+ *     "bundle" = "type",
+ *     "label" = "name",
+ *     "langcode" = "langcode",
+ *   },
+ *   links = {
+ *     "canonical" = "/no_language_entity_test/{no_language_entity_test}",
+ *     "edit-form" = "/no_language_entity_test/manage/{no_language_entity_test}",
+ *   },
+ *   field_ui_base_route = "entity.entity_test.admin_form",
+ * )
+ */
+class NoLanguageEntityTest extends EntityTest {
+
+}
