diff --git a/core/lib/Drupal/Core/Entity/Annotation/EntityType.php b/core/lib/Drupal/Core/Entity/Annotation/EntityType.php
index 3dbbb39..9325493 100644
--- a/core/lib/Drupal/Core/Entity/Annotation/EntityType.php
+++ b/core/lib/Drupal/Core/Entity/Annotation/EntityType.php
@@ -262,7 +262,9 @@ class EntityType extends Plugin {
    *
    * @var array
    */
-  public $links = array();
+  public $links = array(
+    'canonical' => '/entity/{entityType}/{id}',
+  );
 
   /**
    * Specifies whether a module exposing permissions for the current entity type
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index b0b905d..22c6fef 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -9,7 +9,6 @@
 
 use Drupal\Core\Language\Language;
 use Drupal\Core\Session\AccountInterface;
-use Symfony\Component\Routing\Exception\RouteNotFoundException;
 
 /**
  * Defines a base entity class.
@@ -38,13 +37,6 @@
   protected $enforceIsNew;
 
   /**
-   * The route provider service.
-   *
-   * @var \Drupal\Core\Routing\RouteProviderInterface
-   */
-  protected $routeProvider;
-
-  /**
    * Constructs an Entity object.
    *
    * @param array $values
@@ -152,18 +144,10 @@ public function uri($rel = 'canonical') {
     // The links array might contain URI templates set in annotations.
     $link_templates = isset($entity_info['links']) ? $entity_info['links'] : array();
 
-    $template = NULL;
     if (isset($link_templates[$rel])) {
-      try {
-        $template = $this->routeProvider()->getRouteByName($link_templates[$rel])->getPath();
-      }
-      catch (RouteNotFoundException $e) {
-        // Fall back to a non-template-based URI.
-      }
-    }
-    if ($template) {
       // If there is a template for the given relationship type, do the
       // placeholder replacement and use that as the path.
+      $template = $link_templates[$rel];
       $replacements = $this->uriPlaceholderReplacements();
       $uri['path'] = str_replace(array_keys($replacements), array_values($replacements), $template);
 
@@ -385,17 +369,4 @@ public function changed() {
     }
   }
 
-  /**
-   * Wraps the route provider service.
-   *
-   * @return \Drupal\Core\Routing\RouteProviderInterface
-   *   The route provider.
-   */
-  protected function routeProvider() {
-    if (!$this->routeProvider) {
-      $this->routeProvider = \Drupal::service('router.route_provider');
-    }
-    return $this->routeProvider;
-  }
-
 }
diff --git a/core/modules/action/action.module b/core/modules/action/action.module
index 5ecfb63..39fd855 100644
--- a/core/modules/action/action.module
+++ b/core/modules/action/action.module
@@ -64,5 +64,5 @@ function action_entity_info(&$entity_info) {
   $entity_info['action']['controllers']['form']['edit'] = 'Drupal\action\ActionEditFormController';
   $entity_info['action']['controllers']['form']['delete'] = 'Drupal\action\Form\ActionDeleteForm';
   $entity_info['action']['controllers']['list'] = 'Drupal\action\ActionListController';
-  $entity_info['action']['links']['edit-form'] = 'action.admin_configure';
+  $entity_info['action']['links']['edit-form'] = 'admin/config/system/actions/configure/{action}';
 }
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
index 08624bf..f4baa6f 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
@@ -38,9 +38,9 @@
  *   base_table = "custom_block",
  *   revision_table = "custom_block_revision",
  *   links = {
- *     "canonical" = "custom_block.edit",
- *     "edit-form" = "custom_block.edit",
- *     "admin-form" = "custom_block.type_edit"
+ *     "canonical" = "/block/{custom_block}",
+ *     "edit-form" = "/block/{custom_block}",
+ *     "admin-form" = "/admin/structure/block/custom-blocks/manage/{custom_block_type}"
  *   },
  *   fieldable = TRUE,
  *   translatable = TRUE,
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
index c6340c6..da4e1c2 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
@@ -38,7 +38,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "custom_block.type_edit"
+ *     "edit-form" = "admin/structure/block/custom-blocks/manage/{custom_block_type}"
  *   }
  * )
  */
diff --git a/core/modules/block/lib/Drupal/block/Entity/Block.php b/core/modules/block/lib/Drupal/block/Entity/Block.php
index 02b1d76..bb14858 100644
--- a/core/modules/block/lib/Drupal/block/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Entity/Block.php
@@ -38,7 +38,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "block.admin_edit"
+ *     "edit-form" = "admin/structure/block/manage/{block}"
  *   }
  * )
  */
diff --git a/core/modules/comment/lib/Drupal/comment/Entity/Comment.php b/core/modules/comment/lib/Drupal/comment/Entity/Comment.php
index d2c79bd..e17d116 100644
--- a/core/modules/comment/lib/Drupal/comment/Entity/Comment.php
+++ b/core/modules/comment/lib/Drupal/comment/Entity/Comment.php
@@ -48,9 +48,9 @@
  *     "bundle" = "field_id"
  *   },
  *   links = {
- *     "canonical" = "comment.permalink",
- *     "edit-form" = "comment.edit_page",
- *     "admin-form" = "comment.bundle"
+ *     "canonical" = "/comment/{comment}",
+ *     "edit-form" = "/comment/{comment}/edit",
+ *     "admin-form" = "/admin/structure/comments/manage/{bundle}"
  *   }
  * )
  */
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigQueryTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigQueryTest.php
index a4c7e8c..5aed97f 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigQueryTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigQueryTest.php
@@ -28,6 +28,9 @@
  *     "id" = "id",
  *     "label" = "label",
  *     "uuid" = "uuid"
+ *   },
+ *   links = {
+ *     "edit-form" = "admin/structure/config_test/manage/{config_query_test}"
  *   }
  * )
  *
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigTest.php
index 3df6365..19ee07f 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigTest.php
@@ -35,7 +35,7 @@
  *     "status" = "status"
  *   },
  *   links = {
- *     "edit-form" = "config_test.entity"
+ *     "edit-form" = "admin/structure/config_test/manage/{config_test}"
  *   }
  * )
  */
diff --git a/core/modules/contact/lib/Drupal/contact/Entity/Category.php b/core/modules/contact/lib/Drupal/contact/Entity/Category.php
index 488f2e7..e636713 100644
--- a/core/modules/contact/lib/Drupal/contact/Entity/Category.php
+++ b/core/modules/contact/lib/Drupal/contact/Entity/Category.php
@@ -37,7 +37,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "contact.category_edit"
+ *     "edit-form" = "admin/structure/contact/manage/{contact_category}"
  *   }
  * )
  */
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index 73dcca9..c2d3c5b 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -87,9 +87,9 @@ function content_translation_entity_info_alter(array &$entity_info) {
       }
 
       if (!empty($info['links']['canonical'])) {
-        // Provide default route names for the translation paths.
+        // Provide default links for the translation paths.
         $info['links'] += array(
-          'drupal:content-translation-overview' => "content_translation.translation_overview_$entity_type",
+          'drupal:content-translation-overview' => $info['links']['canonical'] . '/translations',
         );
         $info['translation']['content_translation'] += array(
           'access_callback' => 'content_translation_translate_access',
diff --git a/core/modules/content_translation/content_translation.services.yml b/core/modules/content_translation/content_translation.services.yml
index 764dd39..6b3dcbd 100644
--- a/core/modules/content_translation/content_translation.services.yml
+++ b/core/modules/content_translation/content_translation.services.yml
@@ -5,7 +5,7 @@ services:
 
   content_translation.subscriber:
     class: Drupal\content_translation\Routing\ContentTranslationRouteSubscriber
-    arguments: ['@content_translation.manager', '@router.route_provider']
+    arguments: ['@content_translation.manager']
     tags:
       - { name: event_subscriber }
 
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Plugin/Derivative/ContentTranslationContextualLinks.php b/core/modules/content_translation/lib/Drupal/content_translation/Plugin/Derivative/ContentTranslationContextualLinks.php
index 98956ab..c6cc8ea 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Plugin/Derivative/ContentTranslationContextualLinks.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Plugin/Derivative/ContentTranslationContextualLinks.php
@@ -54,7 +54,7 @@ public function getDerivativeDefinitions(array $base_plugin_definition) {
     foreach ($this->entityManager->getDefinitions() as $entity_type => $entity_info) {
       if ($entity_info['translatable'] && isset($entity_info['translation'])) {
         $this->derivatives[$entity_type]['title'] = t('Translate');
-        $this->derivatives[$entity_type]['route_name'] = $entity_info['links']['drupal:content-translation-overview'];
+        $this->derivatives[$entity_type]['route_name'] = "content_translation.translation_overview_$entity_type";
         $this->derivatives[$entity_type]['group'] = $entity_type;
       }
     }
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Plugin/Derivative/ContentTranslationLocalTasks.php b/core/modules/content_translation/lib/Drupal/content_translation/Plugin/Derivative/ContentTranslationLocalTasks.php
index e906fd9..6989865 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Plugin/Derivative/ContentTranslationLocalTasks.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Plugin/Derivative/ContentTranslationLocalTasks.php
@@ -10,6 +10,7 @@
 use Drupal\content_translation\ContentTranslationManagerInterface;
 use Drupal\Core\Menu\LocalTaskDerivativeBase;
 use Drupal\Core\Plugin\Discovery\ContainerDerivativeInterface;
+use Drupal\Core\Routing\RouteProviderInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -32,16 +33,26 @@ class ContentTranslationLocalTasks extends LocalTaskDerivativeBase implements Co
   protected $contentTranslationManager;
 
   /**
+   * The route provider.
+   *
+   * @var \Drupal\Core\Routing\RouteProviderInterface
+   */
+  protected $routeProvider;
+
+  /**
    * Constructs a new ContentTranslationLocalTasks.
    *
    * @param string $base_plugin_id
    *   The base plugin ID.
    * @param \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager
    *   The content translation manager.
+   * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
+   *   The route provider.
    */
-  public function __construct($base_plugin_id, ContentTranslationManagerInterface $content_translation_manager) {
+  public function __construct($base_plugin_id, ContentTranslationManagerInterface $content_translation_manager, RouteProviderInterface $route_provider) {
     $this->basePluginId = $base_plugin_id;
     $this->contentTranslationManager = $content_translation_manager;
+    $this->routeProvider = $route_provider;
   }
 
   /**
@@ -50,7 +61,8 @@ public function __construct($base_plugin_id, ContentTranslationManagerInterface
   public static function create(ContainerInterface $container, $base_plugin_id) {
     return new static(
       $base_plugin_id,
-      $container->get('content_translation.manager')
+      $container->get('content_translation.manager'),
+      $container->get('router.route_provider')
     );
   }
 
@@ -61,13 +73,14 @@ public function getDerivativeDefinitions(array $base_plugin_definition) {
     // Create tabs for all possible entity types.
     foreach ($this->contentTranslationManager->getSupportedEntityTypes() as $entity_type => $entity_info) {
       // Find the route name for the translation overview.
-      $translation_route_name = $entity_info['links']['drupal:content-translation-overview'];
+      $translation_route_name = "content_translation.translation_overview_$entity_type";
+      $translation_tab = $translation_route_name;
 
-      $this->derivatives[$translation_route_name] = array(
+      $this->derivatives[$translation_tab] = $base_plugin_definition + array(
         'entity_type' => $entity_type,
-        'title' => 'Translate',
-        'route_name' => $translation_route_name,
-      ) + $base_plugin_definition;
+      );
+      $this->derivatives[$translation_tab]['title'] = 'Translate';
+      $this->derivatives[$translation_tab]['route_name'] = $translation_route_name;
     }
     return parent::getDerivativeDefinitions($base_plugin_definition);
   }
@@ -76,16 +89,43 @@ public function getDerivativeDefinitions(array $base_plugin_definition) {
    * Alters the local tasks to find the proper tab_root_id for each task.
    */
   public function alterLocalTasks(array &$local_tasks) {
-    foreach ($this->contentTranslationManager->getSupportedEntityTypes() as $entity_info) {
-      // Find the route name for the entity page.
-      $entity_route_name = $entity_info['links']['canonical'];
+    foreach ($this->contentTranslationManager->getSupportedEntityTypes() as $entity_type => $entity_info) {
+      if (!empty($entity_info['links']['canonical'])) {
+        $path = $entity_info['links']['canonical'];
+        if ($routes = $this->routeProvider->getRoutesByPattern($path)->all()) {
+          // Find the route name for the entity page.
+          $entity_route_name = key($routes);
 
-      // Find the route name for the translation overview.
-      $translation_route_name = $entity_info['links']['drupal:content-translation-overview'];
-      $translation_tab = $this->basePluginId . ':' . $translation_route_name;
+          // Find the route name for the translation overview.
+          $translation_route_name = "content_translation.translation_overview_$entity_type";
+          $translation_tab = $this->basePluginId . ':' . $translation_route_name;
 
-      $local_tasks[$translation_tab]['tab_root_id'] = $this->getPluginIdFromRoute($entity_route_name, $local_tasks);
+          $local_tasks[$translation_tab]['tab_root_id'] = $this->getTaskFromRoute($entity_route_name, $local_tasks);
+        }
+      }
     }
   }
 
+  /**
+   * Find the local task ID of the parent route given the route name.
+   *
+   * @param string $route_name
+   *   The route name of the parent local task.
+   * @param array $local_tasks
+   *   An array of all local task definitions.
+   *
+   * @return bool|string
+   *   Returns the local task ID of the parent task, otherwise return FALSE.
+   */
+  protected function getTaskFromRoute($route_name, &$local_tasks) {
+    $parent_local_task = FALSE;
+    foreach ($local_tasks as $plugin_id => $local_task) {
+      if ($local_task['route_name'] == $route_name) {
+        $parent_local_task = $plugin_id;
+        break;
+      }
+    }
+
+    return $parent_local_task;
+  }
 }
diff --git a/core/modules/content_translation/lib/Drupal/content_translation/Routing/ContentTranslationRouteSubscriber.php b/core/modules/content_translation/lib/Drupal/content_translation/Routing/ContentTranslationRouteSubscriber.php
index b36c654..889e527 100644
--- a/core/modules/content_translation/lib/Drupal/content_translation/Routing/ContentTranslationRouteSubscriber.php
+++ b/core/modules/content_translation/lib/Drupal/content_translation/Routing/ContentTranslationRouteSubscriber.php
@@ -8,12 +8,9 @@
 namespace Drupal\content_translation\Routing;
 
 use Drupal\content_translation\ContentTranslationManagerInterface;
-use Drupal\Core\Routing\RouteProviderInterface;
 use Drupal\Core\Routing\RouteSubscriberBase;
-use Drupal\Core\Routing\RoutingEvents;
 use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
-use Symfony\Component\Routing\Exception\RouteNotFoundException;
 
 /**
  * Subscriber for entity translation routes.
@@ -28,147 +25,118 @@ class ContentTranslationRouteSubscriber extends RouteSubscriberBase {
   protected $contentTranslationManager;
 
   /**
-   * The route provider.
-   *
-   * @var \Drupal\Core\Routing\RouteProviderInterface
-   */
-  protected $routeProvider;
-
-  /**
    * Constructs a ContentTranslationRouteSubscriber object.
    *
    * @param \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager
    *   The content translation manager.
-   * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
-   *   The route provider.
    */
-  public function __construct(ContentTranslationManagerInterface $content_translation_manager, RouteProviderInterface $route_provider) {
+  public function __construct(ContentTranslationManagerInterface $content_translation_manager) {
     $this->contentTranslationManager = $content_translation_manager;
-    $this->routeProvider = $route_provider;
-  }
+   }
 
   /**
    * {@inheritdoc}
    */
   protected function routes(RouteCollection $collection) {
     foreach ($this->contentTranslationManager->getSupportedEntityTypes() as $entity_type => $entity_info) {
-      // First try to get the route from the dynamic_routes collection.
-      if (!$entity_route = $collection->get($entity_info['links']['canonical'])) {
-        // Then try to get the route from the route provider itself, checking
-        // all previous collections.
-        try {
-          $entity_route = $this->routeProvider->getRouteByName($entity_info['links']['canonical']);
-        }
-        // If the route was not found, skip this entity type.
-        catch (RouteNotFoundException $e) {
-          continue;
-        }
-      }
-      $path = $entity_route->getPath() . '/translations';
+      if (!empty($entity_info['translatable']) && !empty($entity_info['links']['drupal:content-translation-overview'])) {
+        $path = $entity_info['links']['drupal:content-translation-overview'];
 
-      $route = new Route(
-       $path,
-        array(
-          '_content' => '\Drupal\content_translation\Controller\ContentTranslationController::overview',
-          '_title' => 'Translate',
-          'account' => 'NULL',
-          '_entity_type' => $entity_type,
-        ),
-        array(
-          '_access_content_translation_overview' => $entity_type,
-          '_permission' => 'translate any entity',
-        ),
-        array(
-          '_access_mode' => 'ANY',
-          'parameters' => array(
-            'entity' => array(
-              'type' => 'entity:' . $entity_type,
-            ),
+        $route = new Route(
+         $path,
+          array(
+            '_content' => '\Drupal\content_translation\Controller\ContentTranslationController::overview',
+            '_title' => 'Translate',
+            'account' => 'NULL',
+            '_entity_type' => $entity_type,
+          ),
+          array(
+            '_access_content_translation_overview' => $entity_type,
+            '_permission' => 'translate any entity',
           ),
-        )
-      );
-      $collection->add($entity_info['links']['drupal:content-translation-overview'], $route);
+          array(
+            '_access_mode' => 'ANY',
+            'parameters' => array(
+              'entity' => array(
+                'type' => 'entity:' . $entity_type,
+              ),
+            ),
+          )
+        );
+        $collection->add("content_translation.translation_overview_$entity_type", $route);
 
-      $route = new Route(
-        $path . '/add/{source}/{target}',
-        array(
-          '_content' => '\Drupal\content_translation\Controller\ContentTranslationController::add',
-          'source' => NULL,
-          'target' => NULL,
-          '_title' => 'Add',
-          '_entity_type' => $entity_type,
+        $route = new Route(
+          $path . '/add/{source}/{target}',
+          array(
+            '_content' => '\Drupal\content_translation\Controller\ContentTranslationController::add',
+            'source' => NULL,
+            'target' => NULL,
+            '_title' => 'Add',
+            '_entity_type' => $entity_type,
 
-        ),
-        array(
-          '_permission' => 'translate any entity',
-          '_access_content_translation_manage' => 'create',
-        ),
-        array(
-          '_access_mode' => 'ANY',
-          'parameters' => array(
-            'entity' => array(
-              'type' => 'entity:' . $entity_type,
-            ),
           ),
-        )
-      );
-      $collection->add("content_translation.translation_add_$entity_type", $route);
-
-      $route = new Route(
-        $path . '/edit/{language}',
-        array(
-          '_content' => '\Drupal\content_translation\Controller\ContentTranslationController::edit',
-          'language' => NULL,
-          '_title' => 'Edit',
-          '_entity_type' => $entity_type,
-        ),
-        array(
-          '_permission' => 'translate any entity',
-          '_access_content_translation_manage' => 'update',
-        ),
-        array(
-          '_access_mode' => 'ANY',
-          'parameters' => array(
-            'entity' => array(
-              'type' => 'entity:' . $entity_type,
-            ),
+          array(
+            '_permission' => 'translate any entity',
+            '_access_content_translation_manage' => 'create',
           ),
-        )
-      );
-      $collection->add("content_translation.translation_edit_$entity_type", $route);
+          array(
+            '_access_mode' => 'ANY',
+            'parameters' => array(
+              'entity' => array(
+                'type' => 'entity:' . $entity_type,
+              ),
+            ),
+          )
+        );
+        $collection->add("content_translation.translation_add_$entity_type", $route);
 
-      $route = new Route(
-        $path . '/delete/{language}',
-        array(
-          '_form' => '\Drupal\content_translation\Form\ContentTranslationDeleteForm',
-          'language' => NULL,
-          '_title' => 'Delete',
-          '_entity_type' => $entity_type,
-        ),
-        array(
-          '_permission' => 'translate any entity',
-          '_access_content_translation_manage' => 'delete',
-        ),
-        array(
-          'parameters' => array(
-            'entity' => array(
-              'type' => 'entity:' . $entity_type,
+        $route = new Route(
+          $path . '/edit/{language}',
+          array(
+            '_content' => '\Drupal\content_translation\Controller\ContentTranslationController::edit',
+            'language' => NULL,
+            '_title' => 'Edit',
+            '_entity_type' => $entity_type,
+          ),
+          array(
+            '_permission' => 'translate any entity',
+            '_access_content_translation_manage' => 'update',
+          ),
+          array(
+            '_access_mode' => 'ANY',
+            'parameters' => array(
+              'entity' => array(
+                'type' => 'entity:' . $entity_type,
+              ),
             ),
+          )
+        );
+        $collection->add("content_translation.translation_edit_$entity_type", $route);
+
+        $route = new Route(
+          $path . '/delete/{language}',
+          array(
+            '_content' => '\Drupal\content_translation\Form\ContentTranslationForm::deleteTranslation',
+            'language' => NULL,
+            '_title' => 'Delete',
+            '_entity_type' => $entity_type,
+          ),
+          array(
+            '_permission' => 'translate any entity',
+            '_access_content_translation_manage' => 'delete',
           ),
-          '_access_mode' => 'ANY',
-        )
-      );
-      $collection->add("content_translation.delete_$entity_type", $route);
+          array(
+            'parameters' => array(
+              'entity' => array(
+                'type' => 'entity:' . $entity_type,
+              ),
+            ),
+            '_access_mode' => 'ANY',
+          )
+        );
+        $collection->add("content_translation.delete_$entity_type", $route);
+      }
     }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public static function getSubscribedEvents() {
-    $events = parent::getSubscribedEvents();
-    $events[RoutingEvents::DYNAMIC] = array('onDynamicRoutes', -100);
-    return $events;
-  }
-
 }
diff --git a/core/modules/content_translation/tests/Drupal/content_translation/Tests/Menu/ContentTranslationLocalTasksTest.php b/core/modules/content_translation/tests/Drupal/content_translation/Tests/Menu/ContentTranslationLocalTasksTest.php
index 48fe2a5..a83ee6f 100644
--- a/core/modules/content_translation/tests/Drupal/content_translation/Tests/Menu/ContentTranslationLocalTasksTest.php
+++ b/core/modules/content_translation/tests/Drupal/content_translation/Tests/Menu/ContentTranslationLocalTasksTest.php
@@ -32,19 +32,43 @@ public function setUp() {
     );
     parent::setUp();
 
-    $content_translation_manager = $this->getMock('Drupal\content_translation\ContentTranslationManagerInterface');
-    $content_translation_manager->expects($this->any())
-      ->method('getSupportedEntityTypes')
+    // Entity manager stub for derivative building.
+    $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
+    $entity_manager->expects($this->any())
+      ->method('getDefinitions')
       ->will($this->returnValue(array(
         'node' => array(
           'translatable' => TRUE,
           'links' => array(
-            'canonical' => 'node.view',
-            'drupal:content-translation-overview' => 'content_translation.translation_overview_node',
+            'canonical' => '/node/{node}',
           ),
         ),
       )));
-    \Drupal::getContainer()->set('content_translation.manager', $content_translation_manager);
+    \Drupal::getContainer()->set('entity.manager', $entity_manager);
+
+    // Route provider for injecting node.view into derivative lookup.
+    $collection = $this->getMockBuilder('Symfony\Component\Routing\RouteCollection')
+      ->disableOriginalConstructor()
+      ->setMethods(array('all'))
+      ->getMock();
+    $collection->expects($this->any())
+      ->method('all')
+      ->will($this->returnValue(array('node.view' => array())));
+    $route_provider = $this->getMock('Drupal\Core\Routing\RouteProviderInterface');
+    $route_provider->expects($this->any())
+      ->method('getRoutesByPattern')
+      ->will($this->returnValue($collection));
+    \Drupal::getContainer()->set('router.route_provider', $route_provider);
+
+    // Stub for t().
+    $string_translation = $this->getMock('Drupal\Core\StringTranslation\TranslationInterface');
+    $string_translation->expects($this->any())
+      ->method('translate')
+      ->will($this->returnCallback(function($string) {return $string;}));
+    \Drupal::getContainer()->set('string_translation', $string_translation);
+
+    // Load the content_translation.module file in order to run the alter hook.
+    require_once DRUPAL_ROOT . '/core/modules/content_translation/content_translation.module';
   }
 
   /**
diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php
index 8e2284b..533321c 100644
--- a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php
+++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php
@@ -49,7 +49,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "entity.form_mode_edit"
+ *     "edit-form" = "admin/structure/display-modes/form/manage/{form_mode}"
  *   }
  * )
  */
diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php
index 1d17d5e..6107d4f 100644
--- a/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php
+++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php
@@ -50,7 +50,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "entity.view_mode_edit"
+ *     "edit-form" = "admin/structure/display-modes/view/manage/{view_mode}"
  *   }
  * )
  */
diff --git a/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php b/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
index 9571584..6c4bf5b 100644
--- a/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
+++ b/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
@@ -39,7 +39,7 @@
  *     "status" = "status"
  *   },
  *   links = {
- *     "edit-form" = "filter.format_edit"
+ *     "edit-form" = "admin/config/content/formats/manage/{filter_format}"
  *   }
  * )
  */
diff --git a/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php b/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
index 3c0d729..414a284 100644
--- a/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
+++ b/core/modules/hal/lib/Drupal/hal/Tests/NormalizerTestBase.php
@@ -58,7 +58,7 @@
    */
   function setUp() {
     parent::setUp();
-    $this->installSchema('system', array('variable', 'url_alias', 'router'));
+    $this->installSchema('system', array('variable', 'url_alias'));
     $this->installSchema('user', array('users'));
     $this->installSchema('entity_test', array('entity_test'));
     $this->installConfig(array('field', 'language'));
diff --git a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
index 1b25465..2192ef7 100644
--- a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
+++ b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
@@ -42,7 +42,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "image.style_edit"
+ *     "edit-form" = "admin/config/media/image-styles/manage/{image_style}"
  *   }
  * )
  */
diff --git a/core/modules/language/lib/Drupal/language/Entity/Language.php b/core/modules/language/lib/Drupal/language/Entity/Language.php
index 8580d87..d4c8e1b 100644
--- a/core/modules/language/lib/Drupal/language/Entity/Language.php
+++ b/core/modules/language/lib/Drupal/language/Entity/Language.php
@@ -39,7 +39,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "language.edit"
+ *     "edit-form" = "admin/config/regional/language/edit/{language_entity}"
  *   }
  * )
  */
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index 3a30bfc..a926f6f 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -97,7 +97,7 @@ function menu_menu() {
  */
 function menu_entity_info(&$entity_info) {
   $entity_info['menu']['controllers']['list'] = 'Drupal\menu\MenuListController';
-  $entity_info['menu']['links']['edit-form'] = 'menu.menu_edit';
+  $entity_info['menu']['links']['edit-form'] = 'admin/structure/menu/manage/{menu}';
   $entity_info['menu']['controllers']['form'] = array(
     'add' => 'Drupal\menu\MenuFormController',
     'edit' => 'Drupal\menu\MenuFormController',
diff --git a/core/modules/node/lib/Drupal/node/Entity/Node.php b/core/modules/node/lib/Drupal/node/Entity/Node.php
index fee4c18..a6930d0 100644
--- a/core/modules/node/lib/Drupal/node/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Entity/Node.php
@@ -54,10 +54,10 @@
  *   bundle_entity_type = "node_type",
  *   permission_granularity = "bundle",
  *   links = {
- *     "canonical" = "node.view",
- *     "edit-form" = "node.page_edit",
- *     "version-history" = "node.revision_overview",
- *     "admin-form" = "node.type_edit"
+ *     "canonical" = "/node/{node}",
+ *     "edit-form" = "/node/{node}/edit",
+ *     "version-history" = "/node/{node}/revisions",
+ *     "admin-form" = "/admin/structure/types/manage/{node_type}"
  *   }
  * )
  */
diff --git a/core/modules/node/lib/Drupal/node/Entity/NodeType.php b/core/modules/node/lib/Drupal/node/Entity/NodeType.php
index b06c583..31a51c8 100644
--- a/core/modules/node/lib/Drupal/node/Entity/NodeType.php
+++ b/core/modules/node/lib/Drupal/node/Entity/NodeType.php
@@ -38,7 +38,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "node.type_edit"
+ *     "edit-form" = "admin/structure/types/manage/{node_type}"
  *   }
  * )
  */
diff --git a/core/modules/picture/lib/Drupal/picture/Entity/PictureMapping.php b/core/modules/picture/lib/Drupal/picture/Entity/PictureMapping.php
index 214acc1..e5404e7 100644
--- a/core/modules/picture/lib/Drupal/picture/Entity/PictureMapping.php
+++ b/core/modules/picture/lib/Drupal/picture/Entity/PictureMapping.php
@@ -37,7 +37,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "picture.mapping_page_edit"
+ *     "edit-form" = "admin/config/media/picturemapping/{picture_mapping}"
  *   }
  * )
  */
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/FieldRdfaTestBase.php b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/FieldRdfaTestBase.php
index 29d4084..386fc54 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/Field/FieldRdfaTestBase.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/Field/FieldRdfaTestBase.php
@@ -46,15 +46,6 @@
   public static $modules = array('rdf');
 
   /**
-   * {@inheritdoc}
-   */
-  public function setUp() {
-    parent::setUp();
-
-    $this->installSchema('system', array('router'));
-  }
-
-  /**
    * Helper function to test the formatter's RDFa.
    *
    * @param string $formatter
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Entity/ShortcutSet.php b/core/modules/shortcut/lib/Drupal/shortcut/Entity/ShortcutSet.php
index 0378e72..474dd77 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Entity/ShortcutSet.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Entity/ShortcutSet.php
@@ -38,7 +38,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "shortcut.set_customize"
+ *     "edit-form" = "admin/config/user-interface/shortcut/manage/{shortcut_set}"
  *   }
  * )
  */
diff --git a/core/modules/system/lib/Drupal/system/Entity/DateFormat.php b/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
index 447f800..d1dfca2 100644
--- a/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
+++ b/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
@@ -37,7 +37,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "system.date_format_edit"
+ *     "edit-form" = "admin/config/regional/date-time/formats/manage/{date_format}"
  *   }
  * )
  */
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTest.php
index 836eafb..d9d69f7 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTest.php
@@ -40,9 +40,9 @@
  *     "label" = "name"
  *   },
  *   links = {
- *     "canonical" = "entity_test.render",
- *     "edit-form" = "entity_test.edit_entity_test",
- *     "admin-form" = "entity_test.admin_entity_test"
+ *     "canonical" = "/entity_test/{entity_test}",
+ *     "edit-form" = "/entity_test/manage/{entity_test}",
+ *     "admin-form" = "/entity_test/structure/{bundle}"
  *   }
  * )
  */
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMul.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMul.php
index f80caa0..0fa4e03 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMul.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMul.php
@@ -38,9 +38,9 @@
  *     "label" = "name"
  *   },
  *   links = {
- *     "canonical" = "entity_test.edit_entity_test_mul",
- *     "edit-form" = "entity_test.edit_entity_test_mul",
- *     "admin-form" = "entity_test.admin_entity_test_mul"
+ *     "canonical" = "/entity_test_mul/manage/{entity_test_mul}",
+ *     "edit-form" = "/entity_test_mul/manage/{entity_test_mul}",
+ *     "admin-form" = "/entity_test_mul/structure/{bundle}"
  *   }
  * )
  */
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMulRev.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMulRev.php
index 7b6db36..2c110c1 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMulRev.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMulRev.php
@@ -39,8 +39,8 @@
  *     "bundle" = "type"
  *   },
  *   links = {
- *     "canonical" = "entity_test.edit_entity_test_mulrev",
- *     "edit-form" = "entity_test.edit_entity_test_mulrev"
+ *     "canonical" = "/entity_test_mulrev/manage/{entity_test_mulrev}",
+ *     "edit-form" = "/entity_test_mulrev/manage/{entity_test_mulrev}"
  *   }
  * )
  */
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestRev.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestRev.php
index 2518b42..f701d95 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestRev.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestRev.php
@@ -36,8 +36,8 @@
  *     "bundle" = "type"
  *   },
  *   links = {
- *     "canonical" = "entity_test.edit_entity_test_rev",
- *     "edit-form" = "entity_test.edit_entity_test_rev"
+ *     "canonical" = "/entity_test_rev/manage/{entity_test_rev}",
+ *     "edit-form" = "/entity_test_rev/manage/{entity_test_rev}"
  *   }
  * )
  */
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
index 4fa499e..4241eb3 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
@@ -50,7 +50,7 @@
  *   links = {
  *     "canonical" = "taxonomy.term_page",
  *     "edit-form" = "taxonomy.term_edit",
- *     "admin-form" = "taxonomy.overview_terms"
+ *     "admin-form" = "/admin/structure/taxonomy/manage/{taxonomy_vocabulary}"
  *   },
  *   permission_granularity = "bundle"
  * )
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
index e257138..c4af5aa 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
@@ -38,7 +38,7 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "edit-form" = "taxonomy.overview_terms"
+ *     "edit-form" = "admin/structure/taxonomy/manage/{taxonomy_vocabulary}"
  *   }
  * )
  */
diff --git a/core/modules/user/lib/Drupal/user/Entity/Role.php b/core/modules/user/lib/Drupal/user/Entity/Role.php
index f17257d..3c02189 100644
--- a/core/modules/user/lib/Drupal/user/Entity/Role.php
+++ b/core/modules/user/lib/Drupal/user/Entity/Role.php
@@ -35,7 +35,7 @@
  *     "label" = "label"
  *   },
  *   links = {
- *     "edit-form" = "user.role_edit"
+ *     "edit-form" = "admin/people/roles/manage/{user_role}"
  *   }
  * )
  */
diff --git a/core/modules/user/lib/Drupal/user/Entity/User.php b/core/modules/user/lib/Drupal/user/Entity/User.php
index 80fc18a..703e613 100644
--- a/core/modules/user/lib/Drupal/user/Entity/User.php
+++ b/core/modules/user/lib/Drupal/user/Entity/User.php
@@ -42,9 +42,9 @@
  *     "uuid" = "uuid"
  *   },
  *   links = {
- *     "canonical" = "user.view",
- *     "edit-form" = "user.edit",
- *     "admin-form" = "user.account_settings"
+ *     "canonical" = "/user/{user}",
+ *     "edit-form" = "/user/{user}/edit",
+ *     "admin-form" = "/admin/config/people/accounts"
  *   }
  * )
  */
diff --git a/core/modules/views/lib/Drupal/views/Entity/View.php b/core/modules/views/lib/Drupal/views/Entity/View.php
index b91b6bd..6cbbf8a 100644
--- a/core/modules/views/lib/Drupal/views/Entity/View.php
+++ b/core/modules/views/lib/Drupal/views/Entity/View.php
@@ -32,6 +32,9 @@
  *     "label" = "label",
  *     "uuid" = "uuid",
  *     "status" = "status"
+ *   },
+ *   links = {
+ *     "edit-form" = "admin/structure/views/view/{view}"
  *   }
  * )
  */
diff --git a/core/modules/views_ui/views_ui.module b/core/modules/views_ui/views_ui.module
index c175caa..395f28a 100644
--- a/core/modules/views_ui/views_ui.module
+++ b/core/modules/views_ui/views_ui.module
@@ -50,7 +50,6 @@ function views_ui_entity_info(&$entity_info) {
       'break_lock' => 'Drupal\views_ui\Form\BreakLockForm',
     ),
   );
-  $entity_info['view']['links']['edit-form'] = 'views_ui.edit';
 }
 
 /**
