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/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
diff --git a/core/modules/views_ui/src/Tests/TranslatedViewTest.php b/core/modules/views_ui/src/Tests/TranslatedViewTest.php
index 3776b0b..7eae78b 100644
--- a/core/modules/views_ui/src/Tests/TranslatedViewTest.php
+++ b/core/modules/views_ui/src/Tests/TranslatedViewTest.php
@@ -15,7 +15,7 @@
  *
  * @group views_ui
  */
-class TranslatedViewTest extends WebTestBase {
+class TranslatedViewTest extends UITestBase {
 
   /**
    * Modules to enable.
@@ -43,9 +43,21 @@ class TranslatedViewTest extends WebTestBase {
    */
   protected $adminUser;
 
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_link_base'];
+
   protected function setUp() {
     parent::setUp();
 
+    // Add languages.
+    foreach ($this->langcodes as $langcode) {
+      ConfigurableLanguage::createFromLangcode($langcode)->save();
+    }
+
     $permissions = [
       'administer site configuration',
       'administer views',
@@ -57,10 +69,6 @@ protected function setUp() {
     $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 +94,22 @@ public function testTranslatedStrings() {
     $this->assertNoText('Fichiers');
   }
 
+  /**
+  * Test LinkBase 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');
+  }
+
 }
