diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index 971e551..4b65f57 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -357,7 +357,7 @@ public function isTranslatable() {
     // Check that the bundle is translatable, the entity has a language defined
     // and if we have more than one language on the site.
     $bundles = $this->entityManager()->getBundleInfo($this->entityTypeId);
-    return !empty($bundles[$this->bundle()]['translatable']) && !$this->getUntranslated()->language()->isLocked() && $this->languageManager()->isMultilingual();
+    return $this->getEntityType()->isTranslatable() && (!isset($bundles[$this->bundle()]['translatable']) || $bundles[$this->bundle()]['translatable']) && !$this->getUntranslated()->language()->isLocked() && $this->languageManager()->isMultilingual();
   }
 
   /**
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index 68fafbf..fcb4dcd 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -163,7 +163,7 @@ function content_translation_entity_type_alter(array &$entity_types) {
 function content_translation_entity_bundle_info_alter(&$bundles) {
   foreach ($bundles as $entity_type => &$info) {
     foreach ($info as $bundle => &$bundle_info) {
-      $bundle_info['translatable'] = \Drupal::service('content_translation.manager')->isEnabled($entity_type, $bundle);
+      $bundle_info['translatable'] = \Drupal::service('content_translation.manager')->isEnabled($entity_type, $bundle) ?: NULL;
     }
   }
 }
@@ -297,7 +297,9 @@ function content_translation_form_alter(array &$form, FormStateInterface $form_s
   $op = $form_object->getOperation();
 
   // Let the content translation handler alter the content entity edit form.
-  if ($entity instanceof ContentEntityInterface && $entity->isTranslatable() && count($entity->getTranslationLanguages()) > 1 && ($op == 'edit' || $op == 'default')) {
+  /** @var \Drupal\content_translation\ContentTranslationManagerInterface $manager */
+  $manager = \Drupal::service('content_translation.manager');
+  if ($entity instanceof ContentEntityInterface && $entity->isTranslatable() && $manager->isEnabled($entity->getEntityTypeId(), $entity->bundle()) && count($entity->getTranslationLanguages()) > 1 && ($op == 'edit' || $op == 'default')) {
     $controller = \Drupal::entityManager()->getHandler($entity->getEntityTypeId(), 'translation');
     $controller->entityFormAlter($form, $form_state, $entity);
 
@@ -407,7 +409,9 @@ function content_translation_form_field_config_edit_form_alter(array &$form, For
  * Implements hook_entity_presave().
  */
 function content_translation_entity_presave(EntityInterface $entity) {
-  if ($entity instanceof ContentEntityInterface && $entity->isTranslatable() && !$entity->isNew()) {
+  /** @var \Drupal\content_translation\ContentTranslationManagerInterface $manager */
+  $manager = \Drupal::service('content_translation.manager');
+  if ($entity instanceof ContentEntityInterface && $entity->isTranslatable() && $manager->isEnabled($entity->getEntityTypeId(), $entity->bundle()) && !$entity->isNew()) {
     // If we are creating a new translation we need to use the source language
     // as original language, since source values are the only ones available to
     // compare against.
@@ -416,8 +420,6 @@ function content_translation_entity_presave(EntityInterface $entity) {
         ->getStorage($entity->entityType())->loadUnchanged($entity->id());
     }
     $langcode = $entity->language()->getId();
-    /** @var \Drupal\content_translation\ContentTranslationManagerInterface $manager */
-    $manager = \Drupal::service('content_translation.manager');
     $source_langcode = !$entity->original->hasTranslation($langcode) ? $manager->getTranslationMetadata($entity)->getSource() : NULL;
     \Drupal::service('content_translation.synchronizer')->synchronizeFields($entity, $langcode, $source_langcode);
   }
diff --git a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceFormatterTranslationTest.php b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceFormatterTranslationTest.php
new file mode 100644
index 0000000..e0945ba
--- /dev/null
+++ b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceFormatterTranslationTest.php
@@ -0,0 +1,132 @@
+<?php
+
+namespace Drupal\Tests\field\Kernel\EntityReference;
+
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\entity_test\Entity\EntityTestMul;
+use Drupal\field\Tests\EntityReference\EntityReferenceTestTrait;
+use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\user\Entity\Role;
+use Drupal\user\RoleInterface;
+
+/**
+ * Tests the formatters functionality.
+ *
+ * @group entity_reference
+ */
+class EntityReferenceFormatterTranslationTest extends EntityKernelTestBase {
+
+  use EntityReferenceTestTrait;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['language', 'content_translation'];
+
+  /**
+   * The entity type used in this test.
+   *
+   * @var string
+   */
+  protected $entityType = 'entity_test_mul';
+
+  /**
+   * The bundle used in this test.
+   *
+   * @var string
+   */
+  protected $bundle = 'entity_test_mul';
+
+  /**
+   * The name of the field used in this test.
+   *
+   * @var string
+   */
+  protected $fieldName = 'field_test';
+
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema($this->entityType);
+
+    $this->createEntityReferenceField($this->entityType, $this->bundle, $this->fieldName, 'Field test', $this->entityType, 'default', [], FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
+    // Set the default view mode to use the 'entity_reference_entity_view'
+    // formatter.
+    entity_get_display($this->entityType, $this->bundle, 'default')
+      ->setComponent($this->fieldName, [
+        'type' => 'entity_reference_entity_view',
+      ])
+      ->save();
+
+    $this->installConfig(['user']);
+    Role::load(RoleInterface::ANONYMOUS_ID)
+      ->grantPermission('view test entity')
+      ->grantPermission('view test entity translations')
+      ->save();
+
+    $this->installConfig(['language']);
+    ConfigurableLanguage::create([
+      'id' => 'l2',
+      'label' => $this->randomString(),
+    ])->save();
+
+  }
+
+
+  public function testEntityFormatterTranslationWithoutContentTranslation() {
+    $this->checkEntityDisplay();
+  }
+
+  public function testEntityFormatterTranslationWithContentTranslation() {
+    $this->enableTranslation();
+    $this->checkEntityDisplay();
+  }
+
+  protected function checkEntityDisplay() {
+    /** @var \Drupal\Core\Render\RendererInterface $renderer */
+    $renderer = $this->container->get('renderer');
+    $view_builder = $this->entityManager->getViewBuilder($this->entityType);
+
+    $entity_1 = EntityTestMul::create();
+    $entity_1->name = 'name entity 1 en';
+    $entity_1 = $entity_1->addTranslation('l2');
+    $entity_1->name = 'name entity 1 l2';
+    $entity_1->save();
+
+    $entity_2 = EntityTestMul::create();
+    $entity_2->{$this->fieldName}->entity = $entity_1;
+    $entity_2 = $entity_2->addTranslation('l2');
+    $entity_2->{$this->fieldName}->entity = $entity_1;
+    $entity_2->save();
+
+    $build = $view_builder->view($entity_2, 'default', 'en');
+    $output = $renderer->renderRoot($build);
+    $actual_occurrences = substr_count($output, $entity_1->getTranslation('en')->get('name')->value);
+    $this->assertEquals(2, $actual_occurrences);
+    $actual_occurrences = substr_count($output, $entity_1->getTranslation('l2')->get('name')->value);
+    $this->assertEquals(0, $actual_occurrences);
+
+    $build = $view_builder->view($entity_2, 'default', 'l2');
+    $output = $renderer->renderRoot($build);
+    $actual_occurrences = substr_count($output, $entity_1->getTranslation('l2')->get('name')->value);
+    $this->assertEquals(2, $actual_occurrences);
+    $actual_occurrences = substr_count($output, $entity_1->getTranslation('en')->get('name')->value);
+    $this->assertEquals(0, $actual_occurrences);
+  }
+
+  /**
+   * Enables translation for the current entity type and bundle.
+   */
+  protected function enableTranslation() {
+    // Enable translation for the current entity type and ensure the change is
+    // picked up.
+    \Drupal::service('content_translation.manager')->setEnabled($this->entityType, $this->bundle, TRUE);
+    drupal_static_reset();
+    \Drupal::entityManager()->clearCachedDefinitions();
+    \Drupal::service('router.builder')->rebuild();
+    \Drupal::service('entity.definition_update_manager')->applyUpdates();
+  }
+}
