diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index afddb22..c5421ed 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -322,7 +322,7 @@ public function isDefaultRevision($new_value = NULL) {
    * {@inheritdoc}
    */
   public function isRevisionTranslationAffected() {
-    $field_name = 'revision_translation_affected';
+    $field_name = $this->getEntityType()->getKey('revision_translation_affected');
     return $this->hasField($field_name) ? $this->get($field_name)->value : TRUE;
   }
 
@@ -330,7 +330,7 @@ public function isRevisionTranslationAffected() {
    * {@inheritdoc}
    */
   public function setRevisionTranslationAffected($affected) {
-    $field_name = 'revision_translation_affected';
+    $field_name = $this->getEntityType()->getKey('revision_translation_affected');
     if ($this->hasField($field_name)) {
       $this->set($field_name, $affected);
     }
diff --git a/core/lib/Drupal/Core/Entity/EditorialContentEntityBase.php b/core/lib/Drupal/Core/Entity/EditorialContentEntityBase.php
index ff6abcd..85e2e6b 100644
--- a/core/lib/Drupal/Core/Entity/EditorialContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/EditorialContentEntityBase.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\Core\Field\BaseFieldDefinition;
+
 /**
  * Provides a base entity class with extended revision and publishing support.
  *
diff --git a/core/lib/Drupal/Core/Entity/EntityFieldManager.php b/core/lib/Drupal/Core/Entity/EntityFieldManager.php
index 378a95c..332a709 100644
--- a/core/lib/Drupal/Core/Entity/EntityFieldManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityFieldManager.php
@@ -220,6 +220,19 @@ protected function buildBaseFieldDefinitions($entity_type_id) {
       }
     }
 
+    // Make sure that revisionable entity types are correctly defined.
+    if ($entity_type->isRevisionable() && $entity_type->isTranslatable()) {
+      // The 'revision_translation_affected' field should always be defined.
+      if (!isset($base_field_definitions[$keys['revision_translation_affected']])) {
+        $base_field_definitions[$keys['revision_translation_affected']] = BaseFieldDefinition::create('boolean')
+          ->setLabel($this->t('Revision translation affected'))
+          ->setDescription($this->t('Indicates if the last edit of a translation belongs to current revision.'))
+          ->setReadOnly(TRUE)
+          ->setRevisionable(TRUE)
+          ->setTranslatable(TRUE);
+      }
+    }
+
     // Assign base field definitions the entity type provider.
     $provider = $entity_type->getProvider();
     foreach ($base_field_definitions as $definition) {
diff --git a/core/lib/Drupal/Core/Entity/EntityType.php b/core/lib/Drupal/Core/Entity/EntityType.php
index b39fb3f..5f6589a 100644
--- a/core/lib/Drupal/Core/Entity/EntityType.php
+++ b/core/lib/Drupal/Core/Entity/EntityType.php
@@ -302,6 +302,7 @@ public function __construct($definition) {
       'bundle' => '',
       'langcode' => '',
       'default_langcode' => 'default_langcode',
+      'revision_translation_affected' => 'revision_translation_affected',
     ];
     $this->handlers += [
       'access' => 'Drupal\Core\Entity\EntityAccessControlHandler',
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
index c5751e1..dfdc418 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
@@ -1692,8 +1692,9 @@ protected function getSharedTableFieldSchema(FieldStorageDefinitionInterface $st
     // few "entity keys", in order to keep their indexes optimized.
     // @todo Fix this in https://www.drupal.org/node/2841291.
     $not_null_keys = $this->entityType->getKeys();
-    // Label fields are not necessarily required.
-    unset($not_null_keys['label']);
+    // Label and the 'revision_translation_affected' fields are not necessarily
+    // required.
+    unset($not_null_keys['label'], $not_null_keys['revision_translation_affected']);
     // Because entity ID and revision ID are both serial fields in the base and
     // revision table respectively, the revision ID is not known yet, when
     // inserting data into the base table. Instead the revision ID in the base
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php
index 30befd2..ea0f57c 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchemaConverter.php
@@ -370,9 +370,26 @@ protected function updateFieldStorageDefinitionsToRevisionable(ContentEntityType
     if ($update_cached_definitions) {
       $this->entityDefinitionUpdateManager->installFieldStorageDefinition($revision_field->getName(), $entity_type->id(), $entity_type->getProvider(), $revision_field);
     }
-
     $updated_storage_definitions[$entity_type->getKey('revision')] = $revision_field;
 
+    // Add the 'revision_translation_affected' field if needed.
+    if ($entity_type->isTranslatable()) {
+      $revision_translation_affected_field = BaseFieldDefinition::create('boolean')
+        ->setName($entity_type->getKey('revision_translation_affected'))
+        ->setTargetEntityTypeId($entity_type->id())
+        ->setTargetBundle(NULL)
+        ->setLabel(new TranslatableMarkup('Revision translation affected'))
+        ->setDescription(new TranslatableMarkup('Indicates if the last edit of a translation belongs to current revision.'))
+        ->setReadOnly(TRUE)
+        ->setRevisionable(TRUE)
+        ->setTranslatable(TRUE);
+
+      if ($update_cached_definitions) {
+        $this->entityDefinitionUpdateManager->installFieldStorageDefinition($revision_translation_affected_field->getName(), $entity_type->id(), $entity_type->getProvider(), $revision_translation_affected_field);
+        $updated_storage_definitions[$entity_type->getKey('revision_translation_affected')] = $revision_translation_affected_field;
+      }
+    }
+
     return $updated_storage_definitions;
   }
 
diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php
index 76071df..66a7a8f 100644
--- a/core/modules/block_content/src/Entity/BlockContent.php
+++ b/core/modules/block_content/src/Entity/BlockContent.php
@@ -216,13 +216,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setSetting('target_type', 'user')
       ->setRevisionable(TRUE);
 
-    $fields['revision_translation_affected'] = BaseFieldDefinition::create('boolean')
-      ->setLabel(t('Revision translation affected'))
-      ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
-      ->setReadOnly(TRUE)
-      ->setRevisionable(TRUE)
-      ->setTranslatable(TRUE);
-
     return $fields;
   }
 
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index e5544a2..368ce1b 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -400,13 +400,6 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ])
       ->setDisplayConfigurable('form', TRUE);
 
-    $fields['revision_translation_affected'] = BaseFieldDefinition::create('boolean')
-      ->setLabel(t('Revision translation affected'))
-      ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
-      ->setReadOnly(TRUE)
-      ->setRevisionable(TRUE)
-      ->setTranslatable(TRUE);
-
     return $fields;
   }
 
diff --git a/core/modules/serialization/tests/src/Kernel/EntitySerializationTest.php b/core/modules/serialization/tests/src/Kernel/EntitySerializationTest.php
index ebd4e03..5b71b93 100644
--- a/core/modules/serialization/tests/src/Kernel/EntitySerializationTest.php
+++ b/core/modules/serialization/tests/src/Kernel/EntitySerializationTest.php
@@ -126,6 +126,9 @@ public function testNormalize() {
       'default_langcode' => [
         ['value' => TRUE],
       ],
+      'revision_translation_affected' => [
+        ['value' => TRUE],
+      ],
       'non_rev_field' => [],
       'field_test_text' => [
         [
@@ -197,6 +200,7 @@ public function testSerialize() {
       'user_id' => '<user_id><target_id>' . $this->user->id() . '</target_id><target_type>' . $this->user->getEntityTypeId() . '</target_type><target_uuid>' . $this->user->uuid() . '</target_uuid><url>' . $this->user->url() . '</url></user_id>',
       'revision_id' => '<revision_id><value>' . $this->entity->getRevisionId() . '</value></revision_id>',
       'default_langcode' => '<default_langcode><value>1</value></default_langcode>',
+      'revision_translation_affected' => '<revision_translation_affected><value>1</value></revision_translation_affected>',
       'non_rev_field' => '<non_rev_field/>',
       'field_test_text' => '<field_test_text><value>' . $this->values['field_test_text']['value'] . '</value><format>' . $this->values['field_test_text']['format'] . '</format></field_test_text>',
     ];
diff --git a/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php b/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php
index 3a0aca2..014f995 100644
--- a/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php
+++ b/core/modules/system/src/Tests/Entity/Update/SqlContentEntityStorageSchemaConverterTest.php
@@ -92,6 +92,9 @@ public function testMakeRevisionable() {
     $entity_test_update = $this->lastInstalledSchemaRepository->getLastInstalledDefinition('entity_test_update');
     $this->assertTrue($entity_test_update->isRevisionable());
 
+    $field_storage_definitions = $this->lastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions('entity_test_update');
+    $this->assertTrue(isset($field_storage_definitions['revision_translation_affected']));
+
     /** @var \Drupal\Core\Entity\Sql\SqlEntityStorageInterface $storage */
     $storage = \Drupal::entityTypeManager()->getStorage('entity_test_update');
     $this->assertEqual(count($storage->loadMultiple()), 102, 'All test entities were found.');
diff --git a/core/modules/system/src/Tests/Update/EntityUpdateToRevisionableAndPublishableTest.php b/core/modules/system/src/Tests/Update/EntityUpdateToRevisionableAndPublishableTest.php
index 167bf12..37fcfb0 100644
--- a/core/modules/system/src/Tests/Update/EntityUpdateToRevisionableAndPublishableTest.php
+++ b/core/modules/system/src/Tests/Update/EntityUpdateToRevisionableAndPublishableTest.php
@@ -77,6 +77,9 @@ protected function setDatabaseDumpFiles() {
 
   /**
    * Tests the conversion of an entity type to revisionable and publishable.
+   *
+   * @covers entity_test_update_update_8400
+   * @covers system_update_8402
    */
   public function testConvertToRevisionableAndPublishable() {
     // Check that entity type is not revisionable nor publishable prior to
@@ -100,6 +103,11 @@ public function testConvertToRevisionableAndPublishable() {
     $storage = \Drupal::entityTypeManager()->getStorage('entity_test_update');
     $this->assertEqual(count($storage->loadMultiple()), 102, 'All test entities were found.');
 
+    // Check that the 'revision_translation_affected' field has been added by
+    // system_update_8402().
+    $field_storage_definitions = $this->lastInstalledSchemaRepository->getLastInstalledFieldStorageDefinitions('entity_test_update');
+    $this->assertTrue(isset($field_storage_definitions['revision_translation_affected']));
+
     // The conversion to revisionable is already tested by
     // \Drupal\system\Tests\Entity\Update\SqlContentEntityStorageSchemaConverterTest::testMakeRevisionable()
     // so we only need to check that some special cases are handled.
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index a4ffffa..bf92ce5 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -17,6 +17,7 @@
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\DrupalKernel;
+use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Site\Settings;
 use Drupal\Core\StreamWrapper\PrivateStream;
 use Drupal\Core\StreamWrapper\PublicStream;
@@ -1984,3 +1985,39 @@ function system_update_8401() {
     ->clear('response')
     ->save();
 }
+
+/**
+ * Add the 'revision_translation_affected' field to all entity types.
+ */
+function system_update_8402() {
+  $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
+
+  // Clear the cached entity type definitions so we get the new
+  // 'revision_translation_affected' entity key
+  \Drupal::entityTypeManager()->clearCachedDefinitions();
+
+  // Get a list of revisionable and translatable entity types.
+  /** @var \Drupal\Core\Entity\ContentEntityTypeInterface[] $definitions */
+  $definitions = array_filter(\Drupal::entityTypeManager()->getDefinitions(), function (EntityTypeInterface $entity_type) use ($definition_update_manager) {
+    if ($entity_type = $definition_update_manager->getEntityType($entity_type->id())) {
+      return $entity_type->isRevisionable() && $entity_type->isTranslatable();
+    }
+    return FALSE;
+  });
+
+  foreach ($definitions as $entity_type_id => $entity_type) {
+    $field_name = $entity_type->getKey('revision_translation_affected');
+    // Install the 'revision_translation_affected' field if needed.
+    if (!$definition_update_manager->getFieldStorageDefinition($field_name, $entity_type_id)) {
+      $storage_definition = BaseFieldDefinition::create('boolean')
+        ->setLabel(t('Revision translation affected'))
+        ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
+        ->setReadOnly(TRUE)
+        ->setRevisionable(TRUE)
+        ->setTranslatable(TRUE);
+
+      $definition_update_manager
+        ->installFieldStorageDefinition($field_name, $entity_type_id, $entity_type_id, $storage_definition);
+    }
+  }
+}
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityFieldManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityFieldManagerTest.php
index 4985470..d525514 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityFieldManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityFieldManagerTest.php
@@ -542,6 +542,7 @@ protected function setUpEntityWithFieldDefinition($custom_invoke_all = FALSE, $f
     $this->entityType->getKeys()->willReturn($entity_keys + ['default_langcode' => 'default_langcode']);
     $this->entityType->entityClassImplements(FieldableEntityInterface::class)->willReturn(TRUE);
     $this->entityType->isTranslatable()->willReturn(FALSE);
+    $this->entityType->isRevisionable()->willReturn(FALSE);
     $this->entityType->getProvider()->willReturn('the_provider');
     $this->entityType->id()->willReturn('the_entity_id');
 
@@ -651,6 +652,7 @@ public function testGetFieldMap() {
     $entity_type->getKeys()->willReturn(['default_langcode' => 'default_langcode']);
     $entity_type->entityClassImplements(FieldableEntityInterface::class)->willReturn(TRUE);
     $entity_type->isTranslatable()->shouldBeCalled();
+    $entity_type->isRevisionable()->shouldBeCalled();
     $entity_type->getProvider()->shouldBeCalled();
 
     $non_content_entity_type->entityClassImplements(FieldableEntityInterface::class)->willReturn(FALSE);
@@ -752,6 +754,7 @@ public function testGetFieldMapByFieldType() {
     $entity_type->getKeys()->willReturn(['default_langcode' => 'default_langcode'])->shouldBeCalled();
     $entity_type->entityClassImplements(FieldableEntityInterface::class)->willReturn(TRUE)->shouldBeCalled();
     $entity_type->isTranslatable()->shouldBeCalled();
+    $entity_type->isRevisionable()->shouldBeCalled();
     $entity_type->getProvider()->shouldBeCalled();
 
     $override_entity_type->entityClassImplements(FieldableEntityInterface::class)->willReturn(FALSE)->shouldBeCalled();
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
index d1045f5..431831c 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
@@ -58,7 +58,11 @@ public function testSet($key, $value) {
    */
   public function testGetKeys($entity_keys, $expected) {
     $entity_type = $this->setUpEntityType(['entity_keys' => $entity_keys]);
-    $this->assertSame($expected + ['default_langcode' => 'default_langcode'], $entity_type->getKeys());
+    $expected += [
+      'default_langcode' => 'default_langcode',
+      'revision_translation_affected' => 'revision_translation_affected',
+    ];
+    $this->assertSame($expected, $entity_type->getKeys());
   }
 
   /**
