diff --git a/core/modules/menu_link_content/migration_templates/d6_i18n_menu_links.yml b/core/modules/menu_link_content/migration_templates/d6_i18n_menu_links.yml
new file mode 100644
index 0000000..5d172e0
--- /dev/null
+++ b/core/modules/menu_link_content/migration_templates/d6_i18n_menu_links.yml
@@ -0,0 +1,37 @@
+id: d6_i18n_menu_links
+label: Menu links
+migration_tags:
+  - Drupal 6
+source:
+  plugin: d6_i18n_menu_link
+process:
+  id: mlid
+  langcode: language
+  title: title
+  description: description
+  menu_name:
+    -
+      plugin: migration
+      # The menu migration is in the system module.
+      migration: menu
+      source: menu_name
+    -
+      plugin: static_map
+      map:
+        management: admin
+      bypass: true
+  'link/uri':
+    plugin: link_uri
+    source:
+      - link_path
+  'link/options': options
+destination:
+  plugin: entity:menu_link_content
+  default_bundle: menu_link_content
+  no_stub: true
+  translations: true
+migration_dependencies:
+  required:
+    - language
+    - d6_menu
+    - d6_menu_links
diff --git a/core/modules/menu_link_content/src/Plugin/migrate/source/d6/I18nMenuLink.php b/core/modules/menu_link_content/src/Plugin/migrate/source/d6/I18nMenuLink.php
new file mode 100644
index 0000000..46037f6
--- /dev/null
+++ b/core/modules/menu_link_content/src/Plugin/migrate/source/d6/I18nMenuLink.php
@@ -0,0 +1,116 @@
+<?php
+
+namespace Drupal\menu_link_content\Plugin\migrate\source\d6;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Gets Menu link translations from source database.
+ *
+ * @MigrateSource(
+ *   id = "d6_i18n_menu_link",
+ *   source_provider = "i18n"
+ * )
+ */
+class I18nMenuLink extends DrupalSqlBase {
+
+  const TITLE = "CASE WHEN property = 'title' THEN translation ELSE link_title END";
+  const DESCRIPTION = "CASE WHEN property = 'description' THEN translation END";
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function initializeIterator() {
+    return new \ArrayIterator($this->values());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function count() {
+    return $this->initializeIterator()->count();
+  }
+
+  /**
+   * Returns the menu link translation values.
+   *
+   * @return array
+   *   Each result is an associative array where the values are the menu IDs
+   *   and the translations for the title and description, if available. If not
+   *   available then the default language values are used.
+   */
+  protected function values() {
+    $values = [];
+    $result = $this->prepareQuery()->execute()->fetchAll();
+    $cnt = count($result);
+    for ($i = 0; $i < $cnt; $i++) {
+      if (isset($result[$i])) {
+        if ($result[$i]['description'] == NULL) {
+          // Check next result for the description value.
+          $j = $i + 1;
+          if (isset($result[$j])) {
+            // If the same menu_link, then this is a description translation.
+            if ($result[$i]['mlid'] == $result[$j]['mlid'] &&
+              $result[$i]['language'] == $result[$j]['language']) {
+              if ($result[$j]['description'] != NULL) {
+                $result[$i]['description'] = $result[$j]['description'];
+                unset($result[$j]);
+              }
+            }
+            else {
+              // Get the description fom the options array.
+              $tmp = unserialize($result[$i]['options']);
+              $result[$i]['description'] = Unicode::truncate($tmp['attributes']['title'], 255);
+            }
+          }
+        }
+        $values[] = $result[$i];
+      }
+    }
+    return $values;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = $this->select('menu_links', 'ml')
+      ->fields('ml', ['mlid', 'link_path', 'options'])
+      ->fields('i18n', ['objectid'])
+      ->fields('lt', ['language'])
+      ->condition('i18n.type', 'item')
+      ->condition('ml.module', 'menu')
+      ->orderBy('mlid', 'language', 'title');
+    $query->addExpression(self::TITLE, 'title');
+    $query->addExpression(self::DESCRIPTION, 'description');
+    $query->addField('lt', 'lid', 'lt.lid');
+    $query->Join('i18n_strings', 'i18n', 'i18n.objectid = ml.mlid');
+    $query->leftJoin('locales_target', 'lt', 'lt.lid = i18n.lid');
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array(
+      'mlid' => t('The menu link ID.'),
+      'language' => $this->t('Language for this menu.'),
+      'title' => $this->t('Menu link title.'),
+      'description' => $this->t('Menu link description.'),
+      'link_path' => t('The Drupal path or external path this link points to.'),
+      'options' => t('A serialized array of options to set on the URL, such as a query string or HTML attributes.'),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['mlid']['type'] = 'integer';
+    $ids['language']['type'] = 'string';
+    return $ids;
+  }
+
+}
diff --git a/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateI18nMenuLinkTest.php b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateI18nMenuLinkTest.php
new file mode 100644
index 0000000..b3620c3
--- /dev/null
+++ b/core/modules/menu_link_content/tests/src/Kernel/Migrate/d6/MigrateI18nMenuLinkTest.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Drupal\Tests\menu_link_content\Kernel\Migrate\d6;
+
+use Drupal\menu_link_content\Entity\MenuLinkContent;
+use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
+
+/**
+ * Menu link migration.
+ *
+ * @group migrate_drupal_6
+ */
+class MigrateI18nMenuLinkTest extends MigrateDrupal6TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['menu_ui', 'menu_link_content', 'language'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installSchema('system', ['router']);
+    $this->installEntitySchema('menu_link_content');
+    $this->executeMigrations([
+      'language',
+      'd6_menu',
+      'd6_menu_links',
+      'd6_i18n_menu_links',
+    ]);
+  }
+
+  /**
+   * Tests migration of menu links.
+   */
+  public function testMenuLinks() {
+    $menu_link = MenuLinkContent::load(139)->getTranslation('fr');
+    $this->assertTrue(TRUE);
+
+    $this->assertSame('fr - Test 2', $menu_link->getTitle());
+    $this->assertSame('fr - Test menu link 2', $menu_link->getDescription());
+    $this->assertSame('secondary-links', $menu_link->getMenuName());
+    $this->assertSame(TRUE, $menu_link->isEnabled());
+    $this->assertSame(TRUE, $menu_link->isExpanded());
+    $this->assertSame(['query' => 'foo=bar', 'attributes' => ['title' => 'Test menu link 2']], $menu_link->link->options);
+    $this->assertSame('internal:/admin', $menu_link->link->uri);
+    $this->assertSame(-49, $menu_link->getWeight());
+
+    $menu_link = MenuLinkContent::load(139)->getTranslation('zu');
+    $this->assertSame('Test 2', $menu_link->getTitle());
+    $this->assertSame('zu - Test menu link 2', $menu_link->getDescription());
+    $this->assertSame('secondary-links', $menu_link->getMenuName());
+    $this->assertSame(TRUE, $menu_link->isEnabled());
+    $this->assertSame(TRUE, $menu_link->isExpanded());
+    $this->assertSame(['query' => 'foo=bar', 'attributes' => ['title' => 'Test menu link 2']], $menu_link->link->options);
+    $this->assertSame('internal:/admin', $menu_link->link->uri);
+    $this->assertSame(-49, $menu_link->getWeight());
+
+    $menu_link = MenuLinkContent::load(140)->getTranslation('fr');
+    $this->assertSame('fr - Drupal.org', $menu_link->getTitle());
+    $this->assertNull($menu_link->getDescription());
+    $this->assertSame('secondary-links', $menu_link->getMenuName());
+    $this->assertSame(TRUE, $menu_link->isEnabled());
+    $this->assertSame(FALSE, $menu_link->isExpanded());
+    $this->assertSame(['attributes' => ['title' => '']], $menu_link->link->options);
+    $this->assertSame('https://www.drupal.org', $menu_link->link->uri);
+    $this->assertSame(-50, $menu_link->getWeight());
+  }
+
+}
diff --git a/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/source/d6/I18nMenuLinkSourceTest.php b/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/source/d6/I18nMenuLinkSourceTest.php
new file mode 100644
index 0000000..1f1db20
--- /dev/null
+++ b/core/modules/menu_link_content/tests/src/Kernel/Plugin/migrate/source/d6/I18nMenuLinkSourceTest.php
@@ -0,0 +1,162 @@
+<?php
+
+namespace Drupal\Tests\menu_link_content\Kernel\Plugin\migrate\source\d6;
+
+use Drupal\Tests\migrate\Kernel\MigrateSqlSourceTestBase;
+
+/**
+ * Tests i18n menu link source plugin.
+ *
+ * @covers \Drupal\menu_link_content\Plugin\migrate\source\d6\I18nMenuLink
+ * @group config_translation
+ */
+class I18nMenuLinkSourceTest extends MigrateSqlSourceTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['menu_link_content', 'migrate_drupal'];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function providerSource() {
+    $test = [];
+    $test[0]['source_data']['menu_links'] = [
+      [
+        'menu_name' => 'menu-test-menu',
+        'mlid' => 138,
+        'plid' => 0,
+        'link_path' => 'admin',
+        'router_path' => 'admin',
+        'link_title' => 'Test 1',
+        'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:16:"Test menu link 1";}}',
+        'module' => 'menu',
+        'hidden' => 0,
+        'external' => 0,
+        'has_children' => 1,
+        'expanded' => 0,
+        'weight' => 15,
+        'depth' => 1,
+        'customized' => 1,
+        'p1' => '138',
+        'p2' => '0',
+        'p3' => '0',
+        'p4' => '0',
+        'p5' => '0',
+        'p6' => '0',
+        'p7' => '0',
+        'p8' => '0',
+        'p9' => '0',
+        'updated' => '0',
+        'description' => 'Test menu link 1',
+      ],
+      [
+        'menu_name' => 'menu-test-menu',
+        'mlid' => 139,
+        'plid' => 138,
+        'link_path' => 'admin/modules',
+        'router_path' => 'admin/modules',
+        'link_title' => 'Test 2',
+        'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:16:"Test menu link 2";}}',
+        'module' => 'menu',
+        'hidden' => 0,
+        'external' => 0,
+        'has_children' => 0,
+        'expanded' => 0,
+        'weight' => 12,
+        'depth' => 2,
+        'customized' => 1,
+        'p1' => '138',
+        'p2' => '139',
+        'p3' => '0',
+        'p4' => '0',
+        'p5' => '0',
+        'p6' => '0',
+        'p7' => '0',
+        'p8' => '0',
+        'p9' => '0',
+        'updated' => '0',
+        'description' => 'Test menu link 2',
+      ],
+    ];
+    $test[0]['source_data']['i18n_strings'] = [
+      [
+        'lid' => 1,
+        'objectid' => 139,
+        'type' => 'item',
+        'property' => 'title',
+        'objectindex' => 0,
+        'format' => 0,
+      ],
+      [
+        'lid' => 2,
+        'objectid' => 139,
+        'type' => 'item',
+        'property' => 'description',
+        'objectindex' => 0,
+        'format' => 0,
+      ],
+      [
+        'lid' => 3,
+        'objectid' => 138,
+        'type' => 'item',
+        'property' => 'description',
+        'objectindex' => 0,
+        'format' => 0,
+      ]
+    ];
+    $test[0]['source_data']['locales_target'] = [
+      [
+        'lid' => 1,
+        'language' => 'fr',
+        'translation' => 'fr - title translation',
+        'plid' => 0,
+        'plural' => 0,
+        'u18n_status' => 0,
+      ],
+      [
+        'lid' => 2,
+        'language' => 'fr',
+        'translation' => 'fr - description translation',
+        'plid' => 0,
+        'plural' => 0,
+        'u18n_status' => 0,
+      ],
+      [
+        'lid' => 3,
+        'language' => 'zu',
+        'translation' => 'zu - description translation',
+        'plid' => 0,
+        'plural' => 0,
+        'u18n_status' => 0,
+      ],
+    ];
+
+    $test[0]['expected_results'] = [
+      [
+        'mlid' => 138,
+        'link_path' => 'admin',
+        'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:16:"Test menu link 1";}}',
+        'objectid' => 138,
+        'language' => 'zu',
+        'ltlid' => 3,
+        'title' => 'Test 1',
+        'description' => 'zu - description translation',
+      ],
+      [
+        'mlid' => 139,
+        'link_path' => 'admin/modules',
+        'options' => 'a:1:{s:10:"attributes";a:1:{s:5:"title";s:16:"Test menu link 2";}}',
+        'objectid' => 139,
+        'language' => 'fr',
+        'ltlid' => 1,
+        'title' => 'fr - title translation',
+        'description' => 'fr - description translation',
+      ],
+    ];
+
+    return $test;
+  }
+
+}
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
index 212a044..921c64f 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
@@ -318,6 +318,10 @@ class MigrateUpgradeForm extends ConfirmFormBase {
       'source_module' => 'menu',
       'destination_module' => 'menu_link_content',
     ],
+    'd6_i18n_menu_links' => [
+      'source_module' => 'i18n',
+      'destination_module' => 'menu_link_content',
+    ],
     'menu_settings' => [
       'source_module' => 'menu',
       'destination_module' => 'menu_ui',
