diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d7/TermLocalizedTranslation.php b/core/modules/taxonomy/src/Plugin/migrate/source/d7/TermLocalizedTranslation.php
index f61f384b69..17c3fcb157 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d7/TermLocalizedTranslation.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d7/TermLocalizedTranslation.php
@@ -17,6 +17,11 @@ class TermLocalizedTranslation extends Term {
 
   use I18nQueryTrait;
 
+  /**
+   * Drupal 7 table names.
+   */
+  const I18N_STRING_TABLE = 'i18n_string';
+
   /**
    * {@inheritdoc}
    */
@@ -50,38 +55,22 @@ public function query() {
    * {@inheritdoc}
    */
   public function prepareRow(Row $row) {
+    parent::prepareRow($row);
+
+    // Override language with ltlanguage.
     $language = $row->getSourceProperty('ltlanguage');
-    $tid = $row->getSourceProperty('tid');
+    $row->setSourceProperty('language', $language);
 
-    // If this row has been migrated it is a duplicate then skip it.
-    if ($this->idMap->lookupDestinationIds(['tid' => $tid, 'language' => $language])) {
-      return FALSE;
-    }
+    // Set the i18n string table for use in I18nQueryTrait.
+    $this->i18nStringTable = static::I18N_STRING_TABLE;
 
     // Save the translation for the property already in the row.
     $property_in_row = $row->getSourceProperty('property');
-    $row->setSourceProperty($property_in_row . '_translated', $row->getSourceProperty('translation'));
 
     // Get the translation for the property not already in the row and save it
     // in the row.
     $property_not_in_row = ($property_in_row == 'name') ? 'description' : 'name';
-
-    // Get the translation, if one exists, for the property not already in the
-    // row.
-    $query = $this->select('i18n_string', 'i18n')
-      ->fields('i18n', ['lid'])
-      ->condition('i18n.property', $property_not_in_row);
-    $query->leftJoin('locales_target', 'lt', 'i18n.lid = lt.lid');
-    $query->condition('lt.language', $language);
-    $query->addField('lt', 'translation');
-    $results = $query->execute()->fetchAssoc();
-    if (!$results) {
-      $row->setSourceProperty($property_not_in_row . '_translated', NULL);
-    }
-    else {
-      $row->setSourceProperty($property_not_in_row . '_translated', $results['translation']);
-    }
-    parent::prepareRow($row);
+    return $this->getPropertyNotInRowTranslation($row, $property_not_in_row, 'tid', $this->idMap);
   }
 
   /**
diff --git a/core/modules/taxonomy/tests/src/Kernel/Plugin/migrate/source/d7/TermLocalizedTranslationTest.php b/core/modules/taxonomy/tests/src/Kernel/Plugin/migrate/source/d7/TermLocalizedTranslationTest.php
index a62f37b327..afc1109bf1 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Plugin/migrate/source/d7/TermLocalizedTranslationTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Plugin/migrate/source/d7/TermLocalizedTranslationTest.php
@@ -63,6 +63,22 @@ public function providerSource() {
         'objectindex' => '4',
         'format' => 0,
       ],
+      [
+        'lid' => 10,
+        'objectid' => 5,
+        'type' => 'term',
+        'property' => 'name',
+        'objectindex' => '5',
+        'format' => 0,
+      ],
+      [
+        'lid' => 11,
+        'objectid' => 5,
+        'type' => 'term',
+        'property' => 'description',
+        'objectindex' => '5',
+        'format' => 0,
+      ],
     ];
     $tests[0]['source_data']['locales_target'] = [
       [
@@ -89,6 +105,22 @@ public function providerSource() {
         'plural' => 0,
         'i18n_status' => 0,
       ],
+      [
+        'lid' => 10,
+        'language' => 'fr',
+        'translation' => 'fr - name value 5',
+        'plid' => 0,
+        'plural' => 0,
+        'i18n_status' => 0,
+      ],
+      [
+        'lid' => 11,
+        'language' => 'fr',
+        'translation' => 'fr - description value 5',
+        'plid' => 0,
+        'plural' => 0,
+        'i18n_status' => 0,
+      ],
     ];
 
     // The expected results.
@@ -100,7 +132,7 @@ public function providerSource() {
         'description' => 'description value 1 (description_field)',
         'weight' => 0,
         'is_container' => '',
-        'language' => 'en',
+        'language' => 'fr',
         'i18n_tsid' => '0',
         'machine_name' => 'tags',
         'tdlanguage' => 'und',
@@ -108,6 +140,8 @@ public function providerSource() {
         'property' => 'name',
         'ltlanguage' => 'fr',
         'translation' => 'fr - name value 1',
+        'name_translated' => 'fr - name value 1',
+        'description_translated' => 'fr - description value 1',
       ],
       [
         'tid' => 1,
@@ -116,7 +150,7 @@ public function providerSource() {
         'description' => 'description value 1 (description_field)',
         'weight' => 0,
         'is_container' => '',
-        'language' => 'en',
+        'language' => 'fr',
         'i18n_tsid' => '0',
         'machine_name' => 'tags',
         'tdlanguage' => 'und',
@@ -124,6 +158,8 @@ public function providerSource() {
         'property' => 'description',
         'ltlanguage' => 'fr',
         'translation' => 'fr - description value 1',
+        'name_translated' => 'fr - name value 1',
+        'description_translated' => 'fr - description value 1',
       ],
       [
         'tid' => 3,
@@ -132,7 +168,7 @@ public function providerSource() {
         'description' => 'description value 3',
         'weight' => 0,
         'is_container' => '',
-        'language' => 'en',
+        'language' => 'zu',
         'i18n_tsid' => '0',
         'machine_name' => 'categories',
         'tdlanguage' => 'und',
@@ -140,6 +176,44 @@ public function providerSource() {
         'property' => 'name',
         'ltlanguage' => 'zu',
         'translation' => 'zu - name value 3',
+        'name_translated' => 'zu - name value 3',
+        'description_translated' => NULL,
+      ],
+      [
+        'tid' => 5,
+        'vid' => 6,
+        'name' => 'name value 5',
+        'description' => 'description value 5',
+        'weight' => 1,
+        'is_container' => '1',
+        'language' => 'fr',
+        'i18n_tsid' => '0',
+        'machine_name' => 'categories',
+        'tdlanguage' => 'und',
+        'lid' => '10',
+        'property' => 'name',
+        'ltlanguage' => 'fr',
+        'translation' => 'fr - name value 5',
+        'name_translated' => 'fr - name value 5',
+        'description_translated' => 'fr - description value 5',
+      ],
+      [
+        'tid' => 5,
+        'vid' => 6,
+        'name' => 'name value 5',
+        'description' => 'description value 5',
+        'weight' => 1,
+        'is_container' => '1',
+        'language' => 'fr',
+        'i18n_tsid' => '0',
+        'machine_name' => 'categories',
+        'tdlanguage' => 'und',
+        'lid' => '11',
+        'property' => 'description',
+        'ltlanguage' => 'fr',
+        'translation' => 'fr - description value 5',
+        'name_translated' => 'fr - name value 5',
+        'description_translated' => 'fr - description value 5',
       ],
     ];
 
