diff --git a/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php b/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php
index 747c1fd..577675a 100644
--- a/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php
+++ b/core/modules/menu_link_content/src/Form/MenuLinkContentForm.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Menu\MenuParentFormSelectorInterface;
 use Drupal\Core\Path\PathValidatorInterface;
+use Drupal\Core\Url;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -28,6 +29,13 @@ class MenuLinkContentForm extends ContentEntityForm {
   protected $entity;
 
   /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $language_manager;
+
+  /**
    * The parent form selector service.
    *
    * @var \Drupal\Core\Menu\MenuParentFormSelectorInterface
@@ -57,6 +65,7 @@ public function __construct(EntityManagerInterface $entity_manager, MenuParentFo
     parent::__construct($entity_manager, $language_manager);
     $this->menuParentSelector = $menu_parent_selector;
     $this->pathValidator = $path_validator;
+    $this->language_manager = $language_manager;
   }
 
   /**
@@ -91,6 +100,52 @@ public function form(array $form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
+  public function validateForm(array &$form, FormStateInterface $form_state) {
+    parent::validateForm($form, $form_state);
+
+    // If the URL is internal, we want to check that the link will resolve in a
+    // way the user expects. Only check this if the link field is not already
+    // marked as having an error (for example an invalid link).
+    if (!$form_state->getError($form['link']['widget'][0]['uri'])) {
+      $link_uri = $form_state->getValue('link')[0]['uri'];
+      $language = $this->language_manager->getLanguage($form_state->getValue('langcode')[0]['value']);
+      $link_url = Url::fromUri($link_uri, [
+        'language' => $language,
+      ]);
+      if (!$link_url->isExternal()) {
+        // Find the user input and validate that no URL negotiator will end up
+        // changing this URL to something else. For example if a user is
+        // entering a URL with a language prefix.
+        $user_input = $form_state->getUserInput();
+        $user_link = $user_input['link'][0]['uri'];
+        // Create a URL object from that.
+        $user_url = $this->pathValidator
+          ->getUrlIfValid($user_link);
+        if ($user_url) {
+          // If the user entered the special case "<front>" we must allow this
+          // to not correspond to what Drupal thinks the URL is.
+          if ($user_link == '<front>') {
+            // Need to append the '/' for comparison.
+            $user_link = $this->getRequest()->getBasePath() . '/';
+          }
+          // Compare the generated link from what Drupal thinks this is. We want
+          // to do this without language prefixes, if applicable. We also strip
+          // the fragments and query parameters, because those can confuse path
+          // resolving, and make for false errors.
+          $user_url->setOptions(['language' => $this->language_manager->getDefaultLanguage()]);
+          // Also, we want to allow the user to enter an aliased or non-aliased
+          // path.
+          if (strpos($user_link, $user_url->toString()) != 0 && strpos($user_link, \Drupal::service('path.alias_manager')->getPathByAlias($user_url->toString())) != 0) {
+            $form_state->setErrorByName('link', $this->t('The link you entered is not valid'));
+          }
+        }
+      }
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   protected function actions(array $form, FormStateInterface $form_state) {
     $element = parent::actions($form, $form_state);
     $element['submit']['#button_type'] = 'primary';
diff --git a/core/modules/menu_link_content/src/Tests/MenuLinkContentTranslationUITest.php b/core/modules/menu_link_content/src/Tests/MenuLinkContentTranslationUITest.php
index 1404384..7df0f28 100644
--- a/core/modules/menu_link_content/src/Tests/MenuLinkContentTranslationUITest.php
+++ b/core/modules/menu_link_content/src/Tests/MenuLinkContentTranslationUITest.php
@@ -100,6 +100,22 @@ function testTranslationLinkTheme() {
   }
 
   /**
+   * Tests that linking to another language prefixed path triggers an error.
+   */
+  function testMenuLinkLanguagePrefixValidation() {
+    $this->drupalLogin($this->administrator);
+
+    // Add a menu link in the tools menu.
+    $edit = array(
+      'title[0][value]' => 'Invalid link with language prefix',
+      // Link to the italian front page. Should not be allowed.
+      'link[0][uri]' => '/it/admin/structure/menu',
+    );
+    $this->drupalPostForm('admin/structure/menu/manage/tools/add', $edit, t('Save'));
+    $this->assertRaw(t('The link you entered is not valid'));
+  }
+
+  /**
    * {@inheritdoc}
    */
   protected function doTestTranslationEdit() {
