diff --git a/core/modules/path/src/Plugin/Validation/Constraint/PathAliasConstraintValidator.php b/core/modules/path/src/Plugin/Validation/Constraint/PathAliasConstraintValidator.php
index e6771f76d2..ce06418b6b 100644
--- a/core/modules/path/src/Plugin/Validation/Constraint/PathAliasConstraintValidator.php
+++ b/core/modules/path/src/Plugin/Validation/Constraint/PathAliasConstraintValidator.php
@@ -47,7 +47,7 @@ public function validate($value, Constraint $constraint) {
 
     if ($entity && !$entity->isNew() && !$entity->isDefaultRevision()) {
       /** @var \Drupal\Core\Entity\ContentEntityInterface $original */
-      $original = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id());
+      $original = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id())->getTranslation($entity->language()->getId());
       if ($value->alias != $original->path->alias) {
         $this->context->addViolation($constraint->message);
       }
diff --git a/core/modules/path/tests/src/Functional/PathContentModerationLanguageTest.php b/core/modules/path/tests/src/Functional/PathContentModerationLanguageTest.php
new file mode 100644
index 0000000000..b33f322b7b
--- /dev/null
+++ b/core/modules/path/tests/src/Functional/PathContentModerationLanguageTest.php
@@ -0,0 +1,229 @@
+<?php
+
+namespace Drupal\Tests\path\Functional;
+
+use Drupal\workflows\Entity\Workflow;
+
+/**
+ * Tests path aliases with Content Moderation.
+ *
+ * @group content_moderation
+ * @group path
+ */
+class PathContentModerationLanguageTest extends PathTestBase {
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = ['node', 'path', 'locale', 'content_translation', 'content_moderation'];
+
+  /**
+   * An user with permissions to administer content types.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $webUser;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $permissions = [
+      'access administration pages',
+      'administer content translation',
+      'administer content types',
+      'administer languages',
+      'administer url aliases',
+      'create content translations',
+      'create page content',
+      'create url aliases',
+      'edit any page content',
+      'translate any entity',
+      'create content translations',
+      'update content translations',
+      'administer workflows',
+      'view any unpublished content',
+      'view latest version',
+      'use editorial transition archive',
+      'use editorial transition create_new_draft',
+      'use editorial transition publish',
+      'use editorial transition archived_published',
+      'use editorial transition archived_draft'
+    ];
+
+    // Create and log in user.
+    $this->webUser = $this->drupalCreateUser($permissions);
+    $this->drupalLogin($this->webUser);
+
+    // Enable French language.
+    $edit = [];
+    $edit['predefined_langcode'] = 'fr';
+    $this->drupalPostForm('admin/config/regional/language/add', $edit, 'Add language');
+
+    // Enable URL language detection and selection.
+    $edit = ['language_interface[enabled][language-url]' => 1];
+    $this->drupalPostForm('admin/config/regional/language/detection', $edit, 'op');
+
+
+    // Set the content type as page.
+    $workflow = Workflow::load('editorial');
+    $workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'page');
+    $workflow->save();
+
+    // Enable translation for page node.
+    $edit = [
+      'entity_types[node]' => 1,
+      'settings[node][page][translatable]' => 1,
+      'settings[node][page][fields][status]' => 1,
+      'settings[node][page][fields][path]' => 1,
+      'settings[node][page][fields][body]' => 1,
+      'settings[node][page][fields][moderation_state]' => 1,
+      'settings[node][page][settings][language][language_alterable]' => 1,
+    ];
+    $this->drupalPostForm('admin/config/regional/content-language', $edit, t('Save configuration'));
+    \Drupal::service('entity.manager')->clearCachedDefinitions();
+
+    $definitions = \Drupal::service('entity.manager')
+      ->getFieldDefinitions('node', 'page');
+    $this->assertTrue($definitions['path']->isTranslatable(), 'Node path is translatable.');
+    $this->assertTrue($definitions['body']->isTranslatable(), 'Node body is translatable.');
+    $this->assertTrue($definitions['status']->isTranslatable(), 'Node status is translatable.');
+    $this->assertTrue($definitions['moderation_state']->isTranslatable(), 'Node moderation state is translatable.');
+
+
+  }
+
+  /**
+   * Tests node path aliases on a page content type.
+   */
+  public function testNodePathAlias() {
+    // Create some a page content in english with a path alias.
+    $this->drupalGet('node/add/page');
+    $this->assertSession()->fieldValueEquals('path[0][alias]', '');
+    $this->drupalPostForm(NULL, [
+      'title[0][value]' => 'page content english',
+      'path[0][alias]' => '/page-content-english',
+      'langcode[0][value]' => 'en',
+      'moderation_state[0][state]' => 'published',
+    ], 'edit-submit');
+
+    $node = $this->getNodeByTitle('page content english');
+
+    // Verify the english alias works.
+    $this->drupalGet('page-content-english');
+    $this->assertSession()->statusCodeNotEquals(404);
+    $this->assertSession()
+      ->pageTextContains('page content english');
+
+    // Translate the node into French.
+    $this->drupalGet('node/' . $node->id() . '/translations/add/en/fr');
+
+    $this->drupalPostForm(NULL, [
+      'title[0][value]' => 'contenu modéré français',
+      'path[0][alias]' => '/contenu-modere-francais',
+      'moderation_state[0][state]' => 'published',
+    ], 'edit-submit');
+    $this->assertSession()
+      ->pageTextNotContains('You can only change the URL alias for the published version of this content.');
+
+    // Verify the french alias works.
+    $this->drupalGet('fr/contenu-modere-francais');
+    $this->assertSession()->statusCodeEquals(200);
+
+
+    // Create a new draft in french content without change alias
+    $this->drupalGet('fr/node/' . $node->id() . '/edit');
+    $this->assertSession()
+      ->fieldValueEquals('path[0][alias]', '/contenu-modere-francais');
+    $this->drupalPostForm(NULL, [
+      'title[0][value]' => 'nouveau brouillon modéré français',
+      'path[0][alias]' => '/contenu-modere-francais',
+      'moderation_state[0][state]' => 'draft',
+    ], 'edit-submit');
+    $this->assertSession()
+      ->pageTextNotContains('You can only change the URL alias for the published version of this content.');
+
+
+    // Verify the french alias always works.
+    $this->drupalGet('fr/contenu-modere-francais');
+    $this->assertSession()->statusCodeEquals(200);
+    $this->assertSession()
+      ->pageTextContains('contenu modéré français');
+
+    // Add a new published revision in french with a different alias
+    $this->drupalGet('fr/node/' . $node->id() . '/edit');
+    $this->assertSession()
+      ->fieldValueEquals('path[0][alias]', '/contenu-modere-francais');
+    $this->drupalPostForm(NULL, [
+      'title[0][value]' => 'nouveau contenu français',
+      'path[0][alias]' => '/nouveau-contenu-francais',
+      'moderation_state[0][state]' => 'published',
+    ], 'edit-submit');
+    $this->assertSession()
+      ->pageTextNotContains('You can only change the URL alias for the published version of this content.');
+
+    // Add a pending revision in english with the same alias.
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    // We verify the french alias hasn't replace the english alias.
+    $this->assertSession()
+      ->fieldValueEquals('path[0][alias]', '/page-content-english');
+    $this->drupalPostForm(NULL, [
+      'title[0][value]' => 'pending revision english',
+      'path[0][alias]' => '/page-content-english',
+      'langcode[0][value]' => 'en',
+      'moderation_state[0][state]' => 'draft',
+    ], 'edit-submit');
+    $this->assertSession()
+      ->pageTextNotContains('You can only change the URL alias for the published version of this content.');
+
+    // Add a pending revision in english with a different alias
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $this->assertSession()
+      ->fieldValueEquals('path[0][alias]', '/page-content-english');
+    $this->drupalPostForm(NULL, [
+      'title[0][value]' => 'pending revision english',
+      'path[0][alias]' => '/pending-revision-english',
+      'moderation_state[0][state]' => 'draft',
+    ], 'edit-submit');
+    $this->assertSession()
+      ->pageTextContains('You can only change the URL alias for the published version of this content.');
+
+    // Add new published revision in english with a different alias
+    $this->drupalGet('node/' . $node->id() . '/edit');
+    $this->assertSession()
+      ->fieldValueEquals('path[0][alias]', '/page-content-english');
+    $this->drupalPostForm(NULL, [
+      'title[0][value]' => 'new content english',
+      'path[0][alias]' => '/new-content-english',
+      'moderation_state[0][state]' => 'published',
+    ], 'edit-submit');
+    $this->assertSession()
+      ->pageTextNotContains('You can only change the URL alias for the published version of this content.');
+
+    // Verify the new french alias works.
+    $this->drupalGet('fr/nouveau-contenu-francais');
+    $this->assertSession()
+      ->pageTextContains('nouveau contenu français');
+
+    // Verify the old french alias no longer works.
+    $this->drupalGet('fr/contenu-modere-francais');
+    $this->assertSession()
+      ->statusCodeEquals(404);
+
+    // Verify the new english alias works.
+    $this->drupalGet('new-content-english');
+    $this->assertSession()
+      ->statusCodeEquals(200);
+    $this->assertSession()
+      ->pageTextContains('new content english');
+
+    // Verify the old english alias no longer works.
+    $this->drupalGet('page-content-english');
+    $this->assertSession()
+      ->statusCodeEquals(404);
+  }
+}
