diff --git a/core/modules/content_moderation/config/schema/content_moderation.schema.yml b/core/modules/content_moderation/config/schema/content_moderation.schema.yml
index 7f9e8fd..04d1edd 100644
--- a/core/modules/content_moderation/config/schema/content_moderation.schema.yml
+++ b/core/modules/content_moderation/config/schema/content_moderation.schema.yml
@@ -70,6 +70,22 @@ block_content.type.*.third_party.content_moderation:
       type: string
       label: 'Moderation state for new block content'
 
+entity_test.entity_test_bundle.*.third_party.content_moderation:
+  type: mapping
+  label: 'Enable moderation states for this entity test type'
+  mapping:
+    enabled:
+      type: boolean
+      label: 'Moderation states enabled'
+    allowed_moderation_states:
+      type: sequence
+      sequence:
+        type: string
+        label: 'Moderation state'
+    default_moderation_state:
+      type: string
+      label: 'Moderation state for new entity test'
+
 views.filter.latest_revision:
   type: views_filter
   label: 'Latest revision'
diff --git a/core/modules/content_moderation/src/EntityOperations.php b/core/modules/content_moderation/src/EntityOperations.php
index 3685b0d..60224b4 100644
--- a/core/modules/content_moderation/src/EntityOperations.php
+++ b/core/modules/content_moderation/src/EntityOperations.php
@@ -179,7 +179,6 @@ protected function updateOrCreateFromEntity(EntityInterface $entity) {
     $entity_type_id = $entity->getEntityTypeId();
     $entity_id = $entity->id();
     $entity_revision_id = $entity->getRevisionId();
-    $entity_langcode = $entity->language()->getId();
 
     $storage = $this->entityTypeManager->getStorage('content_moderation_state');
     $entities = $storage->loadByProperties([
@@ -201,11 +200,14 @@ protected function updateOrCreateFromEntity(EntityInterface $entity) {
     }
 
     // Sync translations.
-    if (!$content_moderation_state->hasTranslation($entity_langcode)) {
-      $content_moderation_state->addTranslation($entity_langcode);
-    }
-    if ($content_moderation_state->language()->getId() !== $entity_langcode) {
-      $content_moderation_state = $content_moderation_state->getTranslation($entity_langcode);
+    if ($entity->getEntityType()->isTranslatable()) {
+      $entity_langcode = $entity->language()->getId();
+      if (!$content_moderation_state->hasTranslation($entity_langcode)) {
+        $content_moderation_state->addTranslation($entity_langcode);
+      }
+      if ($content_moderation_state->language()->getId() !== $entity_langcode) {
+        $content_moderation_state = $content_moderation_state->getTranslation($entity_langcode);
+      }
     }
 
     // Create the ContentModerationState entity for the inserted entity.
diff --git a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
index 644a76b..1080d9f 100644
--- a/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
+++ b/core/modules/content_moderation/src/Plugin/Field/ModerationStateFieldItemList.php
@@ -39,12 +39,14 @@ protected function getModerationState() {
           ->loadRevision($revision_to_load);
 
         // Return the correct translation.
-        $langcode = $entity->language()->getId();
-        if (!$content_moderation_state->hasTranslation($langcode)) {
-          $content_moderation_state->addTranslation($langcode);
-        }
-        if ($content_moderation_state->language()->getId() !== $langcode) {
-          $content_moderation_state = $content_moderation_state->getTranslation($langcode);
+        if ($entity->getEntityType()->isTranslatable()) {
+          $langcode = $entity->language()->getId();
+          if (!$content_moderation_state->hasTranslation($langcode)) {
+            $content_moderation_state->addTranslation($langcode);
+          }
+          if ($content_moderation_state->language()->getId() !== $langcode) {
+            $content_moderation_state = $content_moderation_state->getTranslation($langcode);
+          }
         }
 
         return $content_moderation_state->get('moderation_state')->entity;
diff --git a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php
index 3ba37a2..2629baa 100644
--- a/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php
+++ b/core/modules/content_moderation/tests/src/Kernel/ContentModerationStateTest.php
@@ -4,6 +4,10 @@
 
 use Drupal\content_moderation\Entity\ContentModerationState;
 use Drupal\content_moderation\Entity\ModerationState;
+use Drupal\Core\Config\Entity\ThirdPartySettingsInterface;
+use Drupal\entity_test\Entity\EntityTestBundle;
+use Drupal\entity_test\Entity\EntityTestRev;
+use Drupal\entity_test\Entity\EntityTestWithBundle;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\language\Entity\ConfigurableLanguage;
 use Drupal\node\Entity\Node;
@@ -21,6 +25,7 @@ class ContentModerationStateTest extends KernelTestBase {
    * {@inheritdoc}
    */
   public static $modules = [
+    'entity_test',
     'node',
     'content_moderation',
     'user',
@@ -38,6 +43,7 @@ protected function setUp() {
     $this->installSchema('node', 'node_access');
     $this->installEntitySchema('node');
     $this->installEntitySchema('user');
+    $this->installEntitySchema('entity_test_with_bundle');
     $this->installEntitySchema('content_moderation_state');
     $this->installConfig('content_moderation');
   }
@@ -210,6 +216,32 @@ public function testMultilingualModeration() {
     $this->assertEquals(6, $english_node->getRevisionId());
   }
 
+  public function testEntityTestModeration() {
+
+    $entity_test_type = EntityTestBundle::create([
+      'id' => 'example',
+    ]);
+    if ($entity_test_type instanceof ThirdPartySettingsInterface) {
+      $entity_test_type->setThirdPartySetting('content_moderation', 'enabled', TRUE);
+      $entity_test_type->setThirdPartySetting('content_moderation', 'allowed_moderation_states', [
+        'draft',
+        'published'
+      ]);
+      $entity_test_type->setThirdPartySetting('content_moderation', 'default_moderation_state', 'draft');
+    }
+    $entity_test_type->save();
+    $entity_test_with_bundle = EntityTestWithBundle::create([
+      'type' => 'example'
+    ]);
+    $entity_test_with_bundle->save();
+    $this->assertEquals('draft', $entity_test_with_bundle->moderation_state->entity->id());
+
+    $entity_test_with_bundle->moderation_state->entity = 'published';
+    $entity_test_with_bundle->save();
+
+    $this->assertEquals('published', EntityTestWithBundle::load($entity_test_with_bundle->id())->moderation_state->entity->id());
+  }
+
   /**
    * Reloads the node after clearing the static cache.
    *
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestWithBundle.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestWithBundle.php
index c668bd3..a3ed955 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestWithBundle.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestWithBundle.php
@@ -30,6 +30,7 @@
  *   entity_keys = {
  *     "id" = "id",
  *     "uuid" = "uuid",
+ *     "revision" = "revision_id",
  *     "bundle" = "type",
  *     "label" = "name",
  *     "langcode" = "langcode",
