diff --git a/core/modules/comment/src/Tests/Views/CommentLinksTest.php b/core/modules/comment/src/Tests/Views/CommentLinksTest.php
index 90269a1..1c5bb98 100644
--- a/core/modules/comment/src/Tests/Views/CommentLinksTest.php
+++ b/core/modules/comment/src/Tests/Views/CommentLinksTest.php
@@ -65,7 +65,10 @@ public function testLinkApprove() {
 
     // Check if I can see the comment approve link on an unapproved comment.
     $approve_comment = $view->style_plugin->getField(0, 'approve_comment');
-    $options = ['query' => ['destination' => '/']];
+    $options = [
+      'query' => ['destination' => '/'],
+      'language' => \Drupal::languageManager()->getDefaultLanguage(),
+    ];
     $url = Url::fromRoute('comment.approve', ['comment' => $comment->id()], $options);
     $this->assertEqual(\Drupal::l('Approve', $url), (string) $approve_comment, 'Found a comment approve link for an unapproved comment.');
 
@@ -162,12 +165,13 @@ public function testLinkReply() {
 
     // Check if I can see the reply link on an approved comment.
     $replyto_comment = $view->style_plugin->getField(0, 'replyto_comment');
+    $options = ['language' => \Drupal::languageManager()->getDefaultLanguage()];
     $url = Url::fromRoute('comment.reply', [
       'entity_type' => 'entity_test',
       'entity' => $host->id(),
       'field_name' => 'comment',
       'pid' => $comment->id(),
-    ]);
+    ], $options);
     $this->assertEqual(\Drupal::l('Reply', $url), (string) $replyto_comment, 'Found the comment reply link as an admin user.');
 
     // Check if I can see the reply link as an anonymous user.
diff --git a/core/modules/views/src/Plugin/views/field/LinkBase.php b/core/modules/views/src/Plugin/views/field/LinkBase.php
index 6ffc304..c5506b1 100644
--- a/core/modules/views/src/Plugin/views/field/LinkBase.php
+++ b/core/modules/views/src/Plugin/views/field/LinkBase.php
@@ -8,9 +8,12 @@
 namespace Drupal\views\Plugin\views\field;
 
 use Drupal\Core\Access\AccessManagerInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Render\BubbleableMetadata;
 use Drupal\Core\Routing\RedirectDestinationTrait;
+use Drupal\views\Entity\Render\EntityTranslationRenderTrait;
 use Drupal\views\ResultRow;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
@@ -22,6 +25,7 @@
 abstract class LinkBase extends FieldPluginBase {
 
   use RedirectDestinationTrait;
+  use EntityTranslationRenderTrait;
 
   /**
    * The access manager service.
@@ -38,6 +42,20 @@
   protected $currentUser;
 
   /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  public $entityManager;
+
+  /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
    * Constructs a LinkBase object.
    *
    * @param array $configuration
@@ -48,10 +66,16 @@
    *   The plugin implementation definition.
    * @param \Drupal\Core\Access\AccessManagerInterface $access_manager
    *   The access manager.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, AccessManagerInterface $access_manager) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, AccessManagerInterface $access_manager, EntityManagerInterface $entity_manager, LanguageManagerInterface $language_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->accessManager = $access_manager;
+    $this->entityManager = $entity_manager;
+    $this->languageManager = $language_manager;
   }
 
   /**
@@ -62,7 +86,9 @@ public static function create(ContainerInterface $container, array $configuratio
       $configuration,
       $plugin_id,
       $plugin_definition,
-      $container->get('access_manager')
+      $container->get('access_manager'),
+      $container->get('entity.manager'),
+      $container->get('language_manager')
     );
   }
 
@@ -121,6 +147,7 @@ public function usesGroupBy() {
    */
   public function query() {
     $this->addAdditionalFields();
+    $this->getEntityTranslationRenderer()->query($this->view->getQuery());
   }
 
   /**
@@ -182,11 +209,8 @@ protected function renderLink(ResultRow $row) {
    *   A view result row.
    */
   protected function addLangcode(ResultRow $row) {
-    $entity = $this->getEntity($row);
-    $langcode_key = $entity ? $entity->getEntityType()->getKey('langcode') : FALSE;
-    if ($langcode_key && isset($this->aliases[$langcode_key])) {
-      $this->options['alter']['language'] = $entity->language();
-    }
+    $langcode = $this->getEntityTranslationRenderer()->getLangcode($row);
+    $this->options['alter']['language'] = $this->languageManager->getLanguage($langcode);
   }
 
   /**
@@ -199,4 +223,32 @@ protected function getDefaultLabel() {
     return $this->t('link');
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getEntityTypeId() {
+    return $this->getEntityType();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getEntityManager() {
+    return $this->entityManager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getLanguageManager() {
+    return $this->languageManager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getView() {
+    return $this->view;
+  }
+
 }
diff --git a/core/modules/views_ui/src/Tests/TranslatedViewTest.php b/core/modules/views_ui/src/Tests/TranslatedViewTest.php
index 3776b0b..f3a2943 100644
--- a/core/modules/views_ui/src/Tests/TranslatedViewTest.php
+++ b/core/modules/views_ui/src/Tests/TranslatedViewTest.php
@@ -25,6 +25,9 @@ class TranslatedViewTest extends WebTestBase {
   public static $modules = [
     'config_translation',
     'views_ui',
+    'node',
+    'language',
+    'content_translation',
   ];
 
   /**
@@ -46,21 +49,42 @@ class TranslatedViewTest extends WebTestBase {
   protected function setUp() {
     parent::setUp();
 
+    // Create node type.
+    $this->drupalCreateContentType(array(
+      'type' => 'article',
+      'name' => 'Article',
+    ));
+
+    // Add languages.
+    foreach ($this->langcodes as $langcode) {
+      ConfigurableLanguage::createFromLangcode($langcode)->save();
+    }
+
+    // Enable translation for the current entity type and ensure the change is
+    // picked up.
+    \Drupal::service('content_translation.manager')->setEnabled('node', 'article', TRUE);
+    drupal_static_reset();
+    \Drupal::entityManager()->clearCachedDefinitions();
+    \Drupal::service('router.builder')->rebuild();
+    \Drupal::service('entity.definition_update_manager')->applyUpdates();
+
     $permissions = [
       'administer site configuration',
       'administer views',
       'translate configuration',
       'translate interface',
+      'administer nodes',
+      'create article content',
+      'edit any article content',
+      'create content translations',
+      'update content translations',
+      'translate article node',
     ];
 
     // Create and login user.
     $this->adminUser = $this->drupalCreateUser($permissions);
     $this->drupalLogin($this->adminUser);
 
-    // Add languages.
-    foreach ($this->langcodes as $langcode) {
-      ConfigurableLanguage::createFromLangcode($langcode)->save();
-    }
     $this->resetAll();
     $this->rebuildContainer();
   }
@@ -86,4 +110,20 @@ public function testTranslatedStrings() {
     $this->assertNoText('Fichiers');
   }
 
+  /**
+  * Test LinkBase works correctly for translated entities.
+  */
+  public function testTranslationLinkBase() {
+    $node = $this->drupalCreateNode(['type' => 'article']);
+    $this->drupalPostForm('fr/node/1/translations/add/en/fr', ['title[0][value]' => 'Translated article'], t('Save and keep published (this translation)'));
+    $edit = ['name[node.view_node]' => TRUE];
+    $this->drupalPostForm('admin/structure/views/nojs/add-handler/content_recent/block_1/field', $edit, t('Add and configure fields'));
+    $this->drupalPostForm('admin/structure/views/nojs/handler/content_recent/block_1/field/view_node', [], t('Apply'));
+    $this->drupalPostForm('admin/structure/views/nojs/handler/content_recent/block_1/filter/langcode', [], t('Remove'));
+    $this->drupalPostForm('admin/structure/views/view/content_recent', [], t('Save'));
+    $this->drupalPostForm('admin/structure/views/view/content_recent', [], t('Update preview'));
+    $this->assertLinkByHref('fr/node/1', 1, 'Links are translated correctly.');
+    $this->assertLinkByHref('node/1', 3, 'Links are translated correctly.');
+  }
+
 }
