diff --git a/core/modules/config_translation/config_translation.module b/core/modules/config_translation/config_translation.module
index 558841a3067c99f2815c4967ac1b0b003c960c8f..858659a6bec8d92f2545ff307080a7a3d1a9cb58 100644
--- a/core/modules/config_translation/config_translation.module
+++ b/core/modules/config_translation/config_translation.module
@@ -85,21 +85,29 @@ function config_translation_theme() {
 }
 
 /**
- * Implements hook_entity_info().
+ * Implements hook_entity_info_alter().
  */
-function config_translation_entity_info($entity_info) {
+function config_translation_entity_info_alter($entity_info) {
   /** @var $entity_info \Drupal\Core\Entity\EntityTypeInterface[] */
   foreach ($entity_info as $entity_type_id => $entity_type) {
-    if ($entity_type_id == 'block') {
-      $class = 'Drupal\config_translation\Controller\ConfigTranslationBlockListController';
-    }
-    elseif ($entity_type_id == 'field_instance') {
-      $class = 'Drupal\config_translation\Controller\ConfigTranslationFieldInstanceListController';
-    }
-    else {
-      $class = 'Drupal\config_translation\Controller\ConfigTranslationEntityListController';
+    if ($entity_type->isSubclassOf('Drupal\Core\Config\Entity\ConfigEntityInterface')) {
+      if ($entity_type_id == 'block') {
+        $class = 'Drupal\config_translation\Controller\ConfigTranslationBlockListController';
+      }
+      elseif ($entity_type_id == 'field_instance') {
+        $class = 'Drupal\config_translation\Controller\ConfigTranslationFieldInstanceListController';
+        // Will be filled in dynamically, see \Drupal\field\Entity\FieldInstance::linkTemplates().
+        $entity_type->setLinkTemplate('drupal:config-translation-overview', 'config_translation.item.overview.');
+      }
+      else {
+        $class = 'Drupal\config_translation\Controller\ConfigTranslationEntityListController';
+      }
+      $entity_type->setControllerClass('config_translation_list', $class);
+
+      if ($entity_type->hasLinkTemplate('edit-form')) {
+        $entity_type->setLinkTemplate('drupal:config-translation-overview', 'config_translation.item.overview.' . $entity_type->getLinkTemplate('edit-form'));
+      }
     }
-    $entity_type->setControllerClass('config_translation_list', $class);
   }
 }
 
@@ -169,13 +177,10 @@ function config_translation_config_translation_info(&$info) {
  */
 function config_translation_entity_operation_alter(array &$operations, EntityInterface $entity) {
   if (\Drupal::currentUser()->hasPermission('translate configuration')) {
-    $uri = $entity->urlInfo();
     $operations['translate'] = array(
       'title' => t('Translate'),
-      'href' => $entity->getSystemPath() . '/translate',
-      'options' => $uri['options'],
       'weight' => 50,
-    );
+    ) + $entity->urlInfo('drupal:config-translation-overview');
   }
 }
 
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Plugin/views/field/TranslationLink.php b/core/modules/content_translation/lib/Drupal/content_translation/Plugin/views/field/TranslationLink.php
index 176d3f615e4b04cbabad78282c3441c57bb06984..999abf45e47a38c9001d07933904acd09f3c0579 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Plugin/views/field/TranslationLink.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Plugin/views/field/TranslationLink.php
@@ -64,7 +64,7 @@ protected function renderLink(EntityInterface $entity, ResultRow $values) {
       $text = !empty($this->options['text']) ? $this->options['text'] : t('translate');
 
       $this->options['alter']['make_link'] = TRUE;
-      $this->options['alter']['path'] = $entity->getSystemPath() . '/translations';
+      $this->options['alter']['path'] = $entity->getSystemPath('drupal:content-translation-overview');
 
       return $text;
     }
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
index 26c43b6f05a591685ac9b2c991023f456f3fd878..f83e45ac60e0d65dda952a66e2079c84dd61e7ab 100644
--- a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
+++ b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
@@ -511,6 +511,9 @@ protected function linkTemplates() {
     $link_templates = parent::linkTemplates();
     if (\Drupal::moduleHandler()->moduleExists('field_ui')) {
       $link_templates['edit-form'] = 'field_ui.instance_edit_' . $this->entity_type;
+      if (isset($link_templates['drupal:config-translation-overview'])) {
+        $link_templates['drupal:config-translation-overview'] .= $link_templates['edit-form'];
+      }
     }
     return $link_templates;
   }
diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php
index 852f7f9e7779ec2f505a29a190ce41447f7caae2..1a3973dd329cafb3a9180633d5b174a1f8af4d25 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -730,9 +730,8 @@ function hook_entity_field_info_alter(&$info, $entity_type_id) {
 function hook_entity_operation_alter(array &$operations, \Drupal\Core\Entity\EntityInterface $entity) {
   $operations['translate'] = array(
     'title' => t('Translate'),
-    'href' => $entity->getSystemPath() . '/translate',
     'weight' => 50,
-  );
+  ) + $entity->urlInfo('my-custom-link-template');
 }
 
 /**