diff --git a/core/modules/content_translation/content_translation.admin.inc b/core/modules/content_translation/content_translation.admin.inc
index 768b891..97b0d18 100644
--- a/core/modules/content_translation/content_translation.admin.inc
+++ b/core/modules/content_translation/content_translation.admin.inc
@@ -89,40 +89,39 @@ function _content_translation_form_language_content_settings_form_alter(array &$
       // to be able to skip alterations.
       $form['settings'][$entity_type_id][$bundle]['settings']['language']['#content_translation_skip_alter'] = TRUE;
 
-      // Only show the checkbox to enable translation if the bundles in the
-      // entity might have fields and if there are fields to translate.
-      if ($entity_type->isFieldable()) {
-        $fields = $entity_manager->getFieldDefinitions($entity_type_id, $bundle);
-        if ($fields) {
-          $form['settings'][$entity_type_id][$bundle]['translatable'] = array(
-            '#type' => 'checkbox',
-            '#default_value' => content_translation_enabled($entity_type_id, $bundle),
-          );
-
-          foreach ($fields as $field_name => $definition) {
-            // Allow to configure only fields supporting multilingual storage.
-            if (!empty($storage_definitions[$field_name]) && $storage_definitions[$field_name]->isTranslatable()) {
-              $form['settings'][$entity_type_id][$bundle]['fields'][$field_name] = array(
-                '#label' => $definition->getLabel(),
-                '#type' => 'checkbox',
-                '#default_value' => $definition->isTranslatable(),
-              );
-              // Display the column translatability configuration widget.
-              // @todo Remove this special casing when arbitrary settings can be
-              //   stored for any field. See https://drupal.org/node/2224761.
-              if ($definition instanceof FieldInstanceConfigInterface) {
-                $column_element = content_translation_field_sync_widget($definition);
-                if ($column_element) {
-                  $form['settings'][$entity_type_id][$bundle]['columns'][$field_name] = $column_element;
-                  // @todo This should not concern only files.
-                  if (isset($column_element['#options']['file'])) {
-                    $dependent_options_settings["settings[{$entity_type_id}][{$bundle}][columns][{$field_name}]"] = array('file');
-                  }
+      $fields = $entity_manager->getFieldDefinitions($entity_type_id, $bundle);
+      if ($fields) {
+        foreach ($fields as $field_name => $definition) {
+          // Allow to configure only fields supporting multilingual storage.
+          if (!empty($storage_definitions[$field_name]) && $storage_definitions[$field_name]->isTranslatable()) {
+            $form['settings'][$entity_type_id][$bundle]['fields'][$field_name] = array(
+              '#label' => $definition->getLabel(),
+              '#type' => 'checkbox',
+              '#default_value' => $definition->isTranslatable(),
+            );
+            // Display the column translatability configuration widget.
+            // @todo Remove this special casing when arbitrary settings can be
+            //   stored for any field. See https://drupal.org/node/2224761.
+            if ($definition instanceof FieldInstanceConfigInterface) {
+              $column_element = content_translation_field_sync_widget($definition);
+              if ($column_element) {
+                $form['settings'][$entity_type_id][$bundle]['columns'][$field_name] = $column_element;
+                // @todo This should not concern only files.
+                if (isset($column_element['#options']['file'])) {
+                  $dependent_options_settings["settings[{$entity_type_id}][{$bundle}][columns][{$field_name}]"] = array('file');
                 }
               }
             }
           }
         }
+        if (!empty($form['settings'][$entity_type_id][$bundle]['fields'])) {
+          // Only show the checkbox to enable translation if the bundles in the
+          // entity might have fields and if there are fields to translate.
+          $form['settings'][$entity_type_id][$bundle]['translatable'] = array(
+            '#type' => 'checkbox',
+            '#default_value' => content_translation_enabled($entity_type_id, $bundle),
+          );
+        }
       }
     }
   }
diff --git a/core/modules/content_translation/src/Tests/ContentTranslationTestBase.php b/core/modules/content_translation/src/Tests/ContentTranslationTestBase.php
index 81de3aa..d831045 100644
--- a/core/modules/content_translation/src/Tests/ContentTranslationTestBase.php
+++ b/core/modules/content_translation/src/Tests/ContentTranslationTestBase.php
@@ -173,27 +173,31 @@ protected function enableTranslation() {
    * Creates the test fields.
    */
   protected function setupTestFields() {
-    $this->fieldName = 'field_test_et_ui_test';
-
-    entity_create('field_storage_config', array(
-      'name' => $this->fieldName,
-      'type' => 'text',
-      'entity_type' => $this->entityTypeId,
-      'cardinality' => 1,
-      'translatable' => TRUE,
-    ))->save();
-    entity_create('field_instance_config', array(
-      'entity_type' => $this->entityTypeId,
-      'field_name' => $this->fieldName,
-      'bundle' => $this->bundle,
-      'label' => 'Test translatable text-field',
-    ))->save();
-    entity_get_form_display($this->entityTypeId, $this->bundle, 'default')
-      ->setComponent($this->fieldName, array(
-        'type' => 'text_textfield',
-        'weight' => 0,
-      ))
-      ->save();
+    $entity_type = \Drupal::entityManager()->getDefinition($this->entityTypeId);
+    if ($entity_type->isFieldable()) {
+      if (empty($this->fieldName)) {
+        $this->fieldName = 'field_test_et_ui_test';
+      }
+      entity_create('field_storage_config', array(
+        'name' => $this->fieldName,
+        'type' => 'text',
+        'entity_type' => $this->entityTypeId,
+        'cardinality' => 1,
+        'translatable' => TRUE,
+      ))->save();
+      entity_create('field_instance_config', array(
+        'entity_type' => $this->entityTypeId,
+        'field_name' => $this->fieldName,
+        'bundle' => $this->bundle,
+        'label' => 'Test translatable text-field',
+      ))->save();
+      entity_get_form_display($this->entityTypeId, $this->bundle, 'default')
+        ->setComponent($this->fieldName, array(
+          'type' => 'text_textfield',
+          'weight' => 0,
+        ))
+        ->save();
+    }
   }
 
   /**
diff --git a/core/modules/menu_link_content/src/Tests/MenuLinkContentUITest.php b/core/modules/menu_link_content/src/Tests/MenuLinkContentUITest.php
index 8d2c1f7..3a3e027 100644
--- a/core/modules/menu_link_content/src/Tests/MenuLinkContentUITest.php
+++ b/core/modules/menu_link_content/src/Tests/MenuLinkContentUITest.php
@@ -34,7 +34,6 @@ class MenuLinkContentUITest extends ContentTranslationUITest {
   protected function setUp() {
     $this->entityTypeId = 'menu_link_content';
     $this->bundle = 'menu_link_content';
-    $this->fieldName = 'title';
     parent::setUp();
   }
 
diff --git a/core/modules/shortcut/shortcut.links.task.yml b/core/modules/shortcut/shortcut.links.task.yml
index b9f8bc2..d42c46e 100644
--- a/core/modules/shortcut/shortcut.links.task.yml
+++ b/core/modules/shortcut/shortcut.links.task.yml
@@ -12,3 +12,8 @@ entity.shortcut_set.edit_form:
   route_name: entity.shortcut_set.edit_form
   base_route: entity.shortcut_set.customize_form
   weight: 10
+
+entity.shortcut.canonical:
+  route_name: entity.shortcut.canonical
+  base_route: entity.shortcut.canonical
+  title: Edit
diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index 6f446c1..efd4752 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -302,6 +302,7 @@ function shortcut_renderable_links($shortcut_set = NULL) {
   $shortcuts = \Drupal::entityManager()->getStorage('shortcut')->loadByProperties(array('shortcut_set' => $shortcut_set->id()));
   $all_cache_tags = array();
   foreach ($shortcuts as $shortcut) {
+    $shortcut = \Drupal::entityManager()->getTranslationFromContext($shortcut);
     $links[] = array(
       'title' => $shortcut->label(),
       'href' => $shortcut->path->value,
diff --git a/core/modules/shortcut/src/Entity/ShortcutSet.php b/core/modules/shortcut/src/Entity/ShortcutSet.php
index 5957961..9d4c925 100644
--- a/core/modules/shortcut/src/Entity/ShortcutSet.php
+++ b/core/modules/shortcut/src/Entity/ShortcutSet.php
@@ -30,6 +30,7 @@
  *     }
  *   },
  *   config_prefix = "set",
+ *   bundle_of = "shortcut",
  *   entity_keys = {
  *     "id" = "id",
  *     "label" = "label"
diff --git a/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php b/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php
new file mode 100644
index 0000000..3746202
--- /dev/null
+++ b/core/modules/shortcut/src/Tests/ShortcutTranslationUITest.php
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\shortcut\Tests\ShortcutTranslationUITest.
+ */
+
+namespace Drupal\shortcut\Tests;
+
+use Drupal\content_translation\Tests\ContentTranslationUITest;
+use Drupal\Core\Language\Language;
+
+/**
+ * Tests the shortcut translation UI.
+ *
+ * @group Shortcut
+ */
+class ShortcutTranslationUITest extends ContentTranslationUITest {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array(
+    'language',
+    'content_translation',
+    'shortcut',
+    'toolbar'
+  );
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    $this->entityTypeId = 'shortcut';
+    $this->bundle = 'default';
+    $this->fieldName = 'title';
+    parent::setUp();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getTranslatorPermissions() {
+    return array_merge(parent::getTranslatorPermissions(), array('access shortcuts', 'administer shortcuts', 'access toolbar'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function createEntity($values, $langcode, $bundle_name = NULL) {
+    $values['route_name'] = 'system.admin';
+    return parent::createEntity($values, $langcode, $bundle_name);
+  }
+
+  protected function doTestBasicTranslation() {
+    parent::doTestBasicTranslation();
+
+    $entity = entity_load($this->entityTypeId, $this->entityId, TRUE);
+    foreach ($this->langcodes as $langcode) {
+      if ($entity->hasTranslation($langcode)) {
+        $language = new Language(array('id' => $langcode));
+        $path = \Drupal::urlGenerator()->generateFromRoute('<front>', array(), array('language' => $language));
+        $this->drupalGet($path);
+        $expected_path = \Drupal::urlGenerator()->generateFromRoute('system.admin', array(), array('language' => $language));
+        $label = $entity->getTranslation($langcode)->label();
+
+        debug($this->drupalGetContent());
+        debug($label);
+        debug($expected_path);
+
+        $elements = $this->xpath('//nav[contains(@class, "toolbar-lining")]/ul[@class="menu"]/li/a[contains(@href, :href) and normalize-space(text())=:label]', array(':href' => $expected_path, ':label' => $label));
+        $this->assertTrue(!empty($elements), format_string('Translated @language shortcut link @label found.', array('@label' => $label, '@language' => $language->getName())));
+      }
+    }
+  }
+
+}
