diff --git a/core/modules/content_translation/content_translation.install b/core/modules/content_translation/content_translation.install
index bc948e1a3a..80488f6bdf 100644
--- a/core/modules/content_translation/content_translation.install
+++ b/core/modules/content_translation/content_translation.install
@@ -17,6 +17,12 @@ function content_translation_install() {
   // hook_module_implements_alter() is run among the last ones.
   module_set_weight('content_translation', 10);
 
+  // Skip the guidance messages about enabling translation features if the
+  // module was installed in the Drupal installation process.
+  if (drupal_installation_attempted()) {
+    return;
+  }
+
   // Translation works when at least two languages are added.
   if (count(\Drupal::languageManager()->getLanguages()) < 2) {
     $t_args = [
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.banner_block.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.banner_block.default.yml
index c2727589d9..adc207ef2a 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.banner_block.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.banner_block.default.yml
@@ -56,5 +56,12 @@ content:
       size: 60
       placeholder: ''
     third_party_settings: {  }
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
 hidden:
   moderation_state: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.basic.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.basic.default.yml
index a60d7db281..d72625e1b3 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.basic.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.basic.default.yml
@@ -28,5 +28,12 @@ content:
       size: 60
       placeholder: ''
     third_party_settings: {  }
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
 hidden:
   moderation_state: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.disclaimer_block.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.disclaimer_block.default.yml
index 386ff59c2a..ac63dc9087 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.disclaimer_block.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.disclaimer_block.default.yml
@@ -36,5 +36,12 @@ content:
       size: 60
       placeholder: ''
     third_party_settings: {  }
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
 hidden:
   moderation_state: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.footer_promo_block.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.footer_promo_block.default.yml
index 81b95045dd..d28eb2b5b2 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.footer_promo_block.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.block_content.footer_promo_block.default.yml
@@ -56,5 +56,12 @@ content:
       size: 60
       placeholder: ''
     third_party_settings: {  }
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
 hidden:
   moderation_state: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.contact_message.feedback.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.contact_message.feedback.default.yml
index ea0722f8ca..140fb22249 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.contact_message.feedback.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.contact_message.feedback.default.yml
@@ -13,6 +13,13 @@ content:
     region: content
     settings: {  }
     third_party_settings: {  }
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   mail:
     weight: 1
     region: content
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.audio.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.audio.default.yml
index 231e7f3bdb..a359bdf5a3 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.audio.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.audio.default.yml
@@ -25,6 +25,13 @@ content:
     third_party_settings: {  }
     type: file_generic
     region: content
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   path:
     type: path
     weight: 30
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.file.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.file.default.yml
index a9fa8831c1..20e25c921a 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.file.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.file.default.yml
@@ -25,6 +25,13 @@ content:
     type: file_generic
     weight: 0
     region: content
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   path:
     type: path
     weight: 4
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.image.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.image.default.yml
index fe6cfed79f..237009bd44 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.image.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.image.default.yml
@@ -27,6 +27,13 @@ content:
     type: image_image
     weight: 0
     region: content
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   path:
     type: path
     weight: 4
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.remote_video.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.remote_video.default.yml
index d0924b7042..baed30de37 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.remote_video.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.remote_video.default.yml
@@ -26,6 +26,13 @@ content:
       placeholder: ''
     third_party_settings: {  }
     region: content
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   path:
     type: path
     weight: 30
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.media.video.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.media.video.default.yml
index b21333f87c..90fb03f73b 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.media.video.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.media.video.default.yml
@@ -25,6 +25,13 @@ content:
     third_party_settings: {  }
     type: file_generic
     region: content
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   path:
     type: path
     weight: 30
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.node.article.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.node.article.default.yml
index bc28702427..cdf5776bf7 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.node.article.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.node.article.default.yml
@@ -50,6 +50,13 @@ content:
       size: 60
       placeholder: ''
     third_party_settings: {  }
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   moderation_state:
     type: moderation_state_default
     weight: 10
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.node.page.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.node.page.default.yml
index 76b8b9fe0b..197fe96ef1 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.node.page.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.node.page.default.yml
@@ -29,6 +29,13 @@ content:
     region: content
     settings: {  }
     third_party_settings: {  }
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   moderation_state:
     type: moderation_state_default
     weight: 8
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.node.recipe.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.node.recipe.default.yml
index f1281c6283..4ba1fb68f3 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.node.recipe.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.node.recipe.default.yml
@@ -108,6 +108,13 @@ content:
     third_party_settings: {  }
     type: entity_reference_autocomplete_tags
     region: content
+  langcode:
+    type: language_select
+    weight: 2
+    region: content
+    settings:
+      include_locked: true
+    third_party_settings: {  }
   moderation_state:
     type: moderation_state_default
     weight: 18
diff --git a/core/profiles/demo_umami/config/install/core.entity_form_display.user.user.default.yml b/core/profiles/demo_umami/config/install/core.entity_form_display.user.user.default.yml
index 6832229268..bcd230c637 100644
--- a/core/profiles/demo_umami/config/install/core.entity_form_display.user.user.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_form_display.user.user.default.yml
@@ -32,4 +32,5 @@ content:
     third_party_settings: {  }
     weight: -1
     region: content
-hidden: {  }
+hidden:
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.banner_block.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.banner_block.default.yml
index 507d046181..7cadd72d9e 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.banner_block.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.banner_block.default.yml
@@ -52,4 +52,5 @@ content:
     third_party_settings: {  }
     type: string
     region: content
-hidden: {  }
+hidden:
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.basic.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.basic.default.yml
index e494882d40..057e01cc93 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.basic.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.basic.default.yml
@@ -18,4 +18,5 @@ content:
     region: content
     settings: {  }
     third_party_settings: {  }
-hidden: {  }
+hidden:
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.disclaimer_block.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.disclaimer_block.default.yml
index 6e8808c4de..92cef66880 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.disclaimer_block.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.disclaimer_block.default.yml
@@ -26,4 +26,5 @@ content:
     third_party_settings: {  }
     type: text_default
     region: content
-hidden: {  }
+hidden:
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.footer_promo_block.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.footer_promo_block.default.yml
index d20a80d776..e962f3bb9d 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.footer_promo_block.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.block_content.footer_promo_block.default.yml
@@ -52,4 +52,5 @@ content:
     third_party_settings: {  }
     type: string
     region: content
-hidden: {  }
+hidden:
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.media.audio.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.media.audio.default.yml
index d77376c920..7de868a262 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.media.audio.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.media.audio.default.yml
@@ -24,6 +24,7 @@ content:
     region: content
 hidden:
   created: true
+  langcode: true
   name: true
   thumbnail: true
   uid: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.media.file.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.media.file.default.yml
index 0081b6d6e6..ba60c216e5 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.media.file.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.media.file.default.yml
@@ -20,6 +20,7 @@ content:
     region: content
 hidden:
   created: true
+  langcode: true
   name: true
   thumbnail: true
   uid: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.media.image.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.media.image.default.yml
index eb285d8c33..2d41440159 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.media.image.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.media.image.default.yml
@@ -22,6 +22,7 @@ content:
     region: content
 hidden:
   created: true
+  langcode: true
   name: true
   thumbnail: true
   uid: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.media.remote_video.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.media.remote_video.default.yml
index cc8c1388c6..6894add2a9 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.media.remote_video.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.media.remote_video.default.yml
@@ -22,6 +22,7 @@ content:
     region: content
 hidden:
   created: true
+  langcode: true
   name: true
   thumbnail: true
   uid: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.media.video.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.media.video.default.yml
index 38606f726a..e33e0c10d3 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.media.video.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.media.video.default.yml
@@ -27,6 +27,7 @@ content:
     region: content
 hidden:
   created: true
+  langcode: true
   name: true
   thumbnail: true
   uid: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card.yml
index 9646012477..44bfbdc6d8 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card.yml
@@ -29,4 +29,5 @@ hidden:
   body: true
   content_moderation_control: true
   field_tags: true
+  langcode: true
   links: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card_common.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card_common.yml
index 3733926870..cbf72d37cb 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card_common.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card_common.yml
@@ -29,4 +29,5 @@ hidden:
   body: true
   content_moderation_control: true
   field_tags: true
+  langcode: true
   links: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card_common_alt.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card_common_alt.yml
index f99a9e939c..c77cd9fb2c 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card_common_alt.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.card_common_alt.yml
@@ -29,4 +29,5 @@ hidden:
   body: true
   content_moderation_control: true
   field_tags: true
+  langcode: true
   links: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.default.yml
index 66a013a76d..fe62b3880c 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.default.yml
@@ -47,3 +47,4 @@ content:
     third_party_settings: {  }
 hidden:
   content_moderation_control: true
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.full.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.full.yml
index 55b9cc35d5..fd32cd90b8 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.full.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.full.yml
@@ -48,3 +48,4 @@ content:
     third_party_settings: {  }
 hidden:
   content_moderation_control: true
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.rss.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.rss.yml
index df4d92d8ec..6f50c19f10 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.rss.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.rss.yml
@@ -22,3 +22,4 @@ hidden:
   content_moderation_control: true
   field_image: true
   field_tags: true
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.teaser.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.teaser.yml
index 23f4a07dd5..d7b80a24e3 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.teaser.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.article.teaser.yml
@@ -49,3 +49,4 @@ content:
     third_party_settings: {  }
 hidden:
   content_moderation_control: true
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.page.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.page.default.yml
index 29e721a67f..e860cf28ef 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.page.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.page.default.yml
@@ -24,3 +24,4 @@ content:
     region: content
 hidden:
   content_moderation_control: true
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.page.teaser.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.page.teaser.yml
index ce8cd320fe..2b17fca843 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.page.teaser.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.page.teaser.yml
@@ -26,3 +26,4 @@ content:
     region: content
 hidden:
   content_moderation_control: true
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card.yml
index 915362cdab..6dadfbca32 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card.yml
@@ -50,4 +50,5 @@ hidden:
   field_recipe_instruction: true
   field_summary: true
   field_tags: true
+  langcode: true
   links: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card_common.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card_common.yml
index 6315fe1f41..49efdcac2b 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card_common.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card_common.yml
@@ -43,4 +43,5 @@ hidden:
   field_recipe_instruction: true
   field_summary: true
   field_tags: true
+  langcode: true
   links: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card_common_alt.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card_common_alt.yml
index 2c099447ca..f3c2af2e07 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card_common_alt.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.card_common_alt.yml
@@ -43,4 +43,5 @@ hidden:
   field_recipe_instruction: true
   field_summary: true
   field_tags: true
+  langcode: true
   links: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.default.yml
index ac80368228..45c01d3dc3 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.default.yml
@@ -112,3 +112,4 @@ content:
     third_party_settings: {  }
 hidden:
   content_moderation_control: true
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.full.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.full.yml
index de50c44443..13c6d3c100 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.full.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.full.yml
@@ -108,4 +108,5 @@ content:
     region: content
 hidden:
   content_moderation_control: true
+  langcode: true
   links: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.teaser.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.teaser.yml
index e149ba9d07..4f93252537 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.teaser.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.node.recipe.teaser.yml
@@ -36,3 +36,4 @@ hidden:
   field_recipe_instruction: true
   field_summary: true
   field_tags: true
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.user.user.compact.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.user.user.compact.yml
index 2ff13ad10f..0cfcf3a111 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.user.user.compact.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.user.user.compact.yml
@@ -23,4 +23,5 @@ content:
     third_party_settings: {  }
     label: hidden
 hidden:
+  langcode: true
   member_for: true
diff --git a/core/profiles/demo_umami/config/install/core.entity_view_display.user.user.default.yml b/core/profiles/demo_umami/config/install/core.entity_view_display.user.user.default.yml
index ef1fdd79ce..0e18a05ea1 100644
--- a/core/profiles/demo_umami/config/install/core.entity_view_display.user.user.default.yml
+++ b/core/profiles/demo_umami/config/install/core.entity_view_display.user.user.default.yml
@@ -24,4 +24,5 @@ content:
       image_link: content
     third_party_settings: {  }
     label: hidden
-hidden: {  }
+hidden:
+  langcode: true
diff --git a/core/profiles/demo_umami/config/install/language.entity.en.yml b/core/profiles/demo_umami/config/install/language.entity.en.yml
new file mode 100644
index 0000000000..7c3305f515
--- /dev/null
+++ b/core/profiles/demo_umami/config/install/language.entity.en.yml
@@ -0,0 +1,8 @@
+langcode: en
+status: true
+dependencies: {  }
+id: en
+label: English
+direction: ltr
+weight: 0
+locked: false
diff --git a/core/profiles/demo_umami/config/install/language.entity.es.yml b/core/profiles/demo_umami/config/install/language.entity.es.yml
new file mode 100644
index 0000000000..2d9fc7e259
--- /dev/null
+++ b/core/profiles/demo_umami/config/install/language.entity.es.yml
@@ -0,0 +1,8 @@
+langcode: en
+status: true
+dependencies: {  }
+id: es
+label: Spanish
+direction: ltr
+weight: 1
+locked: false
diff --git a/core/profiles/demo_umami/config/install/language.entity.und.yml b/core/profiles/demo_umami/config/install/language.entity.und.yml
new file mode 100644
index 0000000000..86b51e5802
--- /dev/null
+++ b/core/profiles/demo_umami/config/install/language.entity.und.yml
@@ -0,0 +1,8 @@
+langcode: en
+status: true
+dependencies: {  }
+id: und
+label: 'Not specified'
+direction: ltr
+weight: 2
+locked: true
diff --git a/core/profiles/demo_umami/config/install/language.entity.zxx.yml b/core/profiles/demo_umami/config/install/language.entity.zxx.yml
new file mode 100644
index 0000000000..8b0c8625f5
--- /dev/null
+++ b/core/profiles/demo_umami/config/install/language.entity.zxx.yml
@@ -0,0 +1,8 @@
+langcode: en
+status: true
+dependencies: {  }
+id: zxx
+label: 'Not applicable'
+direction: ltr
+weight: 3
+locked: true
diff --git a/core/profiles/demo_umami/config/install/language.mappings.yml b/core/profiles/demo_umami/config/install/language.mappings.yml
new file mode 100644
index 0000000000..3bdb4f1027
--- /dev/null
+++ b/core/profiles/demo_umami/config/install/language.mappings.yml
@@ -0,0 +1,11 @@
+map:
+  'no': nb
+  pt: pt-pt
+  zh: zh-hans
+  zh-tw: zh-hant
+  zh-hk: zh-hant
+  zh-mo: zh-hant
+  zh-cht: zh-hant
+  zh-cn: zh-hans
+  zh-sg: zh-hans
+  zh-chs: zh-hans
diff --git a/core/profiles/demo_umami/config/install/language.negotiation.yml b/core/profiles/demo_umami/config/install/language.negotiation.yml
new file mode 100644
index 0000000000..eb1724ad6d
--- /dev/null
+++ b/core/profiles/demo_umami/config/install/language.negotiation.yml
@@ -0,0 +1,11 @@
+session:
+  parameter: language
+url:
+  source: path_prefix
+  prefixes:
+    en: en
+    es: es
+  domains:
+    en: ''
+    es: ''
+selected_langcode: site_default
diff --git a/core/profiles/demo_umami/config/install/language.types.yml b/core/profiles/demo_umami/config/install/language.types.yml
new file mode 100644
index 0000000000..4d48251fdf
--- /dev/null
+++ b/core/profiles/demo_umami/config/install/language.types.yml
@@ -0,0 +1,17 @@
+all:
+  - language_interface
+  - language_content
+  - language_url
+configurable:
+  - language_interface
+negotiation:
+  language_content:
+    enabled:
+      language-interface: 0
+  language_url:
+    enabled:
+      language-url: 0
+      language-url-fallback: 1
+  language_interface:
+    enabled:
+      language-url: 0
diff --git a/core/profiles/demo_umami/config/install/locale.settings.yml b/core/profiles/demo_umami/config/install/locale.settings.yml
new file mode 100644
index 0000000000..c5eb41986a
--- /dev/null
+++ b/core/profiles/demo_umami/config/install/locale.settings.yml
@@ -0,0 +1,13 @@
+cache_strings: true
+translate_english: false
+javascript:
+  directory: languages
+translation:
+  use_source: remote_and_local
+  default_filename: '%project-%version.%language.po'
+  default_server_pattern: 'https://ftp.drupal.org/files/translations/%core/%project/%project-%version.%language.po'
+  overwrite_customized: false
+  overwrite_not_customized: true
+  update_interval_days: 0
+  path: sites/default/files/translations
+  import_enabled: true
diff --git a/core/profiles/demo_umami/demo_umami.info.yml b/core/profiles/demo_umami/demo_umami.info.yml
index 56739991bb..30e1c8a153 100644
--- a/core/profiles/demo_umami/demo_umami.info.yml
+++ b/core/profiles/demo_umami/demo_umami.info.yml
@@ -43,6 +43,11 @@ install:
   - content_moderation
   - workflows
   - demo_umami_tour
+  - language
+  - locale
+  - config_translation
+  - content_translation
 themes:
   - seven
   - umami
+keep_english: true
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/banner_block.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/banner_block.csv
new file mode 100644
index 0000000000..3e9dbbfe30
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/banner_block.csv
@@ -0,0 +1,3 @@
+id,uuid,info,type,field_title,field_content_link_content,field_content_link_title,field_summary,field_banner_image_target_id,field_banner_image_alt
+umami_home_banner,9aadf4a1-ded6-4017-a10d-a5e043396edf,"Umami Home Banner",banner_block,"Super easy vegetarian pasta bake","Super easy vegetarian pasta bake","View recipe","A wholesome pasta bake is the ultimate comfort food. This delicious bake is super quick to prepare and an ideal midweek meal for all the family.",veggie-pasta-bake-hero-umami.jpg,"Mouth watering vegetarian pasta bake with rich tomato sauce and cheese toppings"
+umami_recipes_banner,4c7d58a3-a45d-412d-9068-259c57e40541,"Umami Recipes Banner",banner_block,"Vegan chocolate and nut brownies","Vegan chocolate and nut brownies","View recipe","These sumptuous brownies should be gooey on the inside and crisp on the outside. A perfect indulgence!",vegan-brownies-hero-umami.jpg,"A stack of chocolate and pecan brownies, sprinkled with pecan crumbs and crushed walnut, fresh out of the oven"
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/disclaimer_block.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/disclaimer_block.csv
new file mode 100644
index 0000000000..5bc0cadcaa
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/disclaimer_block.csv
@@ -0,0 +1,2 @@
+id,uuid,info,type,field_disclaimer,field_copyright
+umami_disclaimer,9b4dcd67-99f3-48d0-93c9-2c46648b29de,"Umami Disclaimer",disclaimer_block,"<strong>Umami Magazine & Umami Publications</strong> is a fictional magazine and publisher for illustrative purposes only.","Terms & Conditions"
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/footer_promo_block.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/footer_promo_block.csv
new file mode 100644
index 0000000000..37323f2a6d
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/blocks/footer_promo_block.csv
@@ -0,0 +1,2 @@
+id,uuid,info,type,field_title,field_content_link_content,field_content_link_title,field_summary,field_promo_image_target_id,field_promo_image_alt
+umami_footer_promo,924ab293-8f5f-45a1-9c7f-2423ae61a241,"Umami footer promo",footer_promo_block,"Umami Food Magazine","About Umami","Find out more","Skills and know-how. Magazine exclusive articles, recipes and plenty of reasons to get your copy today.",umami-bundle.png,"3 issue bundle of the Umami food magazine"
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/recipe_categories.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/taxonomy/recipe_categories.csv
similarity index 100%
rename from core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/recipe_categories.csv
rename to core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/taxonomy/recipe_categories.csv
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/tags.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/taxonomy/tags.csv
similarity index 100%
rename from core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/tags.csv
rename to core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/en/taxonomy/tags.csv
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/baking-mishaps-our-troubleshooting-tips.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/baking-mishaps-our-troubleshooting-tips.html
new file mode 100644
index 0000000000..8fe1b182c6
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/baking-mishaps-our-troubleshooting-tips.html
@@ -0,0 +1,13 @@
+<p>spanish-You follow the recipe, you weigh all your ingredients, you use the right oven temperature and you take your time and yet still, your baking comes out with a soggy bottom, fails to rise or just tastes plain horrible. We have come up with a list of the most frustrating baking problems and the techniques you can use to try and avoid them.</p>
+<h2>Your cake failed to rise</h2>
+<p>Don't under any circumstances open the oven door in the middle of the cooking time. The heat will come whooshing out, destroying the chemical reaction taking place inside your cake. Your raising agent needs the heat to become activated and you might kill it off.</p>
+<h2>Your cake is chewy and tough</h2>
+<p>If your light sponge is the consistency of a spare tire, you might have over-mixed your batter. Keep the lightness inside your cake mixture by carefully and gently folding in the ingredients and only to the point they are just mixed. If you over-fold, the gluten in the flour will start to come out and you'll be making bread instead of cake.</p>
+<h2>Your cookies burned</h2>
+<p>A great trick is to use light colored bakeware, rather than black. It is less likely to absorb the heat and transfer it to the bottom of your biscuits. Using baking paper will also help with this. Also, using too much sugar can result in your cookies browning too much and giving them a caramelized look.</p>
+<h2>Split top to your cake or bread</h2>
+<p>Your oven is very likely too hot. If you suspect your oven doesn't keep to the right temperature, invest in a thermometer and check it regularly throughout the cooking. With bread, over-mixing the dough can result in a cracked or split top.</p>
+<h2>The dreaded soggy bottom</h2>
+<p>As mentioned above, the color of your pan is important. In this case, a dark pan will increase the heat at the bottom and give you that crisp underneath that you want. If you are using a flaky pastry, you really need to blind bake it. Putting your pie towards the bottom of the oven will increase the heat reaching that part.</p>
+<h2>Your pastry has shrunk</h2>
+<p>You simply tried to make it stretch too far. When rolling, don't try to make it too thin or too big and when draping over your pan, allow it to settle on its own without stretching it to fit. Or just add more pastry - everyone loves pastry anyway!</p>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/dairy-free-delicious-milk-chocolate.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/dairy-free-delicious-milk-chocolate.html
new file mode 100644
index 0000000000..02f72b75d2
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/dairy-free-delicious-milk-chocolate.html
@@ -0,0 +1,12 @@
+<p>spanish-The calendar is full of excuses for chocolate-lovers to indulge, from religious festivals to birthdays - and even World Chocolate Day on the 7th July. But for those who are vegan, or on dairy-free diets, there is no need to miss out, because there are plenty of delicious vegan chocolate varieties on offer.</p>
+<p>Dairy-free milk chocolate is made in largely the same way as regular chocolate, until the point when the milk is added. Cacao beans are roasted for a couple of hours until they develop a rich flavor. The outer shells are removed, and the interior nibs are ground to make a paste that can be mixed with cocoa butter to produce the desired percentage of chocolate. Flavorings, sugar and milk are added in different quantities to get the type of chocolate being produced. The chocolate is grainy at this point and needs to be mashed until it is smooth - this can take days! Finally, it is tempered through a process of heating and cooling until it is ready to eat.</p>
+<p>So, how do vegan chocolatiers get that creamy milk flavor and texture into their products?</p>
+<h2>Rice milk</h2>
+<p>The flavor of rice milk perfectly complements the cocoa beans and it was one of the first dairy milk alternatives to be used to create vegan milk chocolate. Rice milk is made from rice powder and is sometimes combined with hazelnut milk to create the correct texture and taste that is ideal for producing all kinds of chocolate bars.</p>
+<h2>Coconut milk</h2>
+<p>Coconut milk has to be the perfect ingredient for adding creaminess into a chocolate bar. With high fat levels, a sweet, but not overpowering taste and the correct consistency, coconut milk is a great choice for vegan milk chocolate. Chocolate made in this way will melt wonderfully for drizzling or dipping, and the coconut milk adds a slight tropical flavor that works well with other fruit flavors and nuts.</p>
+<h2>Soy milk</h2>
+<p>Soy has long been the mainstay of vegan and vegetarian diets, as it is rich in protein and is available in a wide variety of textures suitable for all kinds of dishes. Soy milk is widely available and is a great alternative to dairy milk in chocolate. It isn&rsquo;t as rich in fat as some vegan milks, but does have a neutral taste that makes it easy to combine with almost any other flavor.</p>
+<h2>Nut milks</h2>
+<p>Milks made from almonds and hazelnuts are easy to find on supermarket shelves, and are perfect for chocolate production. Like soy milk, they can be quite low in fat and therefore a little less creamy, but they have that nutty taste that goes so well with chocolate of all kinds.</p>
+<p>Many manufacturers will use a combination of the above milks to create the perfect consistency for their product. Using this milk mixture they are able to produce all kinds of milk chocolates, including white chocolate.</p>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/give-it-a-go-and-grow-your-own-herbs.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/give-it-a-go-and-grow-your-own-herbs.html
new file mode 100644
index 0000000000..3f83995e41
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/give-it-a-go-and-grow-your-own-herbs.html
@@ -0,0 +1,15 @@
+<p>spanish-There's nothing like having your own supply of fresh herbs, readily available and close at hand to use while cooking. Whether you have a large garden or a small kitchen window sill, there's always enough room for something home grown.</p>
+<h2>Outdoors</h2>
+<h3>Mint</h3>
+<p>Mint is a great plant to grow as it's hardy and can grow in almost any soil. Mint can grow wild, so keep it contained in a pot or it might spread and take over your whole garden.</p>
+<h3>Sage</h3>
+<p>Like mint, sage is another prolific growing plant and will take over your garden if you let it. Highly aromatic, the sage plant can be planted in a pot or flower bed in well drained soil. The best way to store the herb is to sun dry the leaves and store in a cool, dark cupboard in a sealed container.</p>
+<h3>Rosemary</h3>
+<p>Rosemary plants grow into lovely shrubs. Easily grown from cuttings, rosemary plants do not like freezing temperatures so keep pots or planted bushes near the home to shelter them from the cold. It grows well in pots as it likes dry soil, but can survive well in the ground too. If pruning rosemary to encourage it into a better shape, save the branches and hang them upside down to preserve the flavor and use in food.</p>
+<h2>Indoors</h2>
+<h3>Basil</h3>
+<p>Perfect in sunny spot on a kitchen window sill. Basil is an annual plant, so will die off in the autumn, so it's a good idea to harvest it in the summer if you have an abundance and dry it. Picked basil stays fresh longer if it is placed in water (like fresh flowers). A great way to store basil is to make it into pesto!</p>
+<h3>Chives</h3>
+<p>A versatile herb, chives can grow well indoors. Ensure the plant is watered well, and gets plenty of light. Remember to regularly trim the chives. This prevents the flowers from developing and encourages new growth.</p>
+<h3>Coriander (Cilantro)</h3>
+<p>Coriander can grow indoors, but unlike the other herbs, it doesn't like full sun. If you have a south facing kitchen window, this isn't the place for it. Although not as thirsty as basil, coriander doesn't like dry soil so don't forget to water it! Cut coriander is best stored in the fridge.</p>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/give-your-oatmeal-the-ultimate-makeover.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/give-your-oatmeal-the-ultimate-makeover.html
new file mode 100644
index 0000000000..a81f8b3f6b
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/give-your-oatmeal-the-ultimate-makeover.html
@@ -0,0 +1,43 @@
+<p>
+    spanish-It is vegan, gluten-free, low in fat, high in fiber, and can even lower cholesterol - but oatmeal is boring, right? Well, before you write off that boring jar of oats, you might want to take inspiration from our topping ideas that will take your oatmeal from bland to creatively delicious in just a few minutes.
+</p>
+
+<p>
+Call it oatmeal, porridge, hot cereal, or just plain oats, it is loved the world over; but recently, the humble oat is getting a funky makeover. Long gone are the days of stodgy breakfast bowls of thick gloop, because oats are getting served up as a delicious meal that can suit any time of the day. Trendy build-your-own oatmeal bars are popping up, and they are providing the ultimate oatmeal experience. Diners can choose their oats to be made with milk or water and then go to town with their choice of favorite toppings - sweet, savory, or even spicy.
+</p>
+
+<p>
+It sounds great, doesn’t it? So before you close the cupboard door on that bland-looking jar of oats, we think you should try some of these scrumptious topping ideas to inspire your very own oatmeal makeover.
+</p>
+
+
+<h2>Soaked dried fruit</h2>
+
+<p>
+Sometimes plain dried fruit can be a bit chewy and harsh when combined with creamy oats. But if you simply soak your dried fruit in orange juice overnight, they develop a tang, and they swell up, making them softer and even more delicious. Plus the splash of color can really brighten your day.
+</p>
+
+
+<h2>Porridge crème brûlée</h2>
+
+<p>
+So simple - but why has no one thought of it before? Put your cooked oatmeal into a ramekin, sprinkle with sugar, and pop under the grill. The sugar will harden, giving you the delight of cracking through the surface and scooping out the creamy deliciousness beneath. If you are really professional, you can use a blow torch.
+</p>
+
+<h2>Super seeds</h2>
+
+<p>
+For a more savory meal option, cook your oats with water, a little salt, and sprinkle with toasted seeds. You can choose any that you enjoy, but pumpkin seeds, sesame, linseed, and sunflower seeds are especially good. Some supermarkets also sell seed blends to make the job even easier.
+</p>
+
+<h2>Deconstructed carrot cake</h2>
+
+<p>
+Cook your oats with grated carrots and a little sugar, then top with a sprinkle of cinnamon, chopped walnuts, and a dollop of sweetened cream cheese. If you don’t love this, there’s something wrong with your taste buds.
+</p>
+
+<h2>Dark chocolate</h2>
+
+<p>
+This low-sugar delight will meet all of those chocolate cravings and is the perfect dessert. Add a spoonful of cocoa to your oatmeal as it cooks, then top with a few squares of dark chocolate. As it melts, simply swirl into the bowl as artfully as you can. If you are really decadent, a squirt of whipped cream will add further delights.
+</p>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/lets-hear-it-for-carrots.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/lets-hear-it-for-carrots.html
new file mode 100644
index 0000000000..8936728c78
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/lets-hear-it-for-carrots.html
@@ -0,0 +1,11 @@
+<p>spanish-Let's hear it for the humble carrot! This sweet and healthy &lsquo;everyday&rsquo; veg packs it all in. Great flavor, fantastic color, and if you're one for believing the old story, they can even help you to see better in the dark.</p>
+<p>Who doesn't love cooking with this super versatile root veg? We roast them, boil them, blend them into soups, and grate them into salads. The humble carrot has to be one of our favorite veg choices and it's been grown for thousands of years. But back then you were more likely to find a purple, red, yellow or white carrot and not the orange one we are all so familiar with today.</p>
+<h2>So what happened? When did orange become the preferred color?</h2>
+<p>It was the Dutch during the 17th century who cultivated and made popular the orange variety, most likely because of its brilliant color and higher levels of beta carotene. And it has also been suggested that they were cultivated in tribute to William of Orange, who led the struggle during the Dutch battle for independence.</p>
+<p>For whatever reason, the orange variety has stuck but look out for the &lsquo;heritage&rsquo; varieties at farmers markets and grocers, their mix of purple, yellow, orange and white are especially appealing to cook with and look absolutely great served as a side dish.</p>
+<h2>Nutrition</h2>
+<p>Carrots are rich in beta carotene which your body converts into vitamin A. It's often tricky to know whether cooking vegetables will enhance or reduce their nutritious value and unfortunately there's no simple rule. But in the case of carrots, nutrition is enhanced by consuming them cooked. In fact, it only takes 100 grams of carrots to get more than your daily value of vitamin A.</p>
+<h2>Get them at their best</h2>
+<p>Young carrots, harvested when they are small have an especially sweet flavor and they are absolutely delicious. To cook them you can skip the peeling, give them a good wash and pop them in the steamer for just a few minutes. Carrots will taste the best when they are fresh, so make sure they are firm and bright in color when buying.</p>
+<h2>And that thing about carrots helping you see more in the dark?</h2>
+<p>Of course it's a myth. During World War II the UK Ministry of Food promoted carrots as a super healthy veggie that would improve your ability to see during the blackouts and as an explanation for the successful night missions of UK fighter pilots. In reality, the only truth in the connection between carrots and improved eye sight is that vitamin A does indeed help to maintain vision.</p>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/skip-the-spirits-with-delicious-mocktails.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/skip-the-spirits-with-delicious-mocktails.html
new file mode 100644
index 0000000000..db0bf564f1
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/skip-the-spirits-with-delicious-mocktails.html
@@ -0,0 +1,21 @@
+<p>spanish-Having a cocktail party? Then why not serve up something just as special for those who don't drink alcohol but do want to join in on all the fun? After all, what cocktail party is complete without those incredible looking glasses of mixed fruits, bright colors and of course, the little umbrellas? Do your bit for the environment by ditching the plastic straws and get hold of some great looking alternatives made out of glass, metal, or even bamboo. Don't forget the classic cocktail glasses and cool tumblers to really bring these recipes to life.
+</p>
+<p>
+So, grab the cocktail mixer, skip the spirits, and shake up these deliciously refreshing mocktails that won't leave you or your guests, short on flavor or style.
+</p>
+<h2>Mango-licious</h2>
+<p>This delicious drink has a sophisticated taste that is ideal for adults and the color is perfect for a late summer BBQ.</p>
+<h3>Instructions:</h3>
+<p>Give a few slices of cucumber and a little honey a good shake in a cocktail shaker. Add a spirit measure of mango puree and the juice of one lime. Add some ice and shake for all you're worth. Using a strainer, pour into a fancy glass and top with ginger beer. A few slices of lime and you're ready to go.</p>
+<h2>Mocky Mojito</h2>
+<p>There's nothing quite like a Mojito on a warm day and this version is ideal for a relaxing end of the day moment of bliss in the garden.</p>
+<h3>Instructions:</h3>
+<p>Muddle sugar, a squeeze of lime, and mint leaves in a tall glass, then add a few chunks of ice, top with the juice of a blood orange (for the sunset effect), and add a splash of soda water. Add a few sprigs of mint for an authentic look.</p>
+<h2>Sinless Strawberry Martini</h2>
+<p>Strawberries add a beautiful rich red to this mocktail, while the ginger gives it a little kick. Serve in a proper martini glass, but maybe avoid the olives.</p>
+<h3>Instructions:</h3>
+<p>Muddle a strawberry with a dash a ginger beer and some sugar syrup in a cocktail shaker. Add a capful of elderflower cordial and a few mint leaves. Throw in a slice of orange and lemon and shake with ice. Strain into your glass and enjoy the sweet strawberry flavor.</p>
+<h2>Coconut Queen</h2>
+<p>Crazy about coconuts? Then you'll love the refreshing taste of this coconut based mocktail. The flavors give a hint of the tropical, while the look is grown-up sophistication.</p>
+<h3>Instructions:</h3>
+<p>Add sliced cucumbers, the juice of a lime or two, and some mint leaves to a pitcher of coconut water and leave to chill and infuse for a few hours in the fridge. You can also add some sugar if you fancy this sweeter. Serve poured into glasses full of ice with sliced cucumber and mint leaves. Simple and beautiful.</p>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/the-real-deal-for-supermarket-savvy-shopping.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/the-real-deal-for-supermarket-savvy-shopping.html
new file mode 100644
index 0000000000..c4bf5f5dac
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/the-real-deal-for-supermarket-savvy-shopping.html
@@ -0,0 +1,16 @@
+<p>spanish-This may not surprise you - but your supermarket is a hot bed of marketing mayhem, designed to improve their profit and to encourage the consumer to spend more than they intended. The tricks that all supermarkets employ are sometimes sensible ploys that any retailer should do to improve sales - but some may be more subtle and less obvious than you might think.<p>
+<p>With consumer awareness articles and documentaries frequently picking up on this topic, it's likely the case that retailers find it harder to get away with the more obvious ploys. We are becoming ever more savvy consumers and there's probably not a great deal that gets past us. But here's a few retail tricks to keep in mind when you are rushing around the weekly supermarket stock-up.</p>
+<h2>Lost essentials</h2>
+<p>The layout of your supermarket may make sense to you when you have shopped there for a while. But for newcomers trying to find essentials, it may make very little sense at all. Some supermarkets have noted that people come to their store to buy milk, bread, or eggs and that by hiding these essentials in the far reaches of the store, they encourage the newcomer to wander the aisles - picking up other items as they go.</p>
+<p>Sure, this can be great for nudging the memory on essentials you might otherwise forget, but for saving the pennies it's tough to stick to grabbing only the things you came for and the supermarkets know it!</p>
+<blockquote>
+Our tip: Make your shopping list before leaving the house, checking what you need and sticking to that list. You could be amazed by what you'll save over time.
+</blockquote>
+<h2>Nonsensical multibuys</h2>
+<p>Buy one, get one free; two for &pound;2 and meal deals. They all seem like a great deal. But in some cases these are loss leaders that are positioned to encourage you to take up the deal and buy other stuff while you are there. In other cases, deals for multi-buy or discounts on specific pack sizes might seem like a bargain, until you compare the pricing like-for-like on similar brands or with pack sizes for the same brand. These deals can mean you end up paying less but is it less for something you don't really need and in some cases you can end up paying more for the item. Remember, the supermarkets know you are often in a hurry and might not have the time to take in the full picture.</p>
+<blockquote>
+<p>Our tip: Don't be rushed, take the time to read the small print. The large print will draw you in but if you read the label small print, you should find the price per 100 grams or per ounce/litre and you'll be surprised how often the headline deals are actually more expensive than just buying a different package type or size of the product.</p>
+</blockquote>
+<h2>Understanding our shopping habits</h2>
+<p>The cheapest products in a supermarket are almost always positioned on the bottom of the shelving where you'll need to bend over to pick it up. You also may not be able to easily read the price ticket. Most people will shop on the middle rows because it is easier and often quicker. These are where the highest profit items are kept and they are the ones the supermarkets want you to buy.</p>
+<p>The layout, the music, the colors, and the product types are all decided based on principles laid down by industry experts on people - psychologists and behavioral experts who know how we think. And so the savvy shopper will certainly be able to take advantage of great deals in their weekly shop, but it takes a little time and effort just to be more aware of what we are being encouraged to reach for in the aisles.</p>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/the-umami-guide-to-our-favourite-mushrooms.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/the-umami-guide-to-our-favourite-mushrooms.html
new file mode 100644
index 0000000000..37ed3b8879
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/article_body/the-umami-guide-to-our-favourite-mushrooms.html
@@ -0,0 +1,7 @@
+<p>spanish-We think mushrooms are one of the most enjoyable ingredients to cook with. There are plenty of edible varieties to try, each with their own distinctive shape, size, and taste. And with curious names such as chanterelle, the gypsy, horn of plenty, or hen of the woods, who wouldn't want to know more about cooking with the mighty mushroom?</p>
+<p>One of the best things about mushrooms is their versatility. They can be fried, roasted, grilled, steamed, or even cooked in the microwave. And they can be served as the main ingredient for a dish, or simply added as part of the mix. This makes mushrooms an ideal choice for creating absolutely delicious vegetarian dishes.</p>
+<p>So let's take a look at some of our favorite types of mushroom. You might not have tried cooking with them before but don't let that put you off. With their delicious, distinctive flavors you can easily transform soups, starters, sauces and create amazing pasta, or stir-fry dishes.</p>
+<p>Try the lovely <strong>shiitake</strong>. Used in Asian cooking, these can be purchased dried and rehydrated for a strong, deep flavor. Or buy fresh and add to soups and stir-fries. Not only does this mushroom have an intense flavor, it looks lovely too. The deep brown and smooth shapes will provide texture to your meal. In their dried form and rehydrated, these are the perfect addition for a deep and flavorful stock for a risotto.</p>
+<p>The gorgeous sunny <strong>chanterelle</strong> with its yellow flesh has a fruity flavor - but it is worth mentioning that there are many lookalikes out there and care should be taken to ensure you're eating the right ones. These look great in an omelette or an Asian soup to complement the yellow tones.</p>
+<p>The brown <strong>morel</strong> offers a meaty and distinctive flavor and you'll probably love how extraordinary they look in a meal. The morel is a more popular mushroom during the spring, when their availability is high.</p>
+<p>For delicacy try the <strong>enoki</strong> with its tiny white heads that grow in a bunch. These can even be eaten raw in salads. Finally, you can choose the popular <strong>oyster</strong> mushroom. They are named thus because they look nothing like a mushroom and resemble the innards of an oyster and their sweet flavor is delicious.</p>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/articles.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/articles.csv
new file mode 100644
index 0000000000..91d491a697
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/articles.csv
@@ -0,0 +1,9 @@
+title,body,author,slug,image,alt,tags
+spanish-Give it a go and grow your own herbs,give-it-a-go-and-grow-your-own-herbs.html,Holly Foat,articles/give-it-a-go-and-grow-your-own-herbs,home-grown-herbs.jpg,"Fresh cut herbs including mint, parsley, thyme and dill","14,23,16"
+spanish-Dairy-free and delicious milk chocolate,dairy-free-delicious-milk-chocolate.html,Umami,articles/dairy-free-and-delicious-milk-chocolate,vegan-chocolate.jpg,"A delicious bar of dairy-free milk chocolate, broken into pieces.","27,7"
+spanish-The real deal for supermarket savvy shopping,the-real-deal-for-supermarket-savvy-shopping.html,Megan Collins Quinlan,articles/the-real-deal-for-supermarket-savvy-shopping,supermarket-savvy-umami.jpg,Products presented on supermarket shelving.,"26,24"
+spanish-The Umami guide to our favorite mushrooms,the-umami-guide-to-our-favourite-mushrooms.html,Umami,articles/the-umami-guide-to-our-favourite-mushrooms,mushrooms-umami.jpg,A delightful selection of mushroom varieties laid out on a simple wooden plate.,"18,28"
+spanish-Let's hear it for carrots,lets-hear-it-for-carrots.html,Umami,articles/lets-hear-it-for-carrots,heritage-carrots.jpg,"Purple, orange, yellow and white heritage carrots.","6,28,15"
+spanish-Baking mishaps - our troubleshooting tips,baking-mishaps-our-troubleshooting-tips.html,"Umami",articles/baking-mishaps-our-troubleshooting-tips,chocolate-brownie-umami.jpg,"A delicious chocolate brownie","3,17"
+spanish-Skip the spirits with delicious mocktails,skip-the-spirits-with-delicious-mocktails.html,Megan Collins Quinlan,articles/skip-the-spirits-with-delicious-mocktails,mojito-mocktail.jpg,"Fresh mojito mocktail with garnish of mint leaves, ice, and sliced lime","1,12,20,8,11"
+spanish-Give your oatmeal the ultimate makeover,give-your-oatmeal-the-ultimate-makeover.html,Umami,articles/give-your-oatmeal-the-ultimate-makeover,oatmeal-fruit-syrup-topping.jpg,"Oatmeal topped with a vibrant mix of berries, nuts, and seeds","27,28,19,4,10"
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/banner_block.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/banner_block.csv
new file mode 100644
index 0000000000..ee579cab35
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/banner_block.csv
@@ -0,0 +1,3 @@
+id,uuid,info,type,field_title,field_content_link_content,field_content_link_title,field_summary,field_banner_image_target_id,field_banner_image_alt
+umami_home_banner,9aadf4a1-ded6-4017-a10d-a5e043396edf,"Spanish-Umami Home Banner",banner_block,"Spanish-Super easy vegetarian pasta bake","Super easy vegetarian pasta bake","Spanish-View recipe","A wholesome pasta bake is the ultimate comfort food. This delicious bake is super quick to prepare and an ideal midweek meal for all the family.",veggie-pasta-bake-hero-umami.jpg,"Mouth watering vegetarian pasta bake with rich tomato sauce and cheese toppings"
+umami_recipes_banner,4c7d58a3-a45d-412d-9068-259c57e40541,"Spanish-Umami Recipes Banner",banner_block,"Spanish-Vegan chocolate and nut brownies","Vegan chocolate and nut brownies","Spanish-View recipe","These sumptuous brownies should be gooey on the inside and crisp on the outside. A perfect indulgence!",vegan-brownies-hero-umami.jpg,"A stack of chocolate and pecan brownies, sprinkled with pecan crumbs and crushed walnut, fresh out of the oven"
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/disclaimer_block.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/disclaimer_block.csv
new file mode 100644
index 0000000000..3880836843
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/disclaimer_block.csv
@@ -0,0 +1,2 @@
+id,uuid,info,type,field_disclaimer,field_copyright
+umami_disclaimer,9b4dcd67-99f3-48d0-93c9-2c46648b29de,"Spanish-Umami Disclaimer",disclaimer_block,"Spanish-<strong>Umami Magazine & Umami Publications</strong> is a fictional magazine and publisher for illustrative purposes only.","Terms & Conditions"
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/footer_promo_block.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/footer_promo_block.csv
new file mode 100644
index 0000000000..295b0f862a
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/blocks/footer_promo_block.csv
@@ -0,0 +1,2 @@
+id,uuid,info,type,field_title,field_content_link_content,field_content_link_title,field_summary,field_promo_image_target_id,field_promo_image_alt
+umami_footer_promo,924ab293-8f5f-45a1-9c7f-2423ae61a241,"Spanish-Umami footer promo",footer_promo_block,"Spanish-Umami Food Magazine","About Umami","Spanish-Find out more","Skills and know-how. Magazine exclusive articles, recipes and plenty of reasons to get your copy today.",umami-bundle.png,"3 issue bundle of the Umami food magazine"
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/pages.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/pages.csv
new file mode 100644
index 0000000000..40815a21de
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/pages.csv
@@ -0,0 +1,2 @@
+title,body,author,slug
+Acerca de Umami,"<p> Umami es una revista ficticia de alimentos que se ha creado para demostrar cómo se puede construir un sitio de Drupal con la funcionalidad que se proporciona 'fuera de la caja'. </p> <p> Para obtener más información, visite <a href = 'https: //www.drupal.org/docs/8/umami-drupal-8-demonstration-installation-profile'> https://www.drupal.org/docs/8/umami-drupal-8-demonstration -installation-profile </a>. </p> ",Samuel Adamson,about-umami
\ No newline at end of file
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/chili-sauce-umami.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/chili-sauce-umami.html
new file mode 100644
index 0000000000..1c42430041
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/chili-sauce-umami.html
@@ -0,0 +1,14 @@
+<ol>
+  <li>spanish-Preheat the oven to 400°F/200°C.</li>
+  <li>Finely chop the red onions and sweat gently on a low heat in olive oil for 5 minutes.</li>
+  <li>Peel the garlic and add it to the onions.</li>
+  <li>Meanwhile, chop the bell peppers to 1 inch pieces. Add the bell peppers and tomatoes to a roasting dish, and rub with lemon juice, olive oil and black pepper. Transfer to the oven and roast for 30 minutes.</li>
+  <li>Once the onions and garlic have softened, chop and add the chilies, seeds and all. Mix well and continue to gently fry.</li>
+  <li>Thoroughly wash your hands following handling raw chilies.</li>
+  <li>Once the tomatoes and bell peppers have finished roasting, add them to the pan. Cook for at least 10 minutes, breaking them up with a masher or a hand blender as they simmer. Once broken up, mix in the sugar.</li>
+  <li>Transfer the sauce to a blender and blend until smooth.</li>
+  <li>Return to the pan and add the vinegar and juice of the limes.</li>
+  <li>Cook through for a further 10 minutes, then leave to cool.</li>
+  <li>Transfer to sterilized jars and keep refrigerated.</li>
+  <li>Leave for at least two weeks before tasting.</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/crema-catalana-umami.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/crema-catalana-umami.html
new file mode 100644
index 0000000000..ac130a6fc6
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/crema-catalana-umami.html
@@ -0,0 +1,9 @@
+<ol>
+  <li>spanish-Mix the egg yolks, sugar, and cornstarch with 1/3 of the milk.</li>
+  <li>In a saucepan, boil 2/3 of the milk with the lemon peel and cinnamon.</li>
+  <li>After 3 minutes, remove from the heat and take out the lemon and cinnamon.</li>
+  <li>Slowly add the egg mixture to the hot milk through a strainer to ensure there are no lumps.</li>
+  <li>Return it to the heat until it boils, stirring constantly.</li>
+  <li>Once the mixture has begun to thicken, remove from the heat and put it into individual bowls to cool.</li>
+  <li>For an authentic finish, sprinkle with sugar and brown with a blowtorch or under a preheated broiler to caramelize.</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/mediterranean-quiche-umami.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/mediterranean-quiche-umami.html
new file mode 100644
index 0000000000..fd6cb1d755
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/mediterranean-quiche-umami.html
@@ -0,0 +1,7 @@
+<ol>
+  <li>spanish-Preheat the oven to 400°F/200°C. Starting with the pastry; rub the flour and butter together in a bowl until crumbling like breadcrumbs. Add water, a little at a time, until it forms a dough.</li>
+  <li>Roll out the pastry on a floured board and gently spread over your tin. Place in the fridge for 20 minutes before blind baking for a further 10.</li>
+  <li>Whilst the pastry is cooling, chop and gently cook the onions, garlic and courgette.</li>
+  <li>In a large bowl, add the soya milk, half the parmesan, and the eggs. Gently mix.</li>
+  <li>Once the pastry is cooked, spread the onions, garlic and sun dried tomatoes over the base and pour the eggs mix over. Sprinkle the remaining parmesan and careful lay the feta over the top. Bake for 30 minutes or until golden brown.</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/pizza-umami.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/pizza-umami.html
new file mode 100644
index 0000000000..bf56fe3b78
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/pizza-umami.html
@@ -0,0 +1,7 @@
+<ol>
+  <li>spanish-Preheat the oven to 425°F/220°C. Mix some of the milk and water in a jug, and add the yeast and sugar, then set aside.</li>
+  <li>In a bowl, mix the flour, salt and oil. Slowly add the liquid from the jug and form into a dough.</li>
+  <li>Break the dough in half and shape into two pizza bases. Set aside for about 15 minutes, whilst making the topping.</li>
+  <li>Spread the tomato puree over the pizza bases, chop the basil and rocket and sprinkle over the tomato. Lay the chopped Parma ham on top and add thick slices of mozzarella across the pizza.</li>
+  <li>Cook in the oven directly on the top shelf (with a tray underneath) for 10-12 minutes until the mozzarella is bubbling. Season with salt and pepper and serve.</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/thai-green-curry-umami.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/thai-green-curry-umami.html
new file mode 100644
index 0000000000..84080f8c5d
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/thai-green-curry-umami.html
@@ -0,0 +1,6 @@
+<ol>
+  <li>spanish-In a large wok, brown the chicken until golden, then turn the heat down and gently cook the garlic. Add the chopped green beans and stir.</li>
+  <li>Add the coconut milk, green curry paste and fish sauce. Mix well and slowly simmer.</li>
+  <li>Add the chopped mushrooms and simmer until the chicken (or tofu) is cooked.</li>
+  <li>Serve with jasmine rice and a sprinkle of coriander.</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/vegan-chocolate-nut-brownies.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/vegan-chocolate-nut-brownies.html
new file mode 100644
index 0000000000..1571cbea70
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/vegan-chocolate-nut-brownies.html
@@ -0,0 +1,14 @@
+<ol>
+  <li>spanish-Use a little of the sunflower oil to grease an 8 inch square baking tin (or similar size) and line the tin with greaseproof paper.</li>
+  <li>Preheat the oven to 350°F/180°C.</li>
+  <li>Break approximately 1/3rd of the chocolate bar off and chop into small pieces. Roughly chop 2/3rds of the pecan nuts and mix together with the chopped chocolate. Set aside.</li>
+  <li>For finishing the brownies, chop or crush the remaining pecan nuts and walnuts, mix together and set aside.</li>
+  <li>Melt the remaining chocolate by bringing a couple inches of water to the boil in a small saucepan that is suitably sized for holding a heatproof bowl in the pan opening. Do not allow the bottom of the heatproof bowl to touch the water. Place the chocolate into the bowl to melt, stirring occasionally to ensure the chocolate has fully melted. Once melted, set aside and allow to cool slightly.</li>
+  <li>Whilst the chocolate is melting, begin to sieve the plain flour, coconut flour, and cocoa powder into a large mixing bowl and mix. Once mixed, stir in the baking powder and sugar.</li>
+  <li>Once the chocolate has cooled a little, begin to slowly stir the vanilla essence, sunflower oil, soya milk, and melted chocolate into the flour and cocoa mix.</li>
+  <li>Now stir in the previously chopped chocolate and pecan nuts, ensuring they are stirred evenly into the mixture.</li>
+  <li>Pour the mixture into the baking tin and spread evenly with a spatula.</li>
+  <li>Sprinkle the chopped pecan nuts and walnuts across the top and bake in the centre of the oven for 18 to 23 minutes.</li>
+  <li>Remove from the oven and allow to cool for 45 minutes. Carefully use the edges of the greaseproof paper to lift the brownie out of the tin and place onto a chopping board. With a sharp knife, gently cut into evenly sized pieces.</li>
+  <li>Serve on their own or with some vegan cream or ice cream.</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/veggie-pasta-bake-umami.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/veggie-pasta-bake-umami.html
new file mode 100644
index 0000000000..a369be29f0
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/veggie-pasta-bake-umami.html
@@ -0,0 +1,8 @@
+<ol>
+  <li>spanish-In a large pan, boil the pasta in plenty of water until cooked.</li>
+  <li>Whilst the pasta is cooking, chop the onion and gently fry it with the garlic in a little oil until soft and the onion looks clear.</li>
+  <li>Add the vegetarian sausages. Once browned, remove and chop into chunky bites.</li>
+  <li>Pop the sausages back into the pan and add the tomatoes, sugar, pesto and sun dried tomatoes. Season to taste. Simmer until most of the water from the chopped tomatoes has gone.</li>
+  <li>Drain the pasta and add to the pan with the sausages and tomatoes. Stir in half of the cheddar and transfer to a shallow dish. Sprinkle with the rest of the cheddar and dot the sliced mozzarella over the top.</li>
+  <li>Grill for 10 minutes or until the cheese has melted and started to brown. Serve with basil leaves.</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/victoria-sponge-umami.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/victoria-sponge-umami.html
new file mode 100644
index 0000000000..f41e2dd10b
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/victoria-sponge-umami.html
@@ -0,0 +1,8 @@
+<ol>
+  <li>spanish-Preheat the oven to 350°F/180°C and grease two 8 inch cake tins.</li>
+  <li>In a large bowl, mix the butter and sugar together, then add the eggs, flour and baking powder.</li>
+  <li>Spread the mix evenly between the 2 cake tins.</li>
+  <li>Place both tins in the middle of the preheated oven for 20 minutes, before checking with a knife. When the knife comes out clean, it's ready!</li>
+  <li>Allow to cool in the tins before moving them onto a cooling rack.</li>
+  <li>Add the jam, stack, dust with icing sugar and serve with a big dollop of cream. Enjoy!</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/watercress-soup-umami.html b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/watercress-soup-umami.html
new file mode 100644
index 0000000000..27ce74d25f
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipe_instructions/watercress-soup-umami.html
@@ -0,0 +1,7 @@
+<ol>
+  <li>spanish-Prepare the vegetables by peeling and chopping the potatoes, finely chopping the onions, leeks and garlic.</li>
+  <li>Heat a little oil in a pan and add the chopped vegetables, gently cooking them for about 5 minutes.</li>
+  <li>Add the vegetable stock to the same pan and turn up the heat until simmering, adding the watercress after about 10 minutes. Cook until all the vegetables are soft and easily mashed.</li>
+  <li>Liquidize the soup either with a hand blender or in a mixer, until smooth.</li>
+  <li>If the soup has cooled too much whilst being liquidized, stir in the crème fraîche and reheat before serving (otherwise serve straight away). Season to taste.</li>
+</ol>
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipes.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipes.csv
new file mode 100644
index 0000000000..5ec50bd5bb
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/recipes.csv
@@ -0,0 +1,10 @@
+title,image,alt,summary,author,recipe_category,preparation_time,cooking_time,total_time,difficulty,ingredients,recipe_instruction,number_of_servings,tags,slug
+spanish-Deep mediterranean quiche,mediterranean-quiche-umami.jpg,"A delicious deep layered Mediterranean quiche with basil garnish.",An Italian inspired quiche with sun dried tomatoes and courgette. A perfect light meal for a summer's day.,Umami,3,40,30,70,medium,"For the pastry:,280g plain flour,140g butter,Cold water,For the filling:,1 onion,2 garlic cloves,Half a courgette,450ml soya milk,500g grated parmesan,2 eggs,200g sun dried tomatoes,100g feta",mediterranean-quiche-umami.html,8,"22,13",recipes/deep-mediterranean-quiche
+spanish-Vegan chocolate and nut brownies,vegan-chocolate-nut-brownies.jpg,"A stack of chocolate and pecan brownies, sprinkled with pecan crumbs and crushed walnut, fresh out of the oven","Scrumptious vegan chocolate brownies that are rich, fudgy, and nutty. These delights have a surprise hint of coconut making them the perfect indulgence. Serve warm with a little vanilla dairy-free ice cream!",Umami,4,20,20,40,medium,"6 tbsp sunflower oil, 80g vegan dark chocolate, 170g plain flour, 80g coconut flour, 1 tsp baking powder, 9 tsp cocoa powder, 100g caster sugar, 3 tbsp of maple syrup, 1/4 tsp sea salt, 1 tsp vanilla extract, 230ml unsweetened organic soya milk, 100g pecan nuts, 80g walnut halves",vegan-chocolate-nut-brownies.html,12,"3,7,27,9",recipes/vegan-chocolate-and-nut-brownies
+spanish-Super easy vegetarian pasta bake,veggie-pasta-bake-umami.jpg,Cheesy pasta dish with vegetarian sausages and topped with mozzarella cheese and basil,A wholesome pasta bake is the ultimate comfort food. This delicious bake is super quick to prepare and an ideal midweek meal for all the family.,Umami,3,5,20,25,easy,"400g wholewheat pasta, 1 onion, 2 garlic cloves, 1 pack vegetarian sausages, 400g chopped tomatoes, 50g sliced sun dried tomatoes, 1 pinch sugar, 3 tbsp red pesto, 50g cheddar cheese, Basil or mixed herbs, 100g mozzarella",veggie-pasta-bake-umami.html,4,"28,21,2",recipes/super-easy-vegetarian-pasta-bake
+spanish-Watercress soup,watercress-soup-umami.jpg,Watercress soup with a sprig of coriander as garnish in a white bowl with green trim.,"A wonderfully simple and light soup, making the most of seasonal, local produce. ",Umami,5,10,20,30,easy,"3 bunches watercress,3 potatoes,3 onions,2 leeks,800ml stock,5 tbsp crème fraîche",watercress-soup-umami.html,4,"25,28",recipes/watercress-soup
+spanish-Victoria sponge cake,victoria-sponge-umami.jpg,"A classic, uncut Victoria sponge with a deep filling of butter cream and jam","A traditional Victoria sponge cake, perfect for any afternoon with a cup of tea.",Umami,2,20,20,40,easy,"225g butter or margarine,225g caster sugar,225g self-raising flour,4 eggs,1 tsp baking powder,3 tbsp of jam for the filling,Icing sugar to dust the top,Cream to serve",victoria-sponge-umami.html,10,5,recipes/victoria-sponge-cake
+spanish-Gluten free pizza,pizza-umami.jpg,"Olives, basil, and mozzarella top a gluten free pizza crust with marinara sauce.","A gorgeous and simple gluten free pizza, with deliciously indulgent mozzarella and Parma ham. Can easily be vegetarian by leaving out the ham.",Umami,3,15,15,30,,"400g gluten free flour, 125ml warm water, 125ml milk, 1 sachet dried yeast, 2 tsp sugar, 1 tsp salt, 2 tbsp olive oil, 4 tbsp tomato puree, 1 garlic clove, Fresh basil, 200g mozzarella, 100g rocket, 5 slices Parma ham",pizza-umami.html,4,,recipes/gluten-free-pizza
+spanish-Thai green curry,thai-green-curry-umami.jpg,"A traditional bowl of creamy, aromatic Thai green curry with chunks of chicken in a small bowl with jasmine rice.",A quick and easy version of the classic Thai green curry. Perfect for a midweek meal!,Umami,3,10,15,25,,"400g coconut milk, 400g chicken or tofu, 1 tbsp Thai green curry paste, 1 garlic clove, 2 tsp fish sauce, 400g mushrooms, 200g green beans, Fresh coriander leaves, Jasmine rice",thai-green-curry-umami.html,4,,recipes/thai-green-curry
+spanish-Crema catalana,crema-catalana-umami.jpg,"Typical Catalan dessert made from cream and egg yolks, covered with a traditional layer of caramelized sugar to provide a crispy contrast.",Enjoy this sweet recipe for one of the oldest desserts in Europe. It requires very few ingredients!,Umami,2,10,20,30,,"1l milk, 200g sugar, 6 egg yolks, 30g cornstarch, 1 cinnamon stick, 1 piece lemon peel",crema-catalana-umami.html,8,"13,28",recipes/crema-catalana
+spanish-Fiery chili sauce,chili-sauce-umami.jpg,"An iridescent array of chilies, onions, and garlic, slowly sweating over a low heat","A rich and fiery chili sauce. Take care when handling chili peppers. And serve sparingly!",Umami,1,10,50,60,easy,"2 red onions, 1 lemon, 2 limes, 250ml malt vinegar, 7 garlic cloves, 1 green bell pepper, 1 red bell pepper, 800g cherry tomatoes, 30 mixed chilies, Olive oil, 1 tbsp ground black pepper, 1 tbsp brown sugar",chili-sauce-umami.html,60,28,recipes/fiery-chili-sauce
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/taxonomy/recipe_categories.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/taxonomy/recipe_categories.csv
new file mode 100644
index 0000000000..9985359b47
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/taxonomy/recipe_categories.csv
@@ -0,0 +1,6 @@
+id,term
+1,Acompañamiento
+2,Postre
+3,Plato principal
+4,Tentempié
+5,Entrante
\ No newline at end of file
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/taxonomy/tags.csv b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/taxonomy/tags.csv
new file mode 100644
index 0000000000..fca5cdaeab
--- /dev/null
+++ b/core/profiles/demo_umami/modules/demo_umami_content/default_content/languages/es/taxonomy/tags.csv
@@ -0,0 +1,29 @@
+id,term
+1,Sin alcohol
+2,Horneado
+3,Cocción
+4,Desayuno
+5,Pastel
+6,Zanahorias
+7,Chocolate
+8,Fiesta de coctel
+9,Sin Lactosa
+10,Postre
+11,Fiesta de cena
+12,Bebidas
+13,Huevo
+14,Cultiva los tuyos
+15,Saludable
+16,Hierbas
+17,Aprender a cocinar
+18,Champiñones
+19,Avena
+20,Fiesta
+21,Pastas
+22,Repostería
+23,Estacional
+24,Compras
+25,Sopa
+26,Supermercados
+27,Vegano
+28,Vegetariano
diff --git a/core/profiles/demo_umami/modules/demo_umami_content/src/InstallHelper.php b/core/profiles/demo_umami/modules/demo_umami_content/src/InstallHelper.php
index b434ffe681..2aa8c5fc30 100644
--- a/core/profiles/demo_umami/modules/demo_umami_content/src/InstallHelper.php
+++ b/core/profiles/demo_umami/modules/demo_umami_content/src/InstallHelper.php
@@ -110,8 +110,7 @@ public static function create(ContainerInterface $container) {
    * @throws \Drupal\Core\Entity\EntityStorageException
    */
   public function importContent() {
-    $this->importTerms('tags', 'tags.csv')
-      ->importTerms('recipe_category', 'recipe_categories.csv')
+    $this->importTerms()
       ->importEditors()
       ->importArticles()
       ->importRecipes()
@@ -119,6 +118,67 @@ public function importContent() {
       ->importBlockContent();
   }
 
+  /**
+   * Read Multilingual Content.
+   *
+   * @param string $filename
+   *   Filename to import.
+   *
+   * @return array $header
+   *   Columns in the file being imported
+   *
+   * @return array $data
+   *   All multilingual content that was read from the files.
+   *
+   * @return array $translated_languages
+   *   List of language codes that need to be imported.
+   */
+  protected function readMultilingualContent($filename) {
+    // Find all the language directories available for default content.
+    $module_path = $this->moduleHandler->getModule('demo_umami_content')->getPath();
+    $translated_languages = [];
+    $default_content_path = $module_path . "/default_content/languages/";
+    $dir_handle = opendir($default_content_path);
+    while ($languages_directory = readdir($dir_handle)) {
+      switch ($languages_directory) {
+        case ".":
+          break;
+        case "..":
+          break;
+        default:
+          array_push($translated_languages, $languages_directory);
+      }
+    }
+    closedir($dir_handle);
+
+    // Load all content in all languages.
+    $data = [];
+    foreach ($translated_languages as $language) {
+      if (file_exists($default_content_path . "$language/$filename") &&
+      ($handle = fopen($default_content_path . "$language/$filename", 'r')) !== FALSE) {
+        $first_csv_line = fgetcsv($handle);
+        // Save the header from the English file.
+        if ($language === 'en') {
+          $header = $first_csv_line;
+        }
+        $line_counter = 0;
+        while (($content = fgetcsv($handle)) !== FALSE) {
+          $data[$language][$line_counter] = $content;
+          $line_counter++;
+        }
+        fclose($handle);
+      }
+      else {
+        // Language directory exists, but the file in this language was not found,
+        // remove that language from list list of languages to be translated.
+        $error = error_get_last();
+        $key = array_search($language, $translated_languages);
+        unset($translated_languages[$key]);
+      }
+    }
+    return [$header, $data, $translated_languages];
+  }
+
   /**
    * Imports terms for a given vocabulary and filename.
    *
@@ -133,23 +193,49 @@ public function importContent() {
    * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
    * @throws \Drupal\Core\Entity\EntityStorageException
    */
-  protected function importTerms($vocabulary, $filename) {
+  protected function importTerms() {
     $module_path = $this->moduleHandler->getModule('demo_umami_content')->getPath();
-    $term_storage = $this->entityTypeManager->getStorage('taxonomy_term');
-    if (($handle = fopen($module_path . "/default_content/languages/en/$filename", 'r')) !== FALSE) {
-      $header = fgetcsv($handle);
-      while (($data = fgetcsv($handle)) !== FALSE) {
-        $data = array_combine($header, $data);
-        $term_name = trim($data['term']);
-
-        $term = $term_storage->create([
-          'name' => $term_name,
-          'vid' => $vocabulary,
-          'path' => ['alias' => '/' . Html::getClass($vocabulary) . '/' . Html::getClass($term_name)],
-        ]);
+    $vocabularies = ["tags","recipe_categories"];
+
+    // import all vocabularies
+    foreach ($vocabularies as $vocabulary) {
+
+      // Read all multilingual content from the file.
+      [$header, $terms, $translated_languages] = $this->readMultilingualContent('taxonomy/' . $vocabulary . '.csv');
+
+      // English is no longer needed in the list of languages to translate.
+      $key = array_search('en', $translated_languages);
+      unset($translated_languages[$key]);
+
+      // Start the loop with English (default) terms.
+      $line_counter = 0;
+      foreach ($terms['en'] as $current_term) {
+        $data = array_combine($header, $current_term);
+
+        // Process terms data into term structure.
+        $values = $this->processTerm($data, $vocabulary);
+
+        // Create Term.
+        $term = $this->entityTypeManager->getStorage('taxonomy_term')->create($values);
         $term->save();
         $this->storeCreatedContentUuids([$term->uuid() => 'taxonomy_term']);
         $this->saveTermId($vocabulary, $data['id'], $term->id());
+
+        // Go through all the languages that have translations.
+        foreach ($translated_languages as $translated_language) {
+          $data = array_combine($header, $terms[$translated_language][$line_counter]);
+
+          // Process terms data into term structure.
+          $translated_entity = $this->processTerm($data, $vocabulary);
+
+          // Save term's translation.
+          $term->addTranslation(
+            $translated_language,
+            $translated_entity
+          );
+          $term->save();
+        }
+        $line_counter++;
       }
     }
     return $this;
@@ -221,66 +307,342 @@ protected function importEditors() {
    * @return $this
    */
   protected function importArticles() {
-    $module_path = $this->moduleHandler->getModule('demo_umami_content')
-      ->getPath();
-    if (($handle = fopen($module_path . '/default_content/languages/en/articles.csv', "r")) !== FALSE) {
-      $uuids = [];
-      $header = fgetcsv($handle);
-      while (($data = fgetcsv($handle)) !== FALSE) {
-        $data = array_combine($header, $data);
-        // Prepare content.
-        $values = [
-          'type' => 'article',
-          'title' => $data['title'],
-          'moderation_state' => 'published',
-        ];
-        // Fields mapping starts.
-        // Set Body Field.
-        if (!empty($data['body'])) {
-          $body_path = $module_path . '/default_content/languages/en/article_body/' . $data['body'];
-          $body = file_get_contents($body_path);
-          if ($body !== FALSE) {
-            $values['body'] = [['value' => $body, 'format' => 'basic_html']];
-          }
-        }
-        // Set node alias if exists.
-        if (!empty($data['slug'])) {
-          $values['path'] = [['alias' => '/' . $data['slug']]];
-        }
-        // Set field_tags if exists.
-        if (!empty($data['tags'])) {
-          $values['field_tags'] = [];
-          $tags = explode(',', $data['tags']);
-          foreach ($tags as $tag_id) {
-            if ($tid = $this->getTermId('tags', $tag_id)) {
-              $values['field_tags'][] = ['target_id' => $tid];
-            }
-          }
-        }
-        // Set article author.
-        if (!empty($data['author'])) {
-          $values['uid'] = $this->getUser($data['author']);
-        }
-        // Set Image field.
-        if (!empty($data['image'])) {
-          $path = $module_path . '/default_content/images/' . $data['image'];
-          $values['field_image'] = [
-            'target_id' => $this->createFileEntity($path),
-            'alt' => $data['alt'],
-          ];
-        }
+    $module_path = $this->moduleHandler->getModule('demo_umami_content')->getPath();
+    $filename = 'articles.csv';
+
+    // Read all multilingual content from the file.
+    [$header, $articles, $translated_languages] = $this->readMultilingualContent($filename);
+
+    // English is no longer needed in the list of languages to translate.
+    $key = array_search('en', $translated_languages);
+    unset($translated_languages[$key]);
+
+    // Start the loop with English (default) articles.
+    $uuids = [];
+    $line_counter = 0;
+    foreach ($articles['en'] as $current_article) {
+      $data = array_combine($header, $current_article);
+
+      // Process article data into article structure.
+      $values = $this->processArticle($module_path, $data);
+
+      // Create Node.
+      $node = $this->entityTypeManager->getStorage('node')->create($values);
+      $node->save();
+      $uuids[$node->uuid()] = 'node';
+      $this->storeCreatedContentUuids($uuids);
+
+      // Go through all the languages that have translations.
+      foreach ($translated_languages as $translated_language) {
+        $data = array_combine($header, $articles[$translated_language][$line_counter]);
+
+        // Process article data into article structure.
+        $translated_entity = $this->processArticle($module_path, $data);
 
-        // Create Node.
-        $node = $this->entityTypeManager->getStorage('node')->create($values);
+        // Save node's translation.
+        $node->addTranslation(
+          $translated_language,
+          $translated_entity
+        );
         $node->save();
-        $uuids[$node->uuid()] = 'node';
       }
-      $this->storeCreatedContentUuids($uuids);
-      fclose($handle);
+      $line_counter++;
     }
     return $this;
   }
 
+  /**
+   * Process terms for a given vocabulary and filename.
+   *
+   * @param array $data
+   *   Data of line that was read from the file.
+   * @param string $vocabulary
+   *   Machine name of vocabulary to which we should save terms.
+   *
+   * @return array $values
+   *   Data structured as a term.
+   */
+  protected function processTerm(array $data, $vocabulary) {
+    $term_name = trim($data['term']);
+
+    // Prepare content.
+    $values = [
+      'name' => $term_name,
+      'vid' => $vocabulary,
+      'path' => ['alias' => '/' . Html::getClass($vocabulary) . '/' . Html::getClass($term_name)],
+      'langcode' => 'en',
+    ];
+    return $values;
+  }
+
+  /**
+   * Process pages data into page node structure.
+   *
+   * @param array $data
+   *   Data of line that was read from the file.
+   *
+   * @return array $values
+   *   Data structured as a page node.
+   */
+  protected function processPage(array $data) {
+    // Prepare content.
+    $values = [
+      'type' => 'page',
+      'title' => $data['title'],
+      'moderation_state' => 'published',
+      'langcode' => 'en',
+    ];
+    // Fields mapping starts.
+    // Set Body Field.
+    if (!empty($data['body'])) {
+      $values['body'] = [['value' => $data['body'], 'format' => 'basic_html']];
+    }
+    // Set node alias if exists.
+    if (!empty($data['slug'])) {
+      $values['path'] = [['alias' => '/' . $data['slug']]];
+    }
+    // Set article author.
+    if (!empty($data['author'])) {
+      $values['uid'] = $this->getUser($data['author']);
+    }
+    return $values;
+  }
+
+  /**
+   * Process recipe data into recipe node structure.
+   *
+   * @param string $module_path
+   *   Path of this module
+   * @param array $data
+   *   Data of line that was read from the file.
+   *
+   * @return array $values
+   *   Data structured as a recipe node.
+   */
+  protected function processRecipe($module_path, array $data) {
+    $values = [
+      'type' => 'recipe',
+      // Title field.
+      'title' => $data['title'],
+      'moderation_state' => 'published',
+      'langcode' => 'en',
+    ];
+    // Set article author.
+    if (!empty($data['author'])) {
+      $values['uid'] = $this->getUser($data['author']);
+    }
+    // Set node alias if exists.
+    if (!empty($data['slug'])) {
+      $values['path'] = [['alias' => '/' . $data['slug']]];
+    }
+    // Set field_image field.
+    if (!empty($data['image'])) {
+      $image_path = $module_path . '/default_content/images/' . $data['image'];
+      $values['field_image'] = [
+        'target_id' => $this->createFileEntity($image_path),
+        'alt' => $data['alt'],
+      ];
+    }
+    // Set field_summary Field.
+    if (!empty($data['summary'])) {
+      $values['field_summary'] = [['value' => $data['summary'], 'format' => 'basic_html']];
+    }
+    // Set field_recipe_category if exists.
+    if (!empty($data['recipe_category'])) {
+      $values['field_recipe_category'] = [];
+      $tags = array_filter(explode(',', $data['recipe_category']));
+      foreach ($tags as $tag_id) {
+        if ($tid = $this->getTermId('recipe_category', $tag_id)) {
+          $values['field_recipe_category'][] = ['target_id' => $tid];
+        }
+      }
+    }
+    // Set field_preparation_time Field.
+    if (!empty($data['preparation_time'])) {
+      $values['field_preparation_time'] = [['value' => $data['preparation_time']]];
+    }
+    // Set field_cooking_time Field.
+    if (!empty($data['cooking_time'])) {
+      $values['field_cooking_time'] = [['value' => $data['cooking_time']]];
+    }
+    // Set field_difficulty Field.
+    if (!empty($data['difficulty'])) {
+      $values['field_difficulty'] = $data['difficulty'];
+    }
+    // Set field_number_of_servings Field.
+    if (!empty($data['number_of_servings'])) {
+      $values['field_number_of_servings'] = [['value' => $data['number_of_servings']]];
+    }
+    // Set field_ingredients Field.
+    if (!empty($data['ingredients'])) {
+      $ingredients = explode(',', $data['ingredients']);
+      $values['field_ingredients'] = [];
+      foreach ($ingredients as $ingredient) {
+        $values['field_ingredients'][] = ['value' => $ingredient];
+      }
+    }
+    // Set field_recipe_instruction Field.
+    if (!empty($data['recipe_instruction'])) {
+      $recipe_instruction_path = $module_path . '/default_content/languages/en/recipe_instructions/' . $data['recipe_instruction'];
+      $recipe_instructions = file_get_contents($recipe_instruction_path);
+      if ($recipe_instructions !== FALSE) {
+        $values['field_recipe_instruction'] = [['value' => $recipe_instructions, 'format' => 'basic_html']];
+      }
+    }
+    // Set field_tags if exists.
+    if (!empty($data['tags'])) {
+      $values['field_tags'] = [];
+      $tags = array_filter(explode(',', $data['tags']));
+      foreach ($tags as $tag_id) {
+        if ($tid = $this->getTermId('tags', $tag_id)) {
+          $values['field_tags'][] = ['target_id' => $tid];
+        }
+      }
+    }
+    return $values;
+  }
+
+  /**
+   * Process article data into article node structure.
+   *
+   * @param string $module_path
+   *   Path of this module
+   * @param array $data
+   *   Data of line that was read from the file.
+   *
+   * @return array $values
+   *   Data structured as an article node.
+   */
+  protected function processArticle($module_path, array $data) {
+    // Prepare content.
+    $values = [
+      'type' => 'article',
+      'title' => $data['title'],
+      'moderation_state' => 'published',
+      'langcode' => 'en',
+    ];
+    // Fields mapping starts.
+    // Set Body Field.
+    if (!empty($data['body'])) {
+      $body_path = $module_path . '/default_content/languages/en/article_body/' . $data['body'];
+      $body = file_get_contents($body_path);
+      if ($body !== FALSE) {
+        $values['body'] = [['value' => $body, 'format' => 'basic_html']];
+      }
+    }
+
+    // Set node alias if exists.
+    if (!empty($data['slug'])) {
+      $values['path'] = [['alias' => '/' . $data['slug']]];
+    }
+    // Set article author.
+    if (!empty($data['author'])) {
+      $values['uid'] = $this->getUser($data['author']);
+    }
+    // Set Image field.
+    if (!empty($data['image'])) {
+      $path = $module_path . '/default_content/images/' . $data['image'];
+      $values['field_image'] = [
+        'target_id' => $this->createFileEntity($path),
+        'alt' => $data['alt'],
+      ];
+    }
+    // Set field_tags if exists.
+    if (!empty($data['tags'])) {
+      $values['field_tags'] = [];
+      $tags = explode(',', $data['tags']);
+      foreach ($tags as $tag_id) {
+        if ($tid = $this->getTermId('tags', $tag_id)) {
+          $values['field_tags'][] = ['target_id' => $tid];
+        }
+      }
+    }
+    return $values;
+  }
+
+  /**
+   * Process block_banner data into block_banner block structure.
+   *
+   * @param string $module_path
+   *   Path of this module
+   * @param array $data
+   *   Data of line that was read from the file.
+   *
+   * @return array $values
+   *   Data structured as a block.
+   */
+  protected function processBlock($module_path, array $data, $block_type) {
+
+    switch ($block_type) {
+      case 'banner_block':
+        $nodes = $this->entityTypeManager->getStorage('node')->loadByProperties(['title' => $data['field_content_link_content']]);
+        $node = reset($nodes);
+        $node_of_field_title = $this->aliasManager->getAliasByPath('/node/' . $node->id());
+        $values = [
+          'uuid' => $data['uuid'],
+          'info' => $data['info'],
+          'type' => $data['type'],
+          'field_title' => [
+            'value' => $data['field_title'],
+          ],
+          'field_content_link' => [
+            'uri' => 'internal:' . $node_of_field_title,
+            'title' => $data['field_content_link_title'],
+          ],
+          'field_summary' => [
+            'value' => $data['field_summary'],
+          ],
+          'field_banner_image' => [
+            'target_id' => $this->createFileEntity($module_path . '/default_content/images/' . $data['field_banner_image_target_id']),
+            'alt' => $data['field_banner_image_alt'],
+          ],
+        ];
+        break;
+      case 'disclaimer_block':
+        $values = [
+          'uuid' => $data['uuid'],
+          'info' => $data['info'],
+          'type' => $data['type'],
+          'field_disclaimer' => [
+            'value' => $data['field_disclaimer'],
+            'format' => 'basic_html',
+          ],
+          'field_copyright' => [
+            'value' => '&copy; ' . date("Y") . ' ' . $data['field_copyright'],
+            'format' => 'basic_html',
+          ],
+        ];
+        break;
+      case 'footer_promo_block':
+        $nodes = $this->entityTypeManager->getStorage('node')->loadByProperties(['title' => $data['field_content_link_content']]);
+        $node = reset($nodes);
+        $node_of_field_title = $this->aliasManager->getAliasByPath('/node/' . $node->id());
+        $values = [
+          'uuid' => $data['uuid'],
+          'info' => $data['info'],
+          'type' => $data['type'],
+          'field_title' => [
+            'value' => $data['field_title'],
+          ],
+          'field_content_link' => [
+            'uri' => 'internal:' . $node_of_field_title,
+            'title' => $data['field_content_link_title'],
+          ],
+          'field_summary' => [
+            'value' => $data['field_summary'],
+          ],
+          'field_promo_image' => [
+            'target_id' => $this->createFileEntity($module_path . '/default_content/images/' . $data['field_promo_image_target_id']),
+            'alt' => $data['field_promo_image_alt'],
+          ],
+        ];
+        break;
+      default:
+        break;
+    }
+    return $values;
+  }
+
   /**
    * Imports recipes.
    *
@@ -288,97 +650,45 @@ protected function importArticles() {
    */
   protected function importRecipes() {
     $module_path = $this->moduleHandler->getModule('demo_umami_content')->getPath();
+    $filename = 'recipes.csv';
 
-    if (($handle = fopen($module_path . '/default_content/languages/en/recipes.csv', "r")) !== FALSE) {
-      $header = fgetcsv($handle);
-      $uuids = [];
-      while (($data = fgetcsv($handle)) !== FALSE) {
-        $data = array_combine($header, $data);
-        $values = [
-          'type' => 'recipe',
-          // Title field.
-          'title' => $data['title'],
-          'moderation_state' => 'published',
-        ];
-        // Set article author.
-        if (!empty($data['author'])) {
-          $values['uid'] = $this->getUser($data['author']);
-        }
-        // Set node alias if exists.
-        if (!empty($data['slug'])) {
-          $values['path'] = [['alias' => '/' . $data['slug']]];
-        }
-        // Set field_image field.
-        if (!empty($data['image'])) {
-          $image_path = $module_path . '/default_content/images/' . $data['image'];
-          $values['field_image'] = [
-            'target_id' => $this->createFileEntity($image_path),
-            'alt' => $data['alt'],
-          ];
-        }
-        // Set field_summary Field.
-        if (!empty($data['summary'])) {
-          $values['field_summary'] = [['value' => $data['summary'], 'format' => 'basic_html']];
-        }
-        // Set field_recipe_category if exists.
-        if (!empty($data['recipe_category'])) {
-          $values['field_recipe_category'] = [];
-          $tags = array_filter(explode(',', $data['recipe_category']));
-          foreach ($tags as $tag_id) {
-            if ($tid = $this->getTermId('recipe_category', $tag_id)) {
-              $values['field_recipe_category'][] = ['target_id' => $tid];
-            }
-          }
-        }
-        // Set field_preparation_time Field.
-        if (!empty($data['preparation_time'])) {
-          $values['field_preparation_time'] = [['value' => $data['preparation_time']]];
-        }
-        // Set field_cooking_time Field.
-        if (!empty($data['cooking_time'])) {
-          $values['field_cooking_time'] = [['value' => $data['cooking_time']]];
-        }
-        // Set field_difficulty Field.
-        if (!empty($data['difficulty'])) {
-          $values['field_difficulty'] = $data['difficulty'];
-        }
-        // Set field_number_of_servings Field.
-        if (!empty($data['number_of_servings'])) {
-          $values['field_number_of_servings'] = [['value' => $data['number_of_servings']]];
-        }
-        // Set field_ingredients Field.
-        if (!empty($data['ingredients'])) {
-          $ingredients = explode(',', $data['ingredients']);
-          $values['field_ingredients'] = [];
-          foreach ($ingredients as $ingredient) {
-            $values['field_ingredients'][] = ['value' => $ingredient];
-          }
-        }
-        // Set field_recipe_instruction Field.
-        if (!empty($data['recipe_instruction'])) {
-          $recipe_instruction_path = $module_path . '/default_content/languages/en/recipe_instructions/' . $data['recipe_instruction'];
-          $recipe_instructions = file_get_contents($recipe_instruction_path);
-          if ($recipe_instructions !== FALSE) {
-            $values['field_recipe_instruction'] = [['value' => $recipe_instructions, 'format' => 'basic_html']];
-          }
-        }
-        // Set field_tags if exists.
-        if (!empty($data['tags'])) {
-          $values['field_tags'] = [];
-          $tags = array_filter(explode(',', $data['tags']));
-          foreach ($tags as $tag_id) {
-            if ($tid = $this->getTermId('tags', $tag_id)) {
-              $values['field_tags'][] = ['target_id' => $tid];
-            }
-          }
-        }
+    // Read all multilingual content from the file.
+    [$header, $recipes, $translated_languages] = $this->readMultilingualContent($filename);
 
-        $node = $this->entityTypeManager->getStorage('node')->create($values);
+    // English is no longer needed in the list of languages to translate.
+    $key = array_search('en', $translated_languages);
+    unset($translated_languages[$key]);
+
+    // Start the loop with English (default) recipes.
+    $uuids = [];
+    $line_counter = 0;
+    foreach ($recipes['en'] as $current_page) {
+      $data = array_combine($header, $current_page);
+
+      // Process recipe data into recipe structure.
+      $values = $this->processRecipe($module_path, $data);
+
+      // Create Node.
+      $node = $this->entityTypeManager->getStorage('node')->create($values);
+      $node->save();
+      $uuids[$node->uuid()] = 'node';
+      $this->storeCreatedContentUuids($uuids);
+
+      // Go through all the languages that have translations.
+      foreach ($translated_languages as $translated_language) {
+        $data = array_combine($header, $recipes[$translated_language][$line_counter]);
+
+        // Process recipe data into recipe structure.
+        $translated_entity = $this->processRecipe($module_path, $data);
+
+        // Save node's translation.
+        $node->addTranslation(
+          $translated_language,
+          $translated_entity
+        );
         $node->save();
-        $uuids[$node->uuid()] = 'node';
       }
-      $this->storeCreatedContentUuids($uuids);
-      fclose($handle);
+      $line_counter++;
     }
     return $this;
   }
@@ -389,39 +699,45 @@ protected function importRecipes() {
    * @return $this
    */
   protected function importPages() {
-    if (($handle = fopen($this->moduleHandler->getModule('demo_umami_content')->getPath() . '/default_content/languages/en/pages.csv', "r")) !== FALSE) {
-      $headers = fgetcsv($handle);
-      $uuids = [];
-      while (($data = fgetcsv($handle)) !== FALSE) {
-        $data = array_combine($headers, $data);
+    $module_path = $this->moduleHandler->getModule('demo_umami_content')->getPath();
+    $filename = 'pages.csv';
 
-        // Prepare content.
-        $values = [
-          'type' => 'page',
-          'title' => $data['title'],
-          'moderation_state' => 'published',
-        ];
-        // Fields mapping starts.
-        // Set Body Field.
-        if (!empty($data['body'])) {
-          $values['body'] = [['value' => $data['body'], 'format' => 'basic_html']];
-        }
-        // Set node alias if exists.
-        if (!empty($data['slug'])) {
-          $values['path'] = [['alias' => '/' . $data['slug']]];
-        }
-        // Set article author.
-        if (!empty($data['author'])) {
-          $values['uid'] = $this->getUser($data['author']);
-        }
+    // Read all multilingual content from the file.
+    [$header, $pages, $translated_languages] = $this->readMultilingualContent($filename);
+
+    // English is no longer needed in the list of languages to translate.
+    $key = array_search('en', $translated_languages);
+    unset($translated_languages[$key]);
+
+    // Start the loop with English (default) pages.
+    $line_counter = 0;
+    foreach ($pages['en'] as $current_page) {
+      $data = array_combine($header, $current_page);
+
+      // Process page data into page structure.
+      $values = $this->processPage($data);
+
+      // Create Node.
+      $node = $this->entityTypeManager->getStorage('node')->create($values);
+      $node->save();
+      $uuids[$node->uuid()] = 'node';
+      $this->storeCreatedContentUuids($uuids);
 
-        // Create Node.
-        $node = $this->entityTypeManager->getStorage('node')->create($values);
+      // Go through all the languages that have translations.
+      foreach ($translated_languages as $translated_language) {
+        $data = array_combine($header, $pages[$translated_language][$line_counter]);
+
+        // Process page data into page structure.
+        $translated_entity = $this->processPage($data);
+
+        // Save node's translation.
+        $node->addTranslation(
+          $translated_language,
+          $translated_entity
+        );
         $node->save();
-        $uuids[$node->uuid()] = 'node';
       }
-      $this->storeCreatedContentUuids($uuids);
-      fclose($handle);
+      $line_counter++;
     }
     return $this;
   }
@@ -433,97 +749,48 @@ protected function importPages() {
    */
   protected function importBlockContent() {
     $module_path = $this->moduleHandler->getModule('demo_umami_content')->getPath();
-    $copyright_message = '&copy; ' . date("Y") . ' Terms & Conditions';
-    $block_content_entities = [
-      'umami_home_banner' => [
-        'uuid' => '9aadf4a1-ded6-4017-a10d-a5e043396edf',
-        'info' => 'Umami Home Banner',
-        'type' => 'banner_block',
-        'field_title' => [
-          'value' => 'Super easy vegetarian pasta bake',
-        ],
-        'field_content_link' => [
-          'uri' => 'internal:' . call_user_func(function () {
-            $nodes = $this->entityTypeManager->getStorage('node')->loadByProperties(['title' => 'Super easy vegetarian pasta bake']);
-            $node = reset($nodes);
-            return $this->aliasManager->getAliasByPath('/node/' . $node->id());
-          }),
-          'title' => 'View recipe',
-        ],
-        'field_summary' => [
-          'value' => 'A wholesome pasta bake is the ultimate comfort food. This delicious bake is super quick to prepare and an ideal midweek meal for all the family.',
-        ],
-        'field_banner_image' => [
-          'target_id' => $this->createFileEntity($module_path . '/default_content/images/veggie-pasta-bake-hero-umami.jpg'),
-          'alt' => 'Mouth watering vegetarian pasta bake with rich tomato sauce and cheese toppings',
-        ],
-      ],
-      'umami_recipes_banner' => [
-        'uuid' => '4c7d58a3-a45d-412d-9068-259c57e40541',
-        'info' => 'Umami Recipes Banner',
-        'type' => 'banner_block',
-        'field_title' => [
-          'value' => 'Vegan chocolate and nut brownies',
-        ],
-        'field_content_link' => [
-          'uri' => 'internal:' . call_user_func(function () {
-            $nodes = $this->entityTypeManager->getStorage('node')->loadByProperties(['title' => 'Vegan chocolate and nut brownies']);
-            $node = reset($nodes);
-            return $this->aliasManager->getAliasByPath('/node/' . $node->id());
-          }),
-          'title' => 'View recipe',
-        ],
-        'field_summary' => [
-          'value' => 'These sumptuous brownies should be gooey on the inside and crisp on the outside. A perfect indulgence!',
-        ],
-        'field_banner_image' => [
-          'target_id' => $this->createFileEntity($module_path . '/default_content/images/vegan-brownies-hero-umami.jpg'),
-          'alt' => 'A stack of chocolate and pecan brownies, sprinkled with pecan crumbs and crushed walnut, fresh out of the oven',
-        ],
-      ],
-      'umami_disclaimer' => [
-        'uuid' => '9b4dcd67-99f3-48d0-93c9-2c46648b29de',
-        'info' => 'Umami disclaimer',
-        'type' => 'disclaimer_block',
-        'field_disclaimer' => [
-          'value' => '<strong>Umami Magazine & Umami Publications</strong> is a fictional magazine and publisher for illustrative purposes only.',
-          'format' => 'basic_html',
-        ],
-        'field_copyright' => [
-          'value' => $copyright_message,
-          'format' => 'basic_html',
-        ],
-      ],
-      'umami_footer_promo' => [
-        'uuid' => '924ab293-8f5f-45a1-9c7f-2423ae61a241',
-        'info' => 'Umami footer promo',
-        'type' => 'footer_promo_block',
-        'field_title' => [
-          'value' => 'Umami Food Magazine',
-        ],
-        'field_summary' => [
-          'value' => 'Skills and know-how. Magazine exclusive articles, recipes and plenty of reasons to get your copy today.',
-        ],
-        'field_content_link' => [
-          'uri' => 'internal:' . call_user_func(function () {
-            $nodes = $this->entityTypeManager->getStorage('node')->loadByProperties(['title' => 'About Umami']);
-            $node = reset($nodes);
-            return $this->aliasManager->getAliasByPath('/node/' . $node->id());
-          }),
-          'title' => 'Find out more',
-        ],
-        'field_promo_image' => [
-          'target_id' => $this->createFileEntity($module_path . '/default_content/images/umami-bundle.png'),
-          'alt' => '3 issue bundle of the Umami food magazine',
-        ],
-      ],
-    ];
+    $block_types = ["banner_block", "disclaimer_block", "footer_promo_block"];
+
+    // import all block types
+    foreach ($block_types as $block_type) {
 
-    // Create block content.
-    foreach ($block_content_entities as $values) {
-      $block_content = $this->entityTypeManager->getStorage('block_content')->create($values);
-      $block_content->save();
-      $this->storeCreatedContentUuids([$block_content->uuid() => 'block_content']);
+      // Read all multilingual content from the file.
+      [$header, $blocks, $translated_languages] = $this->readMultilingualContent('blocks/' . $block_type . '.csv');
+
+      // English is no longer needed in the list of languages to translate.
+      $key = array_search('en', $translated_languages);
+      unset($translated_languages[$key]);
+
+      // Start the loop with English (default) blocks.
+      $uuids = [];
+      $line_counter = 0;
+      foreach ($blocks['en'] as $current_block) {
+        $data = array_combine($header, $current_block);
+
+        // Process banner block data into block structure.
+        $values = $this->processBlock($module_path, $data, $block_type);
+
+        // Create Block.
+        $block_content = $this->entityTypeManager->getStorage('block_content')->create($values);
+        $block_content->save();
+        $this->storeCreatedContentUuids([$block_content->uuid() => 'block_content']);
+
+        // Go through all the languages that have translations.
+        foreach ($translated_languages as $translated_language) {
+          $data = array_combine($header, $blocks[$translated_language][$line_counter]);
+
+          // Process banner block data into block structure.
+          $translated_entity = $this->processBlock($module_path, $data, $block_type);
+
+          // Save node's translation.
+          $block_content->addTranslation(
+            $translated_language,
+            $translated_entity
+          );
+          $block_content->save();
+        }
+        $line_counter++;
+      }
     }
     return $this;
   }
