diff --git a/core/includes/menu.inc b/core/includes/menu.inc
index 66d1e2a..931e0d4 100644
--- a/core/includes/menu.inc
+++ b/core/includes/menu.inc
@@ -2273,15 +2273,37 @@ function menu_secondary_local_tasks() {
 function menu_get_local_actions() {
   $links = menu_local_tasks();
   $router_item = menu_get_item();
-  // @todo Consider storing the results of hook_local_actions() in a static.
-  foreach (Drupal::moduleHandler()->invokeAll('local_actions') as $route_info) {
-    if (in_array($router_item['route_name'], $route_info['appears_on'])) {
-      $route_path = _menu_router_translate_route($route_info['route_name']);
+  // @todo Consider storing the results of hook_local_actions() in a static
+  // or compiling it when the routes are dumped.
+  foreach (Drupal::moduleHandler()->invokeAll('local_actions') as $local_action) {
+    if (in_array($router_item['route_name'], $local_action['appears_on'])) {
+      $route_path = _menu_router_translate_route($local_action['route_name']);
       $action_router_item = menu_get_item($route_path);
+
+      if (!empty($local_action['title'])) {
+        $title = $local_action['title'];
+      }
+      else {
+        /** @var \Symfony\Component\Routing\Route $route */
+        $route = Drupal::service('router.route_provider')->getRouteByName($action_router_item['route_name']);
+        if ($default_title = $route->getDefault('_title')) {
+          if (strpos($default_title, ':') === FALSE) {
+            $title = t($default_title);
+          }
+          else {
+            /** @var \Drupal\Core\Controller\ControllerResolver $controller_resolver */
+            $controller_resolver = Drupal::service('controller_resolver');
+            $request = new Request(array(), array(), array('defaults' => array('_controller' => $default_title)));
+            list($controller, $method) = $controller_resolver->getController($request);
+            $title = $controller->{$method}(Drupal::request());
+          }
+        }
+      }
+
       $links['actions'][$route_path] = array(
         '#theme' => 'menu_local_action',
         '#link' => array(
-          'title' => $route_info['title'],
+          'title' => $title,
           'href' => $route_path,
         ),
         '#access' => $action_router_item['access'],
diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index 16bb0de..fb65e2b 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -880,14 +880,14 @@ function hook_menu() {
  * @return array
  *   An associative array containing the following keys:
  *   - route_name: The machine name of the local action route.
- *   - title: The title of the local action.
+ *   - title: Optional title of the local action.
  *   - appears_on: An array of route names for this action to be display on.
  */
 function hook_local_actions() {
   return array(
     array(
       'route_name' => 'mymodule.route.action',
-      'title' => t('Perform local action'),
+      'title' => 'Perform local action',
       'appears_on' => array(
         'mymodule.other_route',
         'mymodule.other_other_route',
diff --git a/core/modules/system/tests/modules/menu_test/menu_test.module b/core/modules/system/tests/modules/menu_test/menu_test.module
index b5c0c47..fc6743a 100644
--- a/core/modules/system/tests/modules/menu_test/menu_test.module
+++ b/core/modules/system/tests/modules/menu_test/menu_test.module
@@ -458,7 +458,7 @@ function menu_test_local_actions() {
   return array(
     array(
       'route_name' => 'menu_test_local_action3',
-      'title' => t('My routing action'),
+      'title' => 'My routing action',
       'appears_on' => array(
         'menu_test_local_action1',
       ),
diff --git a/core/modules/views_ui/views_ui.module b/core/modules/views_ui/views_ui.module
index 4ce0595..584e376 100644
--- a/core/modules/views_ui/views_ui.module
+++ b/core/modules/views_ui/views_ui.module
@@ -121,7 +121,6 @@ function views_ui_local_actions() {
   return array(
     array(
       'route_name' => 'views_ui.add',
-      'title' => t('Add new view'),
       'appears_on' => array(
         'views_ui.list',
       ),
diff --git a/core/modules/views_ui/views_ui.routing.yml b/core/modules/views_ui/views_ui.routing.yml
index 0d44630..b51465c 100644
--- a/core/modules/views_ui/views_ui.routing.yml
+++ b/core/modules/views_ui/views_ui.routing.yml
@@ -9,6 +9,7 @@ views_ui.add:
   pattern: '/admin/structure/views/add'
   defaults:
     _entity_form: 'view.add'
+    _title: 'Add new view'
   requirements:
     _permission: 'administer views'
 
