diff --git a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
index dfc5bf936d..b2a76d661f 100644
--- a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
+++ b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
@@ -6,6 +6,8 @@
 use Drupal\Core\Entity\Entity\EntityViewDisplay as BaseEntityViewDisplay;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\Core\Entity\TranslatableInterface;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Plugin\Context\Context;
 use Drupal\Core\Plugin\Context\ContextDefinition;
 use Drupal\Core\Plugin\Context\EntityContext;
@@ -333,7 +335,13 @@ protected function getRuntimeSections(FieldableEntityInterface $entity) {
     // by constructing a cacheable metadata object and retrieving the
     // entity-based contexts.
     $cacheability = new CacheableMetadata();
-    $contexts = $this->getContextsForEntity($entity);
+    if ($entity instanceof TranslatableInterface && !$entity->isDefaultTranslation()) {
+      $default_entity = $entity->getTranslation(LanguageInterface::LANGCODE_DEFAULT);
+      $contexts = $this->getContextsForEntity($default_entity);
+    }
+    else {
+      $contexts = $this->getContextsForEntity($entity);
+    }
     $storage = $this->sectionStorageManager()->findByContext($contexts, $cacheability);
     return $storage ? $storage->getSections() : [];
   }
diff --git a/core/modules/layout_builder/src/InlineBlockEntityOperations.php b/core/modules/layout_builder/src/InlineBlockEntityOperations.php
index 7e64b83cf1..6f8c96ff51 100644
--- a/core/modules/layout_builder/src/InlineBlockEntityOperations.php
+++ b/core/modules/layout_builder/src/InlineBlockEntityOperations.php
@@ -7,6 +7,7 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\RevisionableInterface;
+use Drupal\Core\Entity\TranslatableInterface;
 use Drupal\layout_builder\Plugin\Block\InlineBlock;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -148,9 +149,21 @@ public function handlePreSave(EntityInterface $entity) {
       return;
     }
     $duplicate_blocks = FALSE;
+    $is_new_translation = FALSE;
 
-    if ($sections = $this->getEntitySections($entity)) {
-      if ($this->isEntityUsingFieldOverride($entity)) {
+    $sections = $this->getEntitySections($entity);
+
+    if ($entity instanceof TranslatableInterface && $entity->isTranslatable()) {
+      if (!$entity->isNew() && $entity->isNewTranslation() && !$entity->isDefaultTranslation()) {
+        $is_new_translation = TRUE;
+        if ($this->isEntityUsingFieldOverride($entity) && !empty($sections)) {
+          $duplicate_blocks = TRUE;
+        }
+      }
+    }
+
+    if ($sections) {
+      if (!$is_new_translation && $this->isEntityUsingFieldOverride($entity)) {
         if (!$entity->isNew() && isset($entity->original)) {
           if (empty($this->getEntitySections($entity->original))) {
             // If there were no sections in the original entity then this is a
diff --git a/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php b/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
index 7726a455b8..b3292c4c86 100644
--- a/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
+++ b/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
@@ -5,9 +5,12 @@
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Entity\EntityRepositoryInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\Core\Entity\TranslatableInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Plugin\Context\Context;
 use Drupal\Core\Plugin\Context\ContextDefinition;
@@ -65,14 +68,28 @@ class OverridesSectionStorage extends SectionStorageBase implements ContainerFac
    */
   protected $entityFieldManager;
 
+  /**
+   * The entity repository.
+   *
+   * @var \Drupal\Core\Entity\EntityRepositoryInterface
+   */
+  protected $entityRepository;
+
+  /**
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
   /**
    * {@inheritdoc}
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, EntityRepositoryInterface $entity_repository, LanguageManagerInterface $language_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->entityTypeManager = $entity_type_manager;
     $this->entityFieldManager = $entity_field_manager;
+    $this->entityRepository = $entity_repository;
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -84,7 +101,9 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $container->get('entity_type.manager'),
-      $container->get('entity_field.manager')
+      $container->get('entity_field.manager'),
+      $container->get('entity.repository'),
+      $container->get('language_manager')
     );
   }
 
@@ -92,7 +111,15 @@ public static function create(ContainerInterface $container, array $configuratio
    * {@inheritdoc}
    */
   protected function getSectionList() {
-    return $this->getEntity()->get(static::FIELD_NAME);
+    $entity = $this->getEntity();
+    $section_list = $entity->get(static::FIELD_NAME);
+    if (count($section_list) === 0 && $entity instanceof TranslatableInterface && !$entity->isDefaultTranslation()) {
+      // If a translated entity has no sections the untranslated entity's
+      // sections should be used.
+      $entity = $entity->getUntranslated();
+      $section_list = $entity->get(static::FIELD_NAME);
+    }
+    return $section_list;
   }
 
   /**
@@ -110,7 +137,11 @@ protected function getEntity() {
    */
   public function getStorageId() {
     $entity = $this->getEntity();
-    return $entity->getEntityTypeId() . '.' . $entity->id();
+    $id = $entity->getEntityTypeId() . '.' . $entity->id();
+    if ($entity instanceof TranslatableInterface) {
+      $id .= '.' . $entity->language()->getId();
+    }
+    return $id;
   }
 
   /**
@@ -135,8 +166,8 @@ public function extractIdFromRoute($value, $definition, $name, array $defaults)
   public function getSectionListFromId($id) {
     @trigger_error('\Drupal\layout_builder\SectionStorageInterface::getSectionListFromId() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. The section list should be derived from context. See https://www.drupal.org/node/3016262.', E_USER_DEPRECATED);
     if (strpos($id, '.') !== FALSE) {
-      list($entity_type_id, $entity_id) = explode('.', $id, 2);
-      $entity = $this->entityTypeManager->getStorage($entity_type_id)->load($entity_id);
+      list($entity_type_id, $entity_id, $langcode) = $this->getIdPartsArray($id);
+      $entity = $this->getActiveEntity($entity_type_id, $entity_id, $langcode);
       if ($entity instanceof FieldableEntityInterface && $entity->hasField(static::FIELD_NAME)) {
         return $entity->get(static::FIELD_NAME);
       }
@@ -175,17 +206,18 @@ public function deriveContextsFromRoute($value, $definition, $name, array $defau
    */
   private function extractEntityFromRoute($value, array $defaults) {
     if (strpos($value, '.') !== FALSE) {
-      list($entity_type_id, $entity_id) = explode('.', $value, 2);
+      list($entity_type_id, $entity_id, $langcode) = $this->getIdPartsArray($value);
     }
     elseif (isset($defaults['entity_type_id']) && !empty($defaults[$defaults['entity_type_id']])) {
       $entity_type_id = $defaults['entity_type_id'];
       $entity_id = $defaults[$entity_type_id];
+      $langcode = isset($defaults['langcode']) ? $defaults['langcode'] : $this->languageManager->getCurrentLanguage()->getId();
     }
     else {
       return NULL;
     }
 
-    $entity = $this->entityTypeManager->getStorage($entity_type_id)->load($entity_id);
+    $entity = $this->getActiveEntity($entity_type_id, $entity_id, $langcode);
     if ($entity instanceof FieldableEntityInterface && $entity->hasField(static::FIELD_NAME)) {
       return $entity;
     }
@@ -349,4 +381,47 @@ public function isApplicable(RefinableCacheableDependencyInterface $cacheability
     return $default_section_storage->isOverridable() && count($this);
   }
 
+  /**
+   * Gets the 3 parts of the storage ID.
+   *
+   * The 3 parts will be, entity_type, entity_id and langcode. langcode may be
+   * NULL if the ID does not contain it.
+   *
+   * @param string $id
+   *   The ID.
+   *
+   * @return array
+   *   The parts of ID. The 3 parts will be, entity_type, entity_id and
+   *   langcode. langcode may be NULL if the ID does not contain it.
+   */
+  protected function getIdPartsArray($id) {
+    $parts = explode('.', $id);
+    if (count($parts) === 2) {
+      $parts[2] = NULL;
+    }
+    return $parts;
+  }
+
+  /**
+   * @param $entity_type_id
+   * @param $entity_id
+   * @param $langcode
+   *
+   * @return \Drupal\Core\Entity\EntityInterface|null
+   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
+   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
+   */
+  private function getActiveEntity($entity_type_id, $entity_id, $langcode) {
+    $entity = $this->entityTypeManager->getStorage($entity_type_id)
+      ->load($entity_id);
+    $contexts = [];
+    if ($langcode) {
+      $contexts[] = new Context(new ContextDefinition('language', 'Interface text'), $langcode);
+      $contexts[] = new Context(new ContextDefinition('language', 'Content'), $langcode);
+    }
+
+    $entity = $this->entityRepository->getActive($entity, $contexts);
+    return $entity;
+  }
+
 }
diff --git a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php
index ee15bdfc76..d44b1947d2 100644
--- a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php
+++ b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTest.php
@@ -95,7 +95,7 @@ public function testOverrides() {
     end($components);
     $uuid = key($components);
 
-    $this->drupalGet('layout_builder/update/block/overrides/node.1/0/content/' . $uuid);
+    $this->drupalGet('layout_builder/update/block/overrides/node.1.en/0/content/' . $uuid);
     $page->uncheckField('settings[label_display]');
     $page->pressButton('Update');
     $assert_session->pageTextNotContains('This is an override');
@@ -708,10 +708,10 @@ protected function assertCorrectLayouts() {
     $assert_session = $this->assertSession();
     // Ensure the layouts provided by layout_builder are available.
     $expected_layouts_hrefs = [
-      'layout_builder/add/section/overrides/node.1/0/layout_onecol',
-      'layout_builder/configure/section/overrides/node.1/0/layout_twocol_section',
-      'layout_builder/configure/section/overrides/node.1/0/layout_threecol_section',
-      'layout_builder/add/section/overrides/node.1/0/layout_fourcol_section',
+      'layout_builder/add/section/overrides/node.1.en/0/layout_onecol',
+      'layout_builder/configure/section/overrides/node.1.en/0/layout_twocol_section',
+      'layout_builder/configure/section/overrides/node.1.en/0/layout_threecol_section',
+      'layout_builder/add/section/overrides/node.1.en/0/layout_fourcol_section',
     ];
     foreach ($expected_layouts_hrefs as $expected_layouts_href) {
       $assert_session->linkByHrefExists($expected_layouts_href);
@@ -724,7 +724,7 @@ protected function assertCorrectLayouts() {
       'threecol_33_34_33',
     ];
     foreach ($unexpected_layouts as $unexpected_layout) {
-      $assert_session->linkByHrefNotExists("layout_builder/add/section/overrides/node.1/0/$unexpected_layout");
+      $assert_session->linkByHrefNotExists("layout_builder/add/section/overrides/node.1.en/0/$unexpected_layout");
     }
   }
 
diff --git a/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTranslationTest.php b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTranslationTest.php
new file mode 100644
index 0000000000..8104ca4113
--- /dev/null
+++ b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTranslationTest.php
@@ -0,0 +1,181 @@
+<?php
+
+namespace Drupal\Tests\layout_builder\Functional;
+
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\Core\Url;
+use Drupal\Tests\content_translation\Functional\ContentTranslationTestBase;
+
+/**
+ * Tests that the Layout Builder UI works with translated content.
+ *
+ * @group layout_builder
+ */
+class LayoutBuilderTranslationTest extends ContentTranslationTestBase {
+
+  /**
+   * The entity used for testing.
+   *
+   * @var \Drupal\Core\Entity\EntityInterface
+   */
+  protected $entity;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'content_translation',
+    'entity_test',
+    'layout_builder',
+    'block',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->drupalLogin($this->administrator);
+
+    $field_ui_prefix = 'entity_test_mul/structure/entity_test_mul';
+    // Allow overrides for the layout.
+    $this->drupalPostForm("$field_ui_prefix/display/default", ['layout[enabled]' => TRUE], 'Save');
+    $this->drupalPostForm("$field_ui_prefix/display/default", ['layout[allow_custom]' => TRUE], 'Save');
+
+    // @todo The Layout Builder UI relies on local tasks; fix in
+    //   https://www.drupal.org/project/drupal/issues/2917777.
+    $this->drupalPlaceBlock('local_tasks_block');
+
+    // Create a test entity.
+    $id = $this->createEntity([
+      $this->fieldName => [['value' => 'The untranslated field value']],
+    ], $this->langcodes[0]);
+    $storage = $this->container->get('entity_type.manager')->getStorage($this->entityTypeId);
+    $storage->resetCache([$id]);
+    $this->entity = $storage->load($id);
+
+    // Create a translation.
+    $this->drupalLogin($this->translator);
+    $add_translation_url = Url::fromRoute("entity.$this->entityTypeId.content_translation_add", [
+      $this->entityTypeId => $this->entity->id(),
+      'source' => $this->langcodes[0],
+      'target' => $this->langcodes[2],
+    ]);
+    $this->drupalPostForm($add_translation_url, [
+      "{$this->fieldName}[0][value]" => 'The translated field value',
+    ], 'Save');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setupTestFields() {
+    parent::setupTestFields();
+
+    EntityViewDisplay::create([
+      'targetEntityType' => $this->entityTypeId,
+      'bundle' => $this->bundle,
+      'mode' => 'default',
+      'status' => TRUE,
+    ])->setComponent($this->fieldName, ['type' => 'string'])->save();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getAdministratorPermissions() {
+    $permissions = parent::getAdministratorPermissions();
+    $permissions[] = 'administer entity_test_mul display';
+    return $permissions;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getTranslatorPermissions() {
+    $permissions = parent::getTranslatorPermissions();
+    $permissions[] = 'view test entity translations';
+    $permissions[] = 'view test entity';
+    $permissions[] = 'configure any layout';
+    return $permissions;
+  }
+
+  /**
+   * Tests that the Layout Builder UI works with translated content.
+   */
+  public function testLayoutPerTranslation() {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    $entity_url = $this->entity->toUrl('canonical')->toString();
+    $language = \Drupal::languageManager()->getLanguage($this->langcodes[2]);
+    $translated_entity_url = $this->entity->toUrl('canonical', ['language' => $language])->toString();
+    $layout_url = $entity_url . '/layout';
+    $translated_layout_url = $translated_entity_url . '/layout';
+
+    $this->drupalGet($entity_url);
+    $assert_session->pageTextNotContains('The translated field value');
+    $assert_session->pageTextContains('The untranslated field value');
+
+    $this->drupalGet($translated_entity_url);
+    $assert_session->pageTextNotContains('The untranslated field value');
+    $assert_session->pageTextContains('The translated field value');
+
+    $this->drupalGet($layout_url);
+    $assert_session->pageTextNotContains('The translated field value');
+    $assert_session->pageTextContains('The untranslated field value');
+
+    $this->drupalGet($translated_layout_url);
+    $assert_session->pageTextNotContains('The untranslated field value');
+    $assert_session->pageTextContains('The translated field value');
+
+    // Ensure that the tempstore varies per-translation.
+    $this->drupalGet($layout_url);
+    $assert_session->pageTextNotContains('The translated field value');
+    $assert_session->pageTextContains('The untranslated field value');
+
+    // Adjust the layout of the original entity.
+    $assert_session->linkExists('Add Block');
+    $this->clickLink('Add Block');
+    $assert_session->linkExists('Powered by Drupal');
+    $this->clickLink('Powered by Drupal');
+    $page->pressButton('Add Block');
+
+    $assert_session->pageTextContains('Powered by Drupal');
+
+    // Confirm the tempstore for the translated layout is not affected.
+    $this->drupalGet($translated_layout_url);
+    $assert_session->pageTextNotContains('Powered by Drupal');
+
+    $this->drupalGet($layout_url);
+    $assert_session->pageTextContains('Powered by Drupal');
+    $assert_session->linkExists('Save Layout');
+    $this->clickLink('Save Layout');
+
+    $this->drupalGet($entity_url);
+    $assert_session->pageTextNotContains('The translated field value');
+    $assert_session->pageTextContains('The untranslated field value');
+    $assert_session->pageTextContains('Powered by Drupal');
+
+    // Ensure that the layout change propagates to the translated entity.
+    $this->drupalGet($translated_entity_url);
+    $assert_session->pageTextNotContains('The untranslated field value');
+    $assert_session->pageTextContains('The translated field value');
+    $assert_session->pageTextContains('Powered by Drupal');
+
+    // The translated entity's unaltered layout still persists in the tempstore.
+    $this->drupalGet($translated_layout_url);
+    $assert_session->pageTextNotContains('The untranslated field value');
+    $assert_session->pageTextContains('The translated field value');
+    $assert_session->pageTextNotContains('Powered by Drupal');
+    $assert_session->linkExists('Save Layout');
+    $this->clickLink('Save Layout');
+
+    $assert_session->addressEquals($translated_entity_url);
+    $assert_session->pageTextNotContains('The untranslated field value');
+    $assert_session->pageTextContains('The translated field value');
+    $assert_session->pageTextNotContains('Powered by Drupal');
+  }
+
+}
diff --git a/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTranslationTest.php b/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTranslationTest.php
new file mode 100644
index 0000000000..300bd09784
--- /dev/null
+++ b/core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTranslationTest.php
@@ -0,0 +1,253 @@
+<?php
+
+namespace Drupal\Tests\layout_builder\FunctionalJavascript;
+
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\Core\Url;
+
+/**
+ * Tests that inline blocks works with content translation.
+ *
+ * @group layout_builder
+ */
+class InlineBlockTranslationTest extends InlineBlockTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'content_translation',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Adds a new language.
+    ConfigurableLanguage::createFromLangcode('it')->save();
+
+    // Enable translation for the node type 'bundle_with_section_field'.
+    \Drupal::service('content_translation.manager')->setEnabled('node', 'bundle_with_section_field', TRUE);
+    drupal_static_reset();
+    \Drupal::entityTypeManager()->clearCachedDefinitions();
+    \Drupal::service('router.builder')->rebuild();
+    \Drupal::service('entity.definition_update_manager')->applyUpdates();
+
+    $this->rebuildContainer();
+  }
+
+  /**
+   * Tests that inline blocks works with content translation.
+   */
+  public function testInlineBlockContentTranslation() {
+    $assert_session = $this->assertSession();
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'access contextual links',
+      'configure any layout',
+      'administer node display',
+      'administer node fields',
+      'translate bundle_with_section_field node',
+      'create content translations',
+    ]));
+
+    // Allow layout overrides.
+    $this->drupalPostForm(
+      static::FIELD_UI_PREFIX . '/display/default',
+      ['layout[enabled]' => TRUE],
+      'Save'
+    );
+    $this->drupalPostForm(
+      static::FIELD_UI_PREFIX . '/display/default',
+      ['layout[allow_custom]' => TRUE],
+      'Save'
+    );
+
+    // Add a new inline block to the original node.
+    $this->drupalGet('node/1/layout');
+    $this->addInlineBlockToLayout('Block en', 'Block en body');
+    $this->assertSaveLayout();
+    $this->drupalGet('node/1');
+    $assert_session->pageTextContains('Block en');
+    $assert_session->pageTextContains('Block en body');
+
+    // Create a translation.
+    $add_translation_url = Url::fromRoute("entity.node.content_translation_add", [
+      'node' => 1,
+      'source' => 'en',
+      'target' => 'it',
+    ]);
+    $this->drupalPostForm($add_translation_url, [
+      'title[0][value]' => 'The translated node title',
+      'body[0][value]' => 'The translated node body',
+    ], 'Save');
+
+    // Update the translate node's inline block.
+    $this->drupalGet('it/node/1/layout');
+    $this->configureInlineBlock('Block en body', 'Block it body');
+    $this->assertSaveLayout();
+
+    $this->drupalGet('node/1');
+    $assert_session->pageTextContains('Block en body');
+    $assert_session->pageTextNotContains('Block it body');
+
+    $this->drupalGet('it/node/1');
+    $assert_session->pageTextContains('Block it body');
+    $assert_session->pageTextNotContains('Block en body');
+
+    // Update the original node's inline block.
+    $this->drupalGet('node/1/layout');
+    $this->configureInlineBlock('Block en body', 'Block en body updated');
+    $this->assertSaveLayout();
+
+    $this->drupalGet('node/1');
+    $assert_session->pageTextContains('Block en body updated');
+    $assert_session->pageTextNotContains('Block it body');
+
+    $this->drupalGet('it/node/1');
+    $assert_session->pageTextContains('Block it body');
+    $assert_session->pageTextNotContains('Block en body updated');
+  }
+
+  /**
+   * Tests that an translated entity can override the layout from default.
+   */
+  public function testInlineBlockContentTranslationOverrideFromDefault() {
+    $assert_session = $this->assertSession();
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'access contextual links',
+      'configure any layout',
+      'administer node display',
+      'administer node fields',
+      'translate bundle_with_section_field node',
+      'create content translations',
+    ]));
+
+    // Allow layout overrides.
+    $this->drupalPostForm(
+      static::FIELD_UI_PREFIX . '/display/default',
+      ['layout[enabled]' => TRUE],
+      'Save'
+    );
+    $this->drupalPostForm(
+      static::FIELD_UI_PREFIX . '/display/default',
+      ['layout[allow_custom]' => TRUE],
+      'Save'
+    );
+
+    // Create a translation.
+    $add_translation_url = Url::fromRoute("entity.node.content_translation_add", [
+      'node' => 1,
+      'source' => 'en',
+      'target' => 'it',
+    ]);
+    $this->drupalPostForm($add_translation_url, [
+      'title[0][value]' => 'The translated node title',
+      'body[0][value]' => 'The translated node body',
+    ], 'Save');
+
+    // Add an inline block to the default layout.
+    $this->drupalGet(static::FIELD_UI_PREFIX . '/display/default');
+    $this->clickLink('Manage layout');
+    $assert_session->addressEquals(static::FIELD_UI_PREFIX . '/display-layout/default');
+    $this->addInlineBlockToLayout('Block title', 'The DEFAULT block body');
+    $this->assertSaveLayout();
+
+    $this->drupalGet('node/1');
+    $assert_session->pageTextContains('The DEFAULT block body');
+    $this->drupalGet('it/node/1');
+    $assert_session->pageTextContains('The DEFAULT block body');
+
+    // Override the translated node's layout.
+    $this->drupalGet('it/node/1/layout');
+    $this->configureInlineBlock('The DEFAULT block body', 'Overridden block body');
+    $this->assertSaveLayout();
+
+    $this->drupalGet('node/1');
+    $assert_session->pageTextContains('The DEFAULT block body');
+    $assert_session->pageTextNotContains('Overridden block body');
+    $this->drupalGet('it/node/1');
+    $assert_session->pageTextContains('Overridden block body');
+    $assert_session->pageTextNotContains('The DEFAULT block body');
+  }
+
+  /**
+   * Tests deleting an translated entity with inline block.
+   */
+  public function testDeletingTranslatedEntityWithInlineBlock() {
+    /** @var \Drupal\Core\Cron $cron */
+    $cron = \Drupal::service('cron');
+    /** @var \Drupal\layout_builder\InlineBlockUsage $usage */
+    $usage = \Drupal::service('inline_block.usage');
+
+    $assert_session = $this->assertSession();
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'access contextual links',
+      'configure any layout',
+      'administer node display',
+      'administer node fields',
+      'translate bundle_with_section_field node',
+      'create content translations',
+      'delete content translations',
+    ]));
+
+    // Allow layout overrides.
+    $this->drupalPostForm(
+      static::FIELD_UI_PREFIX . '/display/default',
+      ['layout[enabled]' => TRUE],
+      'Save'
+    );
+    $this->drupalPostForm(
+      static::FIELD_UI_PREFIX . '/display/default',
+      ['layout[allow_custom]' => TRUE],
+      'Save'
+    );
+
+    // Create a translation.
+    $add_translation_url = Url::fromRoute("entity.node.content_translation_add", [
+      'node' => 1,
+      'source' => 'en',
+      'target' => 'it',
+    ]);
+    $this->drupalPostForm($add_translation_url, [
+      'title[0][value]' => 'The translated node title',
+      'body[0][value]' => 'The translated node body',
+    ], 'Save');
+
+    // Override the translated node's layout.
+    $this->drupalGet('it/node/1/layout');
+    $this->addInlineBlockToLayout('Block it title', 'Block it body');
+    $this->assertSaveLayout();
+    $it_block = $this->getLatestBlockEntityId();
+    $this->assertCount(1, $this->blockStorage->loadMultiple());
+
+    // Add an inline block to the original node.
+    $this->drupalGet('node/1/layout');
+    $this->addInlineBlockToLayout('Block en title', 'Block en body');
+    $this->assertSaveLayout();
+    $this->assertCount(2, $this->blockStorage->loadMultiple());
+
+    // Remove the translation.
+    $delete_translation_url = Url::fromRoute('entity.node.content_translation_delete', [
+      'node' => 1,
+      'language' => 'it',
+    ]);
+    $this->drupalGet($delete_translation_url);
+    $this->drupalPostForm(NULL, [], 'Delete Italian translation');
+
+    $cron->run();
+
+    $this->blockStorage->resetCache([$it_block]);
+    $this->assertEmpty($this->blockStorage->load($it_block));
+    $this->assertCount(1, $this->blockStorage->loadMultiple());
+    $this->assertEmpty($usage->getUsage($it_block));
+
+    $this->drupalGet('node/1');
+    $assert_session->pageTextContains('Block en body');
+  }
+
+}
diff --git a/core/modules/layout_builder/tests/src/Unit/OverridesSectionStorageTest.php b/core/modules/layout_builder/tests/src/Unit/OverridesSectionStorageTest.php
index 6ea0c4bc43..5bbbec2ce5 100644
--- a/core/modules/layout_builder/tests/src/Unit/OverridesSectionStorageTest.php
+++ b/core/modules/layout_builder/tests/src/Unit/OverridesSectionStorageTest.php
@@ -3,10 +3,12 @@
 namespace Drupal\Tests\layout_builder\Unit;
 
 use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Entity\EntityRepositoryInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\Core\Entity\TranslatableInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\layout_builder\Plugin\SectionStorage\OverridesSectionStorage;
 use Drupal\layout_builder\SectionStorage\SectionStorageDefinition;
@@ -43,6 +45,13 @@ class OverridesSectionStorageTest extends UnitTestCase {
    */
   protected $entityFieldManager;
 
+  /**
+   * The entity repository.
+   *
+   * @var \Drupal\Core\Entity\EntityRepositoryInterface
+   */
+  protected $entityRepository;
+
   /**
    * {@inheritdoc}
    */
@@ -51,12 +60,13 @@ protected function setUp() {
 
     $this->entityTypeManager = $this->prophesize(EntityTypeManagerInterface::class);
     $this->entityFieldManager = $this->prophesize(EntityFieldManagerInterface::class);
+    $this->entityRepository = $this->prophesize(EntityRepositoryInterface::class);
 
     $definition = new SectionStorageDefinition([
       'id' => 'overrides',
       'class' => OverridesSectionStorage::class,
     ]);
-    $this->plugin = new OverridesSectionStorage([], 'overrides', $definition, $this->entityTypeManager->reveal(), $this->entityFieldManager->reveal());
+    $this->plugin = new OverridesSectionStorage([], 'overrides', $definition, $this->entityTypeManager->reveal(), $this->entityFieldManager->reveal(), $this->entityRepository->reveal());
   }
 
   /**
@@ -116,6 +126,7 @@ public function providerTestExtractIdFromRoute() {
   public function testGetSectionListFromId($success, $expected_entity_type_id, $id) {
     $defaults['the_parameter_name'] = $id;
 
+    $this->entityRepository->getTranslationFromContext(Argument::cetera())->shouldNotBeCalled();
     if ($expected_entity_type_id) {
       $entity_storage = $this->prophesize(EntityStorageInterface::class);
 
@@ -250,6 +261,52 @@ public function providerTestExtractEntityFromRoute() {
     return $data;
   }
 
+  /**
+   * @covers ::getSectionListFromId
+   */
+  public function testGetSectionListFromIdTranslatableNoTranslation() {
+    $entity_storage = $this->prophesize(EntityStorageInterface::class);
+
+    $entity_with_layout = $this->prophesize(FieldableEntityInterface::class)->willImplement(TranslatableInterface::class);
+    $entity_with_layout->hasField('layout_builder__layout')->willReturn(TRUE);
+    $entity_with_layout->get('layout_builder__layout')->willReturn('the_return_value');
+    $entity_storage->load('entity_with_layout')->willReturn($entity_with_layout->reveal());
+
+    $translated_entity = $this->prophesize(FieldableEntityInterface::class)->willImplement(TranslatableInterface::class);
+    $translated_entity->hasField('layout_builder__layout')->willReturn(FALSE);
+    $translated_entity->get('layout_builder__layout')->shouldNotBeCalled();
+
+    $this->entityTypeManager->getStorage('my_entity_type')->willReturn($entity_storage->reveal());
+
+    $this->entityRepository->getTranslationFromContext($entity_with_layout->reveal(), 'fr')->willReturn($translated_entity->reveal());
+
+    $result = $this->plugin->getSectionListFromId('my_entity_type.entity_with_layout.fr');
+    $this->assertEquals('the_return_value', $result);
+  }
+
+  /**
+   * @covers ::getSectionListFromId
+   */
+  public function testGetSectionListFromIdTranslatable() {
+    $entity_storage = $this->prophesize(EntityStorageInterface::class);
+
+    $entity_with_layout = $this->prophesize(FieldableEntityInterface::class)->willImplement(TranslatableInterface::class);
+    $entity_with_layout->hasField('layout_builder__layout')->shouldNotBeCalled();
+    $entity_with_layout->get('layout_builder__layout')->shouldNotBeCalled();
+    $entity_storage->load('entity_with_layout')->willReturn($entity_with_layout->reveal());
+
+    $translated_entity = $this->prophesize(FieldableEntityInterface::class)->willImplement(TranslatableInterface::class);
+    $translated_entity->hasField('layout_builder__layout')->willReturn(TRUE);
+    $translated_entity->get('layout_builder__layout')->willReturn('the_return_value');
+
+    $this->entityTypeManager->getStorage('my_entity_type')->willReturn($entity_storage->reveal());
+
+    $this->entityRepository->getTranslationFromContext($entity_with_layout->reveal(), 'fr')->willReturn($translated_entity->reveal());
+
+    $result = $this->plugin->getSectionListFromId('my_entity_type.entity_with_layout.fr');
+    $this->assertEquals('the_return_value', $result);
+  }
+
   /**
    * @covers ::buildRoutes
    * @covers ::hasIntegerId
