diff --git a/core/modules/comment/tests/src/Kernel/Views/CommentLinksTest.php b/core/modules/comment/tests/src/Kernel/Views/CommentLinksTest.php
index 78afe51..ba25faa 100644
--- a/core/modules/comment/tests/src/Kernel/Views/CommentLinksTest.php
+++ b/core/modules/comment/tests/src/Kernel/Views/CommentLinksTest.php
@@ -60,7 +60,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.');
 
@@ -157,12 +160,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 ebe1e9d..09b45ff 100644
--- a/core/modules/views/src/Plugin/views/field/LinkBase.php
+++ b/core/modules/views/src/Plugin/views/field/LinkBase.php
@@ -3,9 +3,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;
 
@@ -17,6 +20,7 @@
 abstract class LinkBase extends FieldPluginBase {
 
   use RedirectDestinationTrait;
+  use EntityTranslationRenderTrait;
 
   /**
    * The access manager service.
@@ -33,6 +37,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
@@ -43,10 +61,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;
   }
 
   /**
@@ -57,7 +81,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')
     );
   }
 
@@ -116,6 +142,7 @@ public function usesGroupBy() {
    */
   public function query() {
     $this->addAdditionalFields();
+    $this->getEntityTranslationRenderer()->query($this->view->getQuery());
   }
 
   /**
@@ -177,11 +204,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);
   }
 
   /**
@@ -194,4 +218,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/src/Tests/ViewElementTest.php b/core/modules/views/src/Tests/ViewElementTest.php
index caf5bff..d1d5486 100644
--- a/core/modules/views/src/Tests/ViewElementTest.php
+++ b/core/modules/views/src/Tests/ViewElementTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\views\Tests;
 
 use Drupal\views\Views;
+use Drupal\language\Entity\ConfigurableLanguage;
 
 /**
  * Tests the view render element.
@@ -12,11 +13,18 @@
 class ViewElementTest extends ViewTestBase {
 
   /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['config_translation', 'node'];
+
+  /**
    * Views used by this test.
    *
    * @var array
    */
-  public static $testViews = array('test_view_embed');
+  public static $testViews = array('test_view_embed', 'test_link_base');
 
   /**
    * The raw render data array to use in tests.
@@ -25,11 +33,23 @@ class ViewElementTest extends ViewTestBase {
    */
   protected $render;
 
+  /**
+   * Languages to enable.
+   *
+   * @var array
+   */
+  protected $langcodes = ['fr'];
+
   protected function setUp() {
     parent::setUp();
 
     $this->enableViewsTestModule();
 
+    // Add languages.
+    foreach ($this->langcodes as $langcode) {
+      ConfigurableLanguage::createFromLangcode($langcode)->save();
+    }
+
     // Set up a render array to use. We need to copy this as drupal_render
     // passes by reference.
     $this->render = array(
@@ -189,4 +209,21 @@ public function testViewElementEmbed() {
     $this->assertEqual(1, count($this->xpath('//form[@class="views-exposed-form"]')));
   }
 
+  /**
+  * Test LinkBase field handler works correctly for translated entities.
+  */
+  public function testTranslationLinkBase() {
+    $node = $this->drupalCreateNode(['type' => 'article']);
+    $node->addTranslation('fr', [
+      'title' => $this->randomMachineName(),
+    ]);
+    $node->save();
+    $this->drupalGet('test-link-base');
+    $result_fr = $this->xpath('//a[contains(@href, "/fr/node/1") and contains(@hreflang, "fr")]');
+    $result_en = $this->xpath('//a[contains(@href, "/node/1") and contains(@hreflang, "en")]');
+    $this->assertEqual('1', count($result_fr));
+    $this->assertEqual('1', count($result_en));
+    $this->assertLinkByHref('node/1');
+    $this->assertLinkByHref('fr/node/1');
+  }
 }
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_link_base.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_link_base.yml
new file mode 100644
index 0000000..c356d06
--- /dev/null
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_link_base.yml
@@ -0,0 +1,139 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - node
+id: test_link_base
+label: 'Test Link Base'
+module: views
+description: ''
+tag: ''
+base_table: node_field_data
+base_field: nid
+core: '8'
+display:
+  default:
+    display_options:
+      access:
+        type: none
+      cache:
+        type: tag
+      exposed_form:
+        type: basic
+      pager:
+        type: full
+      style:
+        type: default
+      row:
+        type: fields
+      display_extenders: {  }
+      fields:
+        title:
+          id: title
+          table: node_field_data
+          field: title
+          entity_type: node
+          entity_field: title
+          label: 'Node title'
+          alter:
+            alter_text: false
+            make_link: false
+            absolute: false
+            trim: false
+            word_boundary: false
+            ellipsis: false
+            strip_tags: false
+            html: false
+          hide_empty: false
+          empty_zero: false
+          settings:
+            link_to_entity: false
+          plugin_id: field
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exclude: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_alter_empty: true
+          click_sort_column: value
+          type: string
+          group_column: value
+          group_columns: {  }
+          group_rows: true
+          delta_limit: 0
+          delta_offset: 0
+          delta_reversed: false
+          delta_first_last: false
+          multi_type: separator
+          separator: ', '
+          field_api_classes: false
+        view_node:
+          id: view_node
+          table: node
+          field: view_node
+          relationship: none
+          group_type: group
+          admin_label: ''
+          label: 'Link'
+          exclude: false
+          alter:
+            alter_text: false
+            text: ''
+            make_link: false
+            path: ''
+            absolute: false
+            external: false
+            replace_spaces: false
+            path_case: none
+            trim_whitespace: false
+            alt: ''
+            rel: ''
+            link_class: ''
+            prefix: ''
+            suffix: ''
+            target: ''
+            nl2br: false
+            max_length: 0
+            word_boundary: true
+            ellipsis: true
+            more_link: false
+            more_link_text: ''
+            more_link_path: ''
+            strip_tags: false
+            trim: false
+            preserve_tags: ''
+            html: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_empty: false
+          empty_zero: false
+          hide_alter_empty: true
+          text: view
+          entity_type: node
+          plugin_id: entity_link
+    display_plugin: default
+    display_title: Master
+    id: default
+    position: 0
+  page_1:
+    display_plugin: page
+    id: page_1
+    display_title: Page
+    position: null
+    display_options:
+      path: test-link-base
