diff --git a/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php b/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php
index bb59f50..794e213 100644
--- a/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php
+++ b/core/modules/block/tests/src/Kernel/Migrate/d6/MigrateBlockTest.php
@@ -95,7 +95,7 @@ public function assertEntity($id, $visibility, $region, $theme, $weight, array $
    */
   public function testBlockMigration() {
     $blocks = Block::loadMultiple();
-    $this->assertCount(14, $blocks);
+    $this->assertCount(15, $blocks);
 
     // Check user blocks.
     $visibility = [
@@ -116,9 +116,9 @@ public function testBlockMigration() {
     $visibility = [];
     $settings = [
       'id' => 'system_menu_block',
-      'label' => '',
+      'label' => 'zu - Test Title 02',
       'provider' => 'system',
-      'label_display' => '0',
+      'label_display' => 'visible',
       'level' => 1,
       'depth' => 0,
     ];
@@ -200,7 +200,7 @@ public function testBlockMigration() {
       'block_count' => 7,
       'feed' => '5',
     ];
-    $this->assertEntity('aggregator', [], 'sidebar_second', 'bartik', -2, $settings);
+    $this->assertEntity('aggregator', [], 'sidebar_second', 'bartik', -8, $settings);
 
     // Check book block.
     $settings = [
@@ -210,7 +210,7 @@ public function testBlockMigration() {
       'label_display' => '0',
       'block_mode' => 'book pages',
     ];
-    $this->assertEntity('book', [], 'sidebar_second', 'bartik', -4, $settings);
+    $this->assertEntity('book', [], 'sidebar_second', 'bartik', -9, $settings);
 
     // Check forum block settings.
     $settings = [
@@ -247,7 +247,7 @@ public function testBlockMigration() {
       'top_all_num' => 8,
       'top_last_num' => 9,
     ];
-    $this->assertEntity('statistics', [], 'sidebar_second', 'bartik', 0, $settings);
+    $this->assertEntity('statistics', [], 'sidebar_second', 'bartik', -7, $settings);
 
     // Check custom blocks.
     $visibility = [
diff --git a/core/modules/content_translation/migrations/d6_block_translation.yml b/core/modules/content_translation/migrations/d6_block_translation.yml
new file mode 100644
index 0000000..7ba6a4b
--- /dev/null
+++ b/core/modules/content_translation/migrations/d6_block_translation.yml
@@ -0,0 +1,68 @@
+id: d6_block_translation
+label: Block translations
+migration_tags:
+  - Drupal 6
+source:
+  plugin: d6_block_translation
+  constants:
+    dest_label: 'settings/label'
+process:
+  langcode: language
+  property: constants/dest_label
+  translation: title
+  id:
+    -
+      plugin: migration_lookup
+      migration: d6_block
+      source:
+        - module
+        - delta
+    -
+      plugin: skip_on_empty
+      method: row
+  plugin:
+    -
+      plugin: static_map
+      bypass: true
+      source:
+        - module
+        - delta
+      map:
+        book:
+          0: book_navigation
+        comment:
+          0: views_block:comments_recent-block_1
+        forum:
+          0: forum_active_block
+          1: forum_new_block
+        locale:
+          0: language_block
+        node:
+          0: node_syndicate_block
+        search:
+          0: search_form_block
+        statistics:
+          0: statistics_popular_block
+        system:
+          0: system_powered_by_block
+        user:
+          0: user_login_block
+          1: system_menu_block:tools
+          2: views_block:who_s_new-block_1
+          3: views_block:who_s_online-who_s_online_block
+    -
+      plugin: block_plugin_id
+    -
+      plugin: skip_on_empty
+      method: row
+  theme:
+    plugin: block_theme
+    source:
+      - theme
+      - default_theme
+      - admin_theme
+destination:
+  plugin: entity:block
+migration_dependencies:
+  required:
+    - d6_block
diff --git a/core/modules/content_translation/src/Plugin/migrate/source/d6/BlockTranslation.php b/core/modules/content_translation/src/Plugin/migrate/source/d6/BlockTranslation.php
new file mode 100644
index 0000000..03e30f2
--- /dev/null
+++ b/core/modules/content_translation/src/Plugin/migrate/source/d6/BlockTranslation.php
@@ -0,0 +1,54 @@
+<?php
+
+namespace Drupal\content_translation\Plugin\migrate\source\d6;
+
+use Drupal\block\Plugin\migrate\source\Block;
+
+/**
+ * Gets i18n block data from source database.
+ *
+ * @MigrateSource(
+ *   id = "d6_block_translation",
+ *   source_module = "i18nblocks"
+ * )
+ */
+class BlockTranslation extends Block {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    // Let the parent set the block table to use, but do not use the parent
+    // query. Instead build a query so can use a left join to the selected block
+    // table.
+    parent::query();
+    $query = $this->select('i18n_blocks', 'i18n')
+      ->fields('i18n', ['ibid', 'module', 'delta', 'type', 'language'])
+      ->fields('b', ['bid', 'module', 'delta', 'theme', 'title']);
+    $query->addField('b', 'module', 'block_module');
+    $query->addField('b', 'delta', 'block_delta');
+    $query->innerJoin($this->blockTable, 'b', ('b.module = i18n.module AND b.delta = i18n.delta'));
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    $fields = parent::fields();
+    $fields['language'] = $this->t('Language for this field.');
+    return $fields;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids = parent::getIds();
+    $ids['module']['alias'] = 'b';
+    $ids['delta']['alias'] = 'b';
+    $ids['language']['type'] = 'string';
+    return $ids;
+  }
+
+}
diff --git a/core/modules/content_translation/tests/src/Kernel/Migrate/d6/MigrateBlockContentTranslationTest.php b/core/modules/content_translation/tests/src/Kernel/Migrate/d6/MigrateBlockContentTranslationTest.php
new file mode 100644
index 0000000..42797a0
--- /dev/null
+++ b/core/modules/content_translation/tests/src/Kernel/Migrate/d6/MigrateBlockContentTranslationTest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\Tests\content_translation\Kernel\Migrate\d6;
+
+use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase;
+
+/**
+ * Tests migration of i18n block translations.
+ *
+ * @group migrate_drupal_6
+ */
+class MigrateBlockContentTranslationTest extends MigrateDrupal6TestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'aggregator',
+    'book',
+    'block',
+    'comment',
+    'forum',
+    'views',
+    'block_content',
+    'content_translation',
+    'language',
+    'statistics',
+    'taxonomy',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installConfig(['block']);
+    $this->installConfig(['block_content']);
+    $this->installEntitySchema('block_content');
+
+    $this->executeMigrations([
+      'd6_filter_format',
+      'block_content_type',
+      'block_content_body_field',
+      'd6_custom_block',
+      'd6_user_role',
+      'd6_block',
+      'd6_block_translation',
+    ]);
+    block_rebuild();
+  }
+
+  /**
+   * Tests the migration of block title translation.
+   */
+  public function testBlockContentTranslation() {
+    /** @var \Drupal\language\ConfigurableLanguageManagerInterface $language_manager */
+    $language_manager = $this->container->get('language_manager');
+
+    $config = $language_manager->getLanguageConfigOverride('zu', 'block.block.user_1');
+    $this->assertSame('zu - Test Title 02', $config->get('settings.label'));
+
+    $config = $language_manager->getLanguageConfigOverride('fr', 'block.block.menu_1');
+    $this->assertSame('fr - Secondary links title', $config->get('settings.label'));
+  }
+
+}
diff --git a/core/modules/content_translation/tests/src/Kernel/Plugin/migrate/source/d6/BlockTranslationTest.php b/core/modules/content_translation/tests/src/Kernel/Plugin/migrate/source/d6/BlockTranslationTest.php
new file mode 100644
index 0000000..4a0e893
--- /dev/null
+++ b/core/modules/content_translation/tests/src/Kernel/Plugin/migrate/source/d6/BlockTranslationTest.php
@@ -0,0 +1,72 @@
+<?php
+
+namespace Drupal\Tests\content_translation\Kernel\Plugin\migrate\source\d6;
+
+use Drupal\Tests\block\Kernel\Plugin\migrate\source\BlockTest;
+
+/**
+ * Tests i18n block source plugin.
+ *
+ * @covers \Drupal\content_translation\Plugin\migrate\source\d6\BlockTranslation
+ *
+ * @group content_translation
+ */
+class BlockTranslationTest extends BlockTest {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['content_translation'];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function providerSource() {
+    // Test data is the same as BlockTest, but with the addition of i18n_blocks.
+    $tests = parent::providerSource();
+
+    // The source data.
+    $tests[0]['source_data']['i18n_blocks'] = [
+      [
+        'ibid' => 1,
+        'module' => 'block',
+        'delta' => '1',
+        'type' => 0,
+        'language' => 'fr',
+      ],
+      [
+        'ibid' => 2,
+        'module' => 'block',
+        'delta' => '2',
+        'type' => 0,
+        'language' => 'zu',
+      ],
+    ];
+
+    // The expected results.
+    $tests[0]['expected_data'] = [
+      [
+        'bid' => 1,
+        'module' => 'block',
+        'delta' => '1',
+        'title' => 'Test Title 01',
+        'ibid' => 1,
+        'type' => '0',
+        'language' => 'fr',
+      ],
+      [
+        'bid' => 2,
+        'module' => 'block',
+        'delta' => '2',
+        'theme' => 'garland',
+        'title' => 'Test Title 02',
+        'ibid' => 2,
+        'type' => '0',
+        'language' => 'zu',
+      ],
+    ];
+
+    return $tests;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal6.php b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
index 0a62057..52a8bce 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal6.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal6.php
@@ -746,7 +746,7 @@
   'throttle' => '0',
   'visibility' => '0',
   'pages' => '',
-  'title' => '',
+  'title' => 'zu - Test Title 02',
   'cache' => '-1',
 ))
 ->values(array(
@@ -920,7 +920,7 @@
   'delta' => 'feed-5',
   'theme' => 'garland',
   'status' => '1',
-  'weight' => '-2',
+  'weight' => '-8',
   'region' => 'right',
   'custom' => '0',
   'throttle' => '0',
@@ -1010,7 +1010,7 @@
   'delta' => '0',
   'theme' => 'garland',
   'status' => '1',
-  'weight' => '-4',
+  'weight' => '-9',
   'region' => 'right',
   'custom' => '0',
   'throttle' => '0',
@@ -1070,7 +1070,7 @@
   'delta' => '0',
   'theme' => 'garland',
   'status' => '1',
-  'weight' => '0',
+  'weight' => '-7',
   'region' => 'right',
   'custom' => '0',
   'throttle' => '0',
@@ -1079,6 +1079,21 @@
   'title' => '',
   'cache' => '-1',
 ))
+->values(array(
+  'bid' => '27',
+  'module' => 'menu',
+  'delta' => 'menu-fr-secondary-links',
+  'theme' => 'garland',
+  'status' => '1',
+  'weight' => '0',
+  'region' => 'right',
+  'custom' => '0',
+  'throttle' => '0',
+  'visibility' => '0',
+  'pages' => '',
+  'title' => 'fr - Secondary links title',
+  'cache' => '-1',
+))
 ->execute();
 
 $connection->schema()->createTable('blocks_roles', array(
@@ -8530,6 +8545,44 @@
   'mysql_character_set' => 'utf8',
 ));
 
+$connection->insert('i18n_blocks')
+->fields(array(
+  'ibid',
+  'module',
+  'delta',
+  'type',
+  'language',
+))
+->values(array(
+  'ibid' => '1',
+  'module' => 'user',
+  'delta' => '1',
+  'type' => '0',
+  'language' => 'zu',
+))
+->values(array(
+  'ibid' => '2',
+  'module' => 'block',
+  'delta' => '3',
+  'type' => '0',
+  'language' => 'fr',
+))
+->values(array(
+  'ibid' => '3',
+  'module' => 'menu',
+  'delta' => 'secondary-links',
+  'type' => '0',
+  'language' => 'en',
+))
+->values(array(
+  'ibid' => '4',
+  'module' => 'menu',
+  'delta' => 'menu-fr-secondary-links',
+  'type' => '0',
+  'language' => 'fr',
+))
+->execute();
+
 $connection->schema()->createTable('i18n_strings', array(
   'fields' => array(
     'lid' => array(
@@ -8761,22 +8814,6 @@
   'format' => '2',
 ))
 ->values(array(
-  'lid' => '526',
-  'objectid' => '2',
-  'type' => 'block',
-  'property' => 'title',
-  'objectindex' => '2',
-  'format' => '0',
-))
-->values(array(
-  'lid' => '527',
-  'objectid' => '2',
-  'type' => 'block',
-  'property' => 'body',
-  'objectindex' => '2',
-  'format' => '2',
-))
-->values(array(
   'lid' => '528',
   'objectid' => '4',
   'type' => 'vocabulary',
@@ -9640,6 +9677,30 @@
   'objectindex' => '7',
   'format' => '0',
 ))
+->values(array(
+  'lid' => '1674',
+  'objectid' => 'menu-fr-secondary-links',
+  'type' => 'menu',
+  'property' => 'title',
+  'objectindex' => '0',
+  'format' => '0',
+))
+->values(array(
+  'lid' => '1677',
+  'objectid' => '462',
+  'type' => 'item',
+  'property' => 'title',
+  'objectindex' => '462',
+  'format' => '0',
+))
+->values(array(
+  'lid' => '1678',
+  'objectid' => '462',
+  'type' => 'item',
+  'property' => 'description',
+  'objectindex' => '462',
+  'format' => '0',
+))
 ->execute();
 
 $connection->schema()->createTable('i18n_variable', array(
@@ -14078,20 +14139,6 @@
   'version' => '1',
 ))
 ->values(array(
-  'lid' => '526',
-  'location' => 'block:2:title',
-  'textgroup' => 'blocks',
-  'source' => 'Another Static Block',
-  'version' => '1',
-))
-->values(array(
-  'lid' => '527',
-  'location' => 'block:2:body',
-  'textgroup' => 'blocks',
-  'source' => '<h3>My second custom block body</h3>',
-  'version' => '1',
-))
-->values(array(
   'lid' => '528',
   'location' => 'vocabulary:4:name',
   'textgroup' => 'taxonomy',
@@ -22106,6 +22153,27 @@
   'source' => 'Forums',
   'version' => '1',
 ))
+->values(array(
+  'lid' => '1674',
+  'location' => 'menu:menu-fr-secondary-links:title',
+  'textgroup' => 'menu',
+  'source' => 'fr - Secondary links',
+  'version' => '1',
+))
+->values(array(
+  'lid' => '1677',
+  'location' => 'item:462:title',
+  'textgroup' => 'menu',
+  'source' => 'fr -Test 2',
+  'version' => '1',
+))
+->values(array(
+  'lid' => '1678',
+  'location' => 'item:462:description',
+  'textgroup' => 'menu',
+  'source' => 'fr Test menu link 2',
+  'version' => '1',
+))
 ->execute();
 
 $connection->schema()->createTable('locales_target', array(
@@ -26327,22 +26395,6 @@
   'i18n_status' => '0',
 ))
 ->values(array(
-  'lid' => '526',
-  'translation' => 'Encore un bloc statique',
-  'language' => 'fr',
-  'plid' => '0',
-  'plural' => '0',
-  'i18n_status' => '0',
-))
-->values(array(
-  'lid' => '527',
-  'translation' => 'Nom de vocabulaire beaucoup plus long que trente-deux caractères',
-  'language' => 'fr',
-  'plid' => '0',
-  'plural' => '0',
-  'i18n_status' => '0',
-))
-->values(array(
   'lid' => '528',
   'translation' => 'fr - Tags',
   'language' => 'fr',
@@ -27281,6 +27333,11 @@
   'description',
 ))
 ->values(array(
+  'menu_name' => 'menu-fr-secondary-links',
+  'title' => 'fr - Secondary links',
+  'description' => '',
+))
+->values(array(
   'menu_name' => 'navigation',
   'title' => 'Navigation',
   'description' => 'The navigation menu is provided by Drupal and is the main interactive menu for any site. It is usually the only menu that contains personalized links for authenticated users, and is often not even visible to anonymous users.',
@@ -29016,7 +29073,7 @@
   'module' => 'system',
   'hidden' => '0',
   'external' => '0',
-  'has_children' => '0',
+  'has_children' => '1',
   'expanded' => '0',
   'weight' => '0',
   'depth' => '3',
@@ -33649,6 +33706,60 @@
   'p9' => '0',
   'updated' => '0',
 ))
+->values(array(
+  'menu_name' => 'navigation',
+  'mlid' => '461',
+  'plid' => '197',
+  'link_path' => 'admin/build/menu-customize/menu-fr-secondary-links',
+  'router_path' => 'admin/build/menu-customize/%',
+  'link_title' => 'fr - Secondary links',
+  'options' => 'a:1:{s:5:"alter";b:1;}',
+  'module' => 'menu',
+  'hidden' => '0',
+  'external' => '0',
+  'has_children' => '0',
+  'expanded' => '0',
+  'weight' => '0',
+  'depth' => '4',
+  'customized' => '0',
+  'p1' => '144',
+  'p2' => '166',
+  'p3' => '197',
+  'p4' => '461',
+  'p5' => '0',
+  'p6' => '0',
+  'p7' => '0',
+  'p8' => '0',
+  'p9' => '0',
+  'updated' => '0',
+))
+->values(array(
+  'menu_name' => 'menu-fr-secondary-links',
+  'mlid' => '462',
+  'plid' => '0',
+  'link_path' => 'admin',
+  'router_path' => 'admin',
+  'link_title' => 'fr -Test 2',
+  'options' => 'a:3:{s:5:"query";s:7:"foo=bar";s:10:"attributes";a:1:{s:5:"title";s:19:"fr Test menu link 2";}s:8:"langcode";s:2:"fr";}',
+  'module' => 'menu',
+  'hidden' => '0',
+  'external' => '0',
+  'has_children' => '0',
+  'expanded' => '0',
+  'weight' => '0',
+  'depth' => '1',
+  'customized' => '1',
+  'p1' => '462',
+  'p2' => '0',
+  'p3' => '0',
+  'p4' => '0',
+  'p5' => '0',
+  'p6' => '0',
+  'p7' => '0',
+  'p8' => '0',
+  'p9' => '0',
+  'updated' => '0',
+))
 ->execute();
 
 $connection->schema()->createTable('menu_router', array(
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6ReviewPageTest.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6ReviewPageTest.php
index a526de7..b714dcc 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6ReviewPageTest.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6ReviewPageTest.php
@@ -44,6 +44,7 @@ protected function getAvailablePaths() {
       'filefield',
       'filter',
       'forum',
+      'i18nblocks',
       'i18ntaxonomy',
       'imagecache',
       'imagefield',
@@ -120,7 +121,6 @@ protected function getMissingPaths() {
       'devel',
       'devel_generate',
       'devel_node_access',
-      'i18nblocks',
       'i18ncck',
       'i18ncontent',
       'i18nmenu',
diff --git a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
index 71eebe8..7d4cb6d 100644
--- a/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
+++ b/core/modules/migrate_drupal_ui/tests/src/Functional/d6/MigrateUpgrade6Test.php
@@ -131,6 +131,7 @@ protected function getAvailablePaths() {
       'filefield',
       'filter',
       'forum',
+      'i18nblocks',
       'i18ntaxonomy',
       'imagecache',
       'imagefield',
@@ -172,7 +173,6 @@ protected function getAvailablePaths() {
    */
   protected function getMissingPaths() {
     return [
-      'i18nblocks',
       'i18ncck',
       'i18ncontent',
       'i18nmenu',
