diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index e1481c2df7..4b6dae12a5 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -45365,8 +45365,8 @@
 ))
 ->values(array(
   'vid' => '2',
-  'name' => 'Forums',
-  'machine_name' => 'forums',
+  'name' => 'Sujet de discussion',
+  'machine_name' => 'sujet_de_discussion',
   'description' => 'Forum navigation vocabulary',
   'hierarchy' => '1',
   'module' => 'forum',
diff --git a/core/modules/taxonomy/migration_templates/d6_taxonomy_vocabulary.yml b/core/modules/taxonomy/migration_templates/d6_taxonomy_vocabulary.yml
index 932f9b3249..336f502ef7 100644
--- a/core/modules/taxonomy/migration_templates/d6_taxonomy_vocabulary.yml
+++ b/core/modules/taxonomy/migration_templates/d6_taxonomy_vocabulary.yml
@@ -15,6 +15,12 @@ process:
       field: vid
       length: 32
       migrated: true
+    -
+      # This plugin checks if the vocabulary being migrated is the one used by
+      # Forum. If so, we use the machine name that Forum expects. Otherwise, we
+      # leave it unchanged.
+      plugin: forum_vocabulary
+      machine_name: forums
   label: name
   name: name
   description: description
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
index 7f3fea8a91..0a62458221 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
@@ -45,10 +45,11 @@ process:
       plugin: substr
       length: 32
     -
-      # This plugin checks if the vocabulary being migrated is the one used for
-      # forums. If it is, the field name is set to 'taxonomy_forums' as it is
-      # what the Forum module is expecting. Otherwise, it is left unchanged.
+      # This plugin checks if the vocabulary being migrated is the one used by
+      # Forum. If so, we use the machine name that Forum expects. Otherwise, we
+      # leave it unchanged.
       plugin: forum_vocabulary
+      machine_name: taxonomy_forums
 destination:
   plugin: component_entity_display
 migration_dependencies:
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
index 607e735be1..abd31911c1 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
@@ -49,10 +49,11 @@ process:
       plugin: substr
       length: 32
     -
-      # This plugin checks if the vocabulary being migrated is the one used for
-      # forums. If it is, the field name is set to 'taxonomy_forums' as it is
-      # what the Forum module is expecting. Otherwise, it is left unchanged.
+      # This plugin checks if the vocabulary being migrated is the one used by
+      # Forum. If so, we use the machine name that Forum expects. Otherwise, we
+      # leave it unchanged.
       plugin: forum_vocabulary
+      machine_name: taxonomy_forums
 destination:
   plugin: component_entity_form_display
 migration_dependencies:
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
index 264655555c..893a95d33a 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
@@ -33,10 +33,11 @@ process:
       plugin: substr
       length: 32
     -
-      # This plugin checks if the vocabulary being migrated is the one used for
-      # forums. If it is, the field name is set to 'taxonomy_forums' as it is
-      # what the Forum module is expecting. Otherwise, it is left unchanged.
+      # This plugin checks if the vocabulary being migrated is the one used by
+      # Forum. If so, we use the machine name that Forum expects. Otherwise, we
+      # leave it unchanged.
       plugin: forum_vocabulary
+      machine_name: taxonomy_forums
   'settings/target_type': 'constants/target_entity_type'
   cardinality: cardinality
 destination:
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
index f49456d5fe..7e28377866 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
@@ -40,10 +40,11 @@ process:
       plugin: substr
       length: 32
     -
-      # This plugin checks if the vocabulary being migrated is the one used for
-      # forums. If it is, the field name is set to 'taxonomy_forums' as it is
-      # what the Forum module is expecting. Otherwise, it is left unchanged.
+      # This plugin checks if the vocabulary being migrated is the one used by
+      # Forum. If so, we use the machine name that Forum expects. Otherwise, we
+      # leave it unchanged.
       plugin: forum_vocabulary
+      machine_name: taxonomy_forums
   label: name
   'settings/handler': 'constants/selection_handler'
   'settings/handler_settings/target_bundles/0': '@field_name'
diff --git a/core/modules/taxonomy/migration_templates/d7_taxonomy_vocabulary.yml b/core/modules/taxonomy/migration_templates/d7_taxonomy_vocabulary.yml
index 355a69c19b..3c41e980c8 100644
--- a/core/modules/taxonomy/migration_templates/d7_taxonomy_vocabulary.yml
+++ b/core/modules/taxonomy/migration_templates/d7_taxonomy_vocabulary.yml
@@ -15,6 +15,12 @@ process:
       field: vid
       length: 32
       migrated: true
+    -
+      # This plugin checks if the vocabulary being migrated is the one used by
+      # Forum. If so, we use the machine name that Forum expects. Otherwise, we
+      # leave it unchanged.
+      plugin: forum_vocabulary
+      machine_name: forums
   label: name
   name: name
   description: description
diff --git a/core/modules/taxonomy/src/Plugin/migrate/process/ForumVocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/process/ForumVocabulary.php
index be4b9cc0b0..677f246519 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/process/ForumVocabulary.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/process/ForumVocabulary.php
@@ -9,12 +9,24 @@
 /**
  * Checks if the vocabulary being migrated is the one used for forums.
  *
- * The forum module is expecting 'taxonomy_forums' as the field name for the
- * forum nodes. The 'forum_vocabulary' source property is evaluated in
- * Drupal\taxonomy\Plugin\migrate\source\d6\Vocabulary and is set to true if
- * the vocabulary vid being migrated is the same as the one in the
+ * Drupal 8 Forum is expecting specific machine names for its field and
+ * vocabulary names. This process plugin forces a given machine name to the
+ * field or vocabulary that is being migrated.
+ *
+ * The 'forum_vocabulary' source property is evaluated in the
+ * d6_taxonomy_vocabulary or d7_taxonomy_vocabulary source plugins and is set to
+ * true if the vocabulary vid being migrated is the same as the one in the
  * 'forum_nav_vocabulary' variable on the source site.
  *
+ * Example:
+ *
+ * @code
+ * process:
+ *   field_name:
+ *     plugin: forum_vocabulary
+ *     machine_name: taxonomy_forums
+ * @endcode
+ *
  * @MigrateProcessPlugin(
  *   id = "forum_vocabulary"
  * )
@@ -25,8 +37,8 @@ class ForumVocabulary extends ProcessPluginBase {
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    if ($row->getSourceProperty('forum_vocabulary')) {
-      $value = 'taxonomy_forums';
+    if ($row->getSourceProperty('forum_vocabulary') && !empty($this->configuration['machine_name'])) {
+      $value = $this->configuration['machine_name'];
     }
     return $value;
   }
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
index f8c601d8eb..767daf45e1 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/Vocabulary.php
@@ -70,9 +70,9 @@ public function prepareRow(Row $row) {
     $row->setSourceProperty('node_types', $node_types);
     $row->setSourceProperty('cardinality', ($row->getSourceProperty('tags') == 1 || $row->getSourceProperty('multiple') == 1) ? FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED : 1);
 
-    // If the vid of the vocabulary being migrated is equal to the vid in the
+    // If the vocabulary being migrated is the one defined in the
     // 'forum_nav_vocabulary' variable, set the 'forum_vocabulary' source
-    // property to true so we can know this is the vocabulary used for forums.
+    // property to true so we know this is the vocabulary used by Forum.
     if ($this->variableGet('forum_nav_vocabulary', 0) == $row->getSourceProperty('vid')) {
       $row->setSourceProperty('forum_vocabulary', TRUE);
     }
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d7/Vocabulary.php b/core/modules/taxonomy/src/Plugin/migrate/source/d7/Vocabulary.php
index cc1afa9035..185990185d 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d7/Vocabulary.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d7/Vocabulary.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\taxonomy\Plugin\migrate\source\d7;
 
+use Drupal\migrate\Row;
 use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
 
 /**
@@ -49,6 +50,20 @@ public function fields() {
   /**
    * {@inheritdoc}
    */
+  public function prepareRow(Row $row) {
+    // If the vocabulary being migrated is the one defined in the
+    // 'forum_nav_vocabulary' variable, set the 'forum_vocabulary' source
+    // property to true so we know this is the vocabulary used by Forum.
+    if ($this->variableGet('forum_nav_vocabulary', 0) == $row->getSourceProperty('vid')) {
+      $row->setSourceProperty('forum_vocabulary', TRUE);
+    }
+
+    return parent::prepareRow($row);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getIds() {
     $ids['vid']['type'] = 'integer';
     return $ids;
diff --git a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyVocabularyTest.php b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyVocabularyTest.php
index c7f560c41d..78a00a5285 100644
--- a/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyVocabularyTest.php
+++ b/core/modules/taxonomy/tests/src/Kernel/Migrate/d7/MigrateTaxonomyVocabularyTest.php
@@ -55,7 +55,7 @@ protected function assertEntity($id, $expected_label, $expected_description, $ex
    */
   public function testTaxonomyVocabulary() {
     $this->assertEntity('tags', 'Tags', 'Use tags to group articles on similar topics into categories.', VocabularyInterface::HIERARCHY_DISABLED, 0);
-    $this->assertEntity('forums', 'Forums', 'Forum navigation vocabulary', VocabularyInterface::HIERARCHY_SINGLE, -10);
+    $this->assertEntity('forums', 'Sujet de discussion', 'Forum navigation vocabulary', VocabularyInterface::HIERARCHY_SINGLE, -10);
     $this->assertEntity('test_vocabulary', 'Test Vocabulary', 'This is the vocabulary description', VocabularyInterface::HIERARCHY_SINGLE, 0);
     $this->assertEntity('vocabulary_name_much_longer_than', 'vocabulary name much longer than thirty two characters', 'description of vocabulary name much longer than thirty two characters', VocabularyInterface::HIERARCHY_SINGLE, 0);
   }
