diff --git a/core/modules/migrate_drupal/migration_templates/d6_entity_reference_translation.yml b/core/modules/migrate_drupal/migration_templates/d6_entity_reference_translation.yml
new file mode 100644
index 0000000000..b86bdad520
--- /dev/null
+++ b/core/modules/migrate_drupal/migration_templates/d6_entity_reference_translation.yml
@@ -0,0 +1,11 @@
+id: d6_entity_reference_translation
+label: Entity reference translations
+migration_tags:
+  - Drupal 6
+deriver: Drupal\migrate_drupal\Plugin\migrate\EntityReferenceTranslationDeriver
+source:
+  plugin: d8_entity_reference
+  key: default
+  target: default
+  translation_migrations:
+    node: d6_node_translation
diff --git a/core/modules/migrate_drupal/migration_templates/d7_entity_reference_translation.yml b/core/modules/migrate_drupal/migration_templates/d7_entity_reference_translation.yml
new file mode 100644
index 0000000000..7d254c8717
--- /dev/null
+++ b/core/modules/migrate_drupal/migration_templates/d7_entity_reference_translation.yml
@@ -0,0 +1,11 @@
+id: d7_entity_reference_translation
+label: Entity reference translations
+migration_tags:
+  - Drupal 7
+deriver: Drupal\migrate_drupal\Plugin\migrate\EntityReferenceTranslationDeriver
+source:
+  plugin: d8_entity_reference
+  key: default
+  target: default
+  translation_migrations:
+    node: d7_node_translation
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/EntityReferenceTranslationDeriver.php b/core/modules/migrate_drupal/src/Plugin/migrate/EntityReferenceTranslationDeriver.php
new file mode 100644
index 0000000000..84ed9be6e3
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/EntityReferenceTranslationDeriver.php
@@ -0,0 +1,119 @@
+<?php
+
+namespace Drupal\migrate_drupal\Plugin\migrate;
+
+use Drupal\Component\Plugin\Derivative\DeriverBase;
+use Drupal\Core\Entity\Sql\SqlEntityStorageInterface;
+use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Plugin\Discovery\ContainerDeriverInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * TODO
+ */
+class EntityReferenceTranslationDeriver extends DeriverBase implements ContainerDeriverInterface {
+
+  /**
+   * The base plugin ID this derivative is for.
+   *
+   * @var string
+   */
+  protected $basePluginId;
+
+  /**
+   * The entity field manager.
+   *
+   * @var \Drupal\Core\Entity\EntityFieldManagerInterface
+   */
+  protected $entityFieldManager;
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * EntityReferenceTranslationDeriver constructor.
+   *
+   * @param string $base_plugin_id
+   *   The base plugin ID for the plugin ID.
+   * @param \Drupal\core\Entity\EntityFieldManagerInterface $entity_field_manager
+   *   The entity field manager.
+   * @param \Drupal\core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
+   */
+  public function __construct($base_plugin_id, EntityFieldManagerInterface $entity_field_manager, EntityTypeManagerInterface $entity_type_manager) {
+    $this->basePluginId = $base_plugin_id;
+    $this->entityFieldManager = $entity_field_manager;
+    $this->entityTypeManager = $entity_type_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, $base_plugin_id) {
+    return new static(
+      $base_plugin_id,
+      $container->get('entity_field.manager'),
+      $container->get('entity_type.manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDerivativeDefinitions($base_plugin_definition) {
+    $field_map = $this->entityFieldManager->getFieldMapByFieldType('entity_reference');
+
+    foreach ($field_map as $entity_type => $fields) {
+      $field_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions($entity_type);
+      $base_field_definitions = $this->entityFieldManager->getBaseFieldDefinitions($entity_type);
+      $storage = $this->entityTypeManager->getStorage($entity_type);
+
+      if ($storage instanceof SqlEntityStorageInterface) {
+        $table_mapping = $storage->getTableMapping();
+        $definition = $this->entityTypeManager->getDefinition($entity_type);
+        $base_table = $definition->getBaseTable();
+        $data_table = $definition->getDataTable();
+        $keys = $definition->getKeys();
+
+        foreach ($fields as $field_name => $field) {
+          foreach ($field['bundles'] as $bundle) {
+            $field_definitions = $this->entityFieldManager->getFieldDefinitions($entity_type, $bundle);
+            $target_type = $field_definitions[$field_name]->getSettings()['target_type'];
+
+            if (isset($base_plugin_definition['source']['translation_migrations'][$target_type])) {
+              $derivative = $entity_type . '__' . $bundle;
+              if (!isset($this->derivatives[$derivative])) {
+                $this->derivatives[$derivative] = $base_plugin_definition;
+              }
+
+              $this->derivatives[$derivative]['source']['id_field'] = $keys['id'];
+              $this->derivatives[$derivative]['source']['base_table'] = $base_table;
+              $this->derivatives[$derivative]['source']['data_table'] = $data_table;
+              $this->derivatives[$derivative]['source']['field_table'] = $table_mapping->getFieldTableName($field_name);
+
+              foreach (array_keys($base_field_definitions) as $base_field) {
+                $this->derivatives[$derivative]['process'][$base_field] = $base_field;
+              }
+
+              $field_column = $table_mapping->getFieldColumnName($field_storage_definitions[$field_name], 'target_id');
+              $this->derivatives[$derivative]['process'][$field_name] = [
+                'plugin' => 'migration_lookup',
+                'source' => $field_column,
+                'migration' => $base_plugin_definition['source']['translation_migrations'][$target_type],
+              ];
+
+              $this->derivatives[$derivative]['destination']['plugin'] = 'entity:' . $entity_type;
+            }
+          }
+        }
+      }
+    }
+    return $this->derivatives;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d8/EntityReferenceTranslation.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d8/EntityReferenceTranslation.php
new file mode 100644
index 0000000000..1c53acc4c0
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d8/EntityReferenceTranslation.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source\d8;
+
+use Drupal\migrate\Plugin\migrate\source\SqlBase;
+
+/**
+ * TODO
+ *
+ * @MigrateSource(
+ *   id = "d8_entity_reference"
+ * )
+ */
+class EntityReferenceTranslation extends SqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $base_table = $this->configuration['base_table'];
+    $data_table = $this->configuration['data_table'];
+    $field_table = $this->configuration['field_table'];
+    $id_field = $this->configuration['id_field'];
+
+    $query = $this->select($field_table, 'ft')
+      ->fields('ft', []);
+
+    if ($base_table && $base_table !== $field_table) {
+      $query->join($base_table, 'bt', "bt.$id_field = ft.entity_id");
+      $query->fields('bt', []);
+    }
+
+    if ($data_table && $data_table !== $field_table) {
+      $query->join($data_table, 'dt', "dt.$id_field = ft.entity_id");
+      $query->fields('dt', []);
+    }
+
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    return [];
+  }
+
+}
