diff --git a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
index d8e71fa7e0..d4798e6a4a 100644
--- a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
+++ b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php
@@ -5,6 +5,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\StringTranslation\TranslatableMarkup;
@@ -172,8 +174,18 @@ public function buildMultiple(array $entities) {
    *   The sections.
    */
   protected function getRuntimeSections(FieldableEntityInterface $entity) {
-    if ($this->isOverridable() && !$entity->get('layout_builder__layout')->isEmpty()) {
-      return $entity->get('layout_builder__layout')->getSections();
+    if ($this->isOverridable() && $entity->hasField('layout_builder__layout')) {
+      if (!$entity->get('layout_builder__layout')->isEmpty()) {
+        return $entity->get('layout_builder__layout')->getSections();
+      }
+
+      // If this is a translation consult the default translation.
+      if ($entity instanceof TranslatableInterface && !$entity->isDefaultTranslation()) {
+        $default_entity = $entity->getTranslation(LanguageInterface::LANGCODE_DEFAULT);
+        if ($default_entity instanceof FieldableEntityInterface && $default_entity->hasField('layout_builder__layout') && !$default_entity->get('layout_builder__layout')->isEmpty()) {
+          return $default_entity->get('layout_builder__layout')->getSections();
+        }
+      }
     }
 
     return $this->getSections();
diff --git a/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php b/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
index ef154f1b2b..d072d60e36 100644
--- a/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
+++ b/core/modules/layout_builder/src/Plugin/SectionStorage/OverridesSectionStorage.php
@@ -3,9 +3,12 @@
 namespace Drupal\layout_builder\Plugin\SectionStorage;
 
 use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Entity\EntityInterface;
+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\Field\FieldItemListInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Plugin\Context\Context;
@@ -53,14 +56,22 @@ class OverridesSectionStorage extends SectionStorageBase implements ContainerFac
    */
   protected $sectionList;
 
+  /**
+   * The entity repository.
+   *
+   * @var \Drupal\Core\Entity\EntityRepositoryInterface
+   */
+  protected $entityRepository;
+
   /**
    * {@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) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->entityTypeManager = $entity_type_manager;
     $this->entityFieldManager = $entity_field_manager;
+    $this->entityRepository = $entity_repository;
   }
 
   /**
@@ -72,7 +83,8 @@ 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')
     );
   }
 
@@ -102,7 +114,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;
   }
 
   /**
@@ -125,8 +141,14 @@ public function extractIdFromRoute($value, $definition, $name, array $defaults)
    */
   public function getSectionListFromId($id) {
     if (strpos($id, '.') !== FALSE) {
-      list($entity_type_id, $entity_id) = explode('.', $id, 2);
+      list($entity_type_id, $entity_id) = explode('.', $id);
       $entity = $this->entityTypeManager->getStorage($entity_type_id)->load($entity_id);
+      if ($entity instanceof EntityInterface && $entity instanceof TranslatableInterface) {
+        $translated_entity = $this->entityRepository->getTranslationFromContext($entity);
+        if ($translated_entity instanceof FieldableEntityInterface && $translated_entity->hasField('layout_builder__layout')) {
+          return $translated_entity->get('layout_builder__layout');
+        }
+      }
       if ($entity instanceof FieldableEntityInterface && $entity->hasField('layout_builder__layout')) {
         return $entity->get('layout_builder__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..4904d45797
--- /dev/null
+++ b/core/modules/layout_builder/tests/src/Functional/LayoutBuilderTranslationTest.php
@@ -0,0 +1,159 @@
+<?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);
+    $this->drupalPostForm('entity_test_mul/structure/entity_test_mul/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()->toString();
+    $layout_url = $entity_url . '/layout';
+    $translated_entity_url = "{$this->langcodes[2]}$entity_url";
+    $translated_layout_url = "{$this->langcodes[2]}$layout_url";
+
+    $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->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');
+  }
+
+}
