diff --git a/single_content_sync.services.yml b/single_content_sync.services.yml
index 07a86f8..db9dbac 100644
--- a/single_content_sync.services.yml
+++ b/single_content_sync.services.yml
@@ -25,6 +25,8 @@ services:
       - '@plugin.manager.single_content_sync_base_fields_processor'
       - '@event_dispatcher'
       - '@stream_wrapper_manager'
+      - '@state'
+      - '@language_manager'
 
   single_content_sync.file_generator:
     class: Drupal\single_content_sync\ContentFileGenerator
diff --git a/src/ContentExporter.php b/src/ContentExporter.php
index 927e86f..01c9931 100644
--- a/src/ContentExporter.php
+++ b/src/ContentExporter.php
@@ -11,6 +11,7 @@ use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\Core\Serialization\Yaml;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\field\FieldConfigInterface;
 use Drupal\file\FileInterface;
 use Drupal\single_content_sync\Event\ExportEvent;
@@ -227,6 +228,16 @@ class ContentExporter implements ContentExporterInterface {
    * {@inheritdoc}
    */
   public function doExportToArray(FieldableEntityInterface $entity): array {
+    // Switch every entity that enters the exporter to the translation that
+    // matches the current language context. Child entities loaded via
+    // $storage->load*() inside the field processors come back in their
+    // *default* language, which on an English page whose paragraphs were
+    // originally created in French means the export embeds the French copy
+    // of every paragraph/media even though the parent node is English.
+    if ($entity instanceof TranslatableInterface) {
+      $entity = $this->entityRepository->getTranslationFromContext($entity);
+    }
+
     // Add the entity to the entityReferenceCache array.
     $this->addEntityToReferenceCache($entity);
 
diff --git a/src/ContentImporter.php b/src/ContentImporter.php
index 64a4e86..d73e2db 100644
--- a/src/ContentImporter.php
+++ b/src/ContentImporter.php
@@ -11,6 +11,9 @@ use Drupal\Core\Entity\RevisionableInterface;
 use Drupal\Core\Entity\RevisionLogInterface;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\File\FileSystemInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\Messenger\MessengerTrait;
+use Drupal\Core\State\StateInterface;
 use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
 use Drupal\Core\TypedData\TranslatableInterface;
@@ -25,6 +28,7 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 class ContentImporter implements ContentImporterInterface {
 
   use StringTranslationTrait;
+  use MessengerTrait;
 
   /**
    * The entity type manager.
@@ -96,6 +100,20 @@ class ContentImporter implements ContentImporterInterface {
    */
   protected StreamWrapperManagerInterface $streamWrapperManager;
 
+  /**
+   * The state service.
+   *
+   * @var \Drupal\Core\State\StateInterface
+   */
+  protected $state;
+
+  /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected LanguageManagerInterface $languageManager;
+
   /**
    * ContentExporter constructor.
    *
@@ -119,6 +137,10 @@ class ContentImporter implements ContentImporterInterface {
    *   The event dispatcher.
    * @param \Drupal\Core\StreamWrapper\StreamWrapperManagerInterface $stream_wrapper_manager
    *  The stream wrapper manager.
+   * @param \Drupal\Core\State\StateInterface $state
+   *   The state service.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
    */
   public function __construct(
     EntityTypeManagerInterface $entity_type_manager,
@@ -130,7 +152,9 @@ class ContentImporter implements ContentImporterInterface {
     SingleContentSyncFieldProcessorPluginManagerInterface $field_processor_plugin_manager,
     SingleContentSyncBaseFieldsProcessorPluginManagerInterface $entity_base_fields_processor_plugin_manager,
     EventDispatcherInterface $event_dispatcher,
-    StreamWrapperManagerInterface $stream_wrapper_manager
+    StreamWrapperManagerInterface $stream_wrapper_manager,
+    StateInterface $state,
+    LanguageManagerInterface $language_manager
   ) {
     $this->entityTypeManager = $entity_type_manager;
     $this->entityRepository = $entity_repository;
@@ -142,12 +166,22 @@ class ContentImporter implements ContentImporterInterface {
     $this->entityBaseFieldsProcessorPluginManager = $entity_base_fields_processor_plugin_manager;
     $this->eventDispatcher = $event_dispatcher;
     $this->streamWrapperManager = $stream_wrapper_manager;
+    $this->state = $state;
+    $this->languageManager = $language_manager;
   }
 
   /**
    * {@inheritdoc}
    */
   public function doImport(array $content): EntityInterface {
+    $langcode = $this->state->get('import_language', 'und');
+    // When the user opts to import "all" languages, keep the original langcodes
+    // from the exported content and let the module's native multi-translation
+    // import run (see the $content['translations'] loop below). Only rewrite
+    // the langcode when targeting a single specific language.
+    if ($langcode !== 'all') {
+      $content = $this->replace_key_value_recursive($content, 'langcode', $langcode);
+    }
     $storage = $this->entityTypeManager->getStorage($content['entity_type']);
     $definition = $this->entityTypeManager->getDefinition($content['entity_type']);
 
@@ -166,6 +200,56 @@ class ContentImporter implements ContentImporterInterface {
       $entity = $storage->create($values);
     }
 
+    // When importing "all" languages, the content tree can embed entities whose
+    // target language is not configured on this site (e.g. an English page that
+    // references a paragraph which only exists in French). Drupal cannot create
+    // or translate content in a language it does not know, so skip such an
+    // entity entirely: report the invalid language and reuse the existing entity
+    // (if any) so references to it stay valid. Without this, addTranslation()
+    // throws "Invalid translation language (xx) specified" deep in the recursion
+    // and aborts the whole import before anything is saved.
+    if ($langcode === 'all'
+      && $entity instanceof TranslatableInterface
+      && !empty($content['base_fields']['langcode'])
+      && !isset($this->languageManager->getLanguages()[$content['base_fields']['langcode']])
+    ) {
+      $this->messenger()->addError($this->t('Invalid translation language (@langcode) specified.', [
+        '@langcode' => $content['base_fields']['langcode'],
+      ]));
+
+      // Reuse the already-stored entity untouched so its existing translations
+      // are preserved and any reference to it resolves. For a brand-new entity
+      // there is nothing to keep, so persist a bare stub in the site's default
+      // language to keep the reference valid without importing the foreign data.
+      if ($entity->isNew()) {
+        $entity->save();
+      }
+
+      return $entity;
+    }
+
+    // For an existing translatable entity, switch to the translation indicated
+    // by the imported content (or add a new one). Without this, both
+    // importBaseValues() and importCustomValues() would write into whichever
+    // translation Drupal loaded by default, clobbering it and leaving the
+    // target translation incomplete.
+    //
+    // Skip this when importing "all" languages: the native multi-translation
+    // import (the $content['translations'] loop below) iterates through the
+    // translations itself, so this single-translation switch must not fire.
+    if ($langcode !== 'all'
+      && !$entity->isNew()
+      && $entity instanceof TranslatableInterface
+      && !empty($content['base_fields']['langcode'])
+    ) {
+      $target_langcode = $content['base_fields']['langcode'];
+      if ($entity->language()->getId() !== $target_langcode) {
+        $entity = $entity->hasTranslation($target_langcode)
+          ? $entity->getTranslation($target_langcode)
+          : $entity->addTranslation($target_langcode);
+      }
+    }
+
     switch ($content['entity_type']) {
       case 'node':
         if ($entity instanceof RevisionLogInterface) {
@@ -237,7 +321,21 @@ class ContentImporter implements ContentImporterInterface {
 
     // Sync translations of the entity.
     if (isset($content['translations']) && $entity instanceof TranslatableInterface) {
+      $site_languages = $this->languageManager->getLanguages();
       foreach ($content['translations'] as $langcode => $translation_content) {
+        // Skip translations whose language is not configured on this site.
+        // Otherwise addTranslation() throws "Invalid translation language
+        // ($langcode) specified" which, because referenced entities are
+        // imported before their parent is saved, aborts the whole import and
+        // leaves nothing persisted. Reporting and skipping lets the languages
+        // that do exist (e.g. the default translation) import successfully.
+        if (!isset($site_languages[$langcode])) {
+          $this->messenger()->addError($this->t('Invalid translation language (@langcode) specified.', [
+            '@langcode' => $langcode,
+          ]));
+          continue;
+        }
+
         $translated_entity = !$entity->hasTranslation($langcode) ? $entity->addTranslation($langcode) : $entity->getTranslation($langcode);
 
         $this->importBaseValues($translated_entity, $translation_content['base_fields']);
@@ -307,10 +405,18 @@ class ContentImporter implements ContentImporterInterface {
       ];
     }
 
-    // It's possible to export a single translation of the entity. In this case,
-    // we need to load the translation of the entity to import the values.
-    if (isset($values['langcode']) && $entity instanceof TranslatableInterface && $entity->hasTranslation($values['langcode'])) {
-      $entity = $entity->getTranslation($values['langcode']);
+    // It's possible to export a single translation of the entity. Switch to
+    // that translation if it already exists; if it doesn't and the entity
+    // already exists in another language, add a new translation rather than
+    // mutating the loaded one (which would clobber its langcode and data).
+    if (isset($values['langcode']) && $entity instanceof TranslatableInterface) {
+      $target_langcode = $values['langcode'];
+      if ($entity->hasTranslation($target_langcode)) {
+        $entity = $entity->getTranslation($target_langcode);
+      }
+      elseif (!$entity->isNew() && $entity->language()->getId() !== $target_langcode) {
+        $entity = $entity->addTranslation($target_langcode);
+      }
     }
 
     foreach ($values as $field_name => $value) {
@@ -519,4 +625,29 @@ class ContentImporter implements ContentImporterInterface {
       && isset($entity['custom_fields']);
   }
 
+  /**
+   * Recursively replace the value of a specific key in a nested array.
+   *
+   * @param array $array
+   *   The array to process.
+   * @param string $target_key
+   *   The key to search for.
+   * @param mixed $new_value
+   *   The new value to assign to the key.
+   *
+   * @return array
+   *   The modified array.
+   */
+  public function replace_key_value_recursive(array $array, string $target_key, $new_value): array {
+    foreach ($array as $key => &$value) {
+      if ($key === $target_key) {
+        $value = $new_value;
+      }
+      elseif (is_array($value)) {
+        $value = $this->replace_key_value_recursive($value, $target_key, $new_value);
+      }
+    }
+    return $array;
+  }
+
 }
diff --git a/src/ContentSyncHelper.php b/src/ContentSyncHelper.php
index 92e678c..b47f30a 100644
--- a/src/ContentSyncHelper.php
+++ b/src/ContentSyncHelper.php
@@ -220,10 +220,9 @@ class ContentSyncHelper implements ContentSyncHelperInterface {
   public function getDefaultLanguageEntity(ParameterBag $parameters): EntityInterface {
     $entity_uuid = $parameters->getIterator()->current()->uuid();
     $entity_type_id = $parameters->getIterator()->current()->getEntityTypeId();
-    /** @var \Drupal\Core\Entity\EntityInterface $entity */
     $entity = $this->entityRepository->loadEntityByUuid($entity_type_id, $entity_uuid);
 
-    return $entity;
+    return $this->entityRepository->getTranslationFromContext($entity);
   }
 
   /**
diff --git a/src/Form/ContentImportForm.php b/src/Form/ContentImportForm.php
index 7b444cf..e2a6ae2 100644
--- a/src/Form/ContentImportForm.php
+++ b/src/Form/ContentImportForm.php
@@ -5,6 +5,8 @@ namespace Drupal\single_content_sync\Form;
 use Drupal\Component\Utility\Environment;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\State\StateInterface;
 use Drupal\Core\StringTranslation\ByteSizeMarkup;
 use Drupal\single_content_sync\ContentBatchImporter;
 use Drupal\single_content_sync\ContentImporterInterface;
@@ -32,6 +34,20 @@ class ContentImportForm extends FormBase {
    */
   protected ContentSyncHelperInterface $contentSyncHelper;
 
+  /**
+   * The language manager service.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * The state service.
+   *
+   * @var \Drupal\Core\State\StateInterface
+   */
+  protected $state;
+
   /**
    * ContentImportForm constructor.
    *
@@ -39,10 +55,16 @@ class ContentImportForm extends FormBase {
    *   The content importer service.
    * @param \Drupal\single_content_sync\ContentSyncHelperInterface $content_sync_helper
    *   The content sync helper.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
+   * @param \Drupal\Core\State\StateInterface $state
+   *   The state service.
    */
-  public function __construct(ContentImporterInterface $content_importer, ContentSyncHelperInterface $content_sync_helper) {
+  public function __construct(ContentImporterInterface $content_importer, ContentSyncHelperInterface $content_sync_helper, LanguageManagerInterface $language_manager, StateInterface $state) {
     $this->contentImporter = $content_importer;
     $this->contentSyncHelper = $content_sync_helper;
+    $this->languageManager = $language_manager;
+    $this->state = $state;
   }
 
   /**
@@ -51,7 +73,9 @@ class ContentImportForm extends FormBase {
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('single_content_sync.importer'),
-      $container->get('single_content_sync.helper')
+      $container->get('single_content_sync.helper'),
+      $container->get('language_manager'),
+      $container->get('state')
     );
   }
 
@@ -105,6 +129,25 @@ class ContentImportForm extends FormBase {
         ],
       ],
     ];
+    // Get enabled languages.
+    $languages = $this->languageManager->getLanguages();
+    // Offer an "All languages" option at the top so the importer keeps every
+    // translation present in the exported content instead of forcing it into a
+    // single target language (see ContentImporter::doImport()).
+    $options = [
+      'all' => $this->t('All languages (import all translations)'),
+    ];
+
+    foreach ($languages as $langcode => $language) {
+      $options[$langcode] = $language->getName();
+    }
+    // Add the language dropdown field.
+    $form['import_language'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Please select a language to create the imported content into'),
+      '#options' => $options,
+      '#default_value' => $this->languageManager->getDefaultLanguage()->getId(),
+    ];
     $form['actions'] = ['#type' => 'actions'];
     $form['actions']['import'] = [
       '#type' => 'submit',
@@ -131,6 +174,9 @@ class ContentImportForm extends FormBase {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
+    // Get the selected language from the form state.
+    $selected_language = $form_state->getValue('import_language');
+    $this->state->set('import_language', $selected_language);
     // Handle uploaded file first.
     if ($upload_file = $form_state->getValue('upload_fid')) {
       $fid = reset($upload_file);
diff --git a/src/Plugin/SingleContentSyncBaseFieldsProcessor/MenuLinkContent.php b/src/Plugin/SingleContentSyncBaseFieldsProcessor/MenuLinkContent.php
index cb560e2..8bf6242 100644
--- a/src/Plugin/SingleContentSyncBaseFieldsProcessor/MenuLinkContent.php
+++ b/src/Plugin/SingleContentSyncBaseFieldsProcessor/MenuLinkContent.php
@@ -105,6 +105,12 @@ class MenuLinkContent extends SingleContentSyncBaseFieldsProcessorPluginBase imp
       $parent = $this->entityRepository->loadEntityByUuid($entity->getEntityTypeId(), $parent_uuid);
 
       if ($parent instanceof MenuLinkContentInterface) {
+        // Respect language context so the parent is exported in the same
+        // language as the rest of the export. Without this, loadEntityByUuid
+        // returns the parent in its default translation, and an import can
+        // overwrite an existing parent menu link with data from an unrelated
+        // translation (e.g. French data leaking onto the English site).
+        $parent = $this->entityRepository->getTranslationFromContext($parent);
         if ($is_stub) {
           $parent->setSyncing(TRUE);
         }
@@ -129,6 +135,14 @@ class MenuLinkContent extends SingleContentSyncBaseFieldsProcessorPluginBase imp
         $linked_entity = $this->entityTypeManager->getStorage($linked_entity_type_id)
           ->load($linked_entity_id);
 
+        // Respect language context so the link target is exported in the same
+        // language as the rest of the export. load() returns the entity in its
+        // default translation, which would otherwise leak (e.g.) French data
+        // into an English export's menu link target.
+        if ($linked_entity) {
+          $linked_entity = $this->entityRepository->getTranslationFromContext($linked_entity);
+        }
+
         if ($linked_entity instanceof FieldableEntityInterface) {
           // Export partially entity if the export mode is stub or it was
           // already exported in full mode.
diff --git a/src/Plugin/SingleContentSyncBaseFieldsProcessor/Node.php b/src/Plugin/SingleContentSyncBaseFieldsProcessor/Node.php
index 646fa08..73931fc 100644
--- a/src/Plugin/SingleContentSyncBaseFieldsProcessor/Node.php
+++ b/src/Plugin/SingleContentSyncBaseFieldsProcessor/Node.php
@@ -168,6 +168,7 @@ class Node extends SingleContentSyncBaseFieldsProcessorPluginBase implements Con
     // Export content menu link item if available.
     if (!empty($menu_link['entity_id']) && ($menu_link_entity = $storage->load($menu_link['entity_id']))) {
       assert($menu_link_entity instanceof MenuLinkContentInterface);
+      $menu_link_entity = $this->entityRepository->getTranslationFromContext($menu_link_entity);
 
       // Avoid infinitive loop, export menu link only once.
       if (!$this->exporter->isReferenceCached($menu_link_entity)) {
@@ -213,6 +214,7 @@ class Node extends SingleContentSyncBaseFieldsProcessorPluginBase implements Con
     else {
       $book = $storage->load($node->book['bid']);
       assert($book instanceof NodeInterface);
+      $book = $this->entityRepository->getTranslationFromContext($book);
       $base_fields['book']['bid'] = [
         'uuid' => $book->uuid(),
         'entity_type' => $book->getEntityTypeId(),
@@ -224,6 +226,7 @@ class Node extends SingleContentSyncBaseFieldsProcessorPluginBase implements Con
     if ($node->book['pid'] !== '0') {
       $parent = $storage->load($node->book['pid']);
       assert($parent instanceof NodeInterface);
+      $parent = $this->entityRepository->getTranslationFromContext($parent);
       $base_fields['book']['pid'] = [
         'uuid' => $parent->uuid(),
         'entity_type' => $parent->getEntityTypeId(),
@@ -254,6 +257,7 @@ class Node extends SingleContentSyncBaseFieldsProcessorPluginBase implements Con
 
       $parent = $storage->load($node->book["p{$i}"]);
       assert($parent instanceof NodeInterface);
+      $parent = $this->entityRepository->getTranslationFromContext($parent);
       $base_fields['book']["p{$i}"] = [
         'uuid' => $parent->uuid(),
         'entity_type' => $parent->getEntityTypeId(),
diff --git a/src/Plugin/SingleContentSyncBaseFieldsProcessor/TaxonomyTerm.php b/src/Plugin/SingleContentSyncBaseFieldsProcessor/TaxonomyTerm.php
index b24e372..a8695c0 100644
--- a/src/Plugin/SingleContentSyncBaseFieldsProcessor/TaxonomyTerm.php
+++ b/src/Plugin/SingleContentSyncBaseFieldsProcessor/TaxonomyTerm.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\single_content_sync\Plugin\SingleContentSyncBaseFieldsProcessor;
 
+use Drupal\Core\Entity\EntityRepositoryInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\single_content_sync\ContentExporterInterface;
@@ -27,6 +28,13 @@ class TaxonomyTerm extends SingleContentSyncBaseFieldsProcessorPluginBase implem
    */
   protected ContentExporterInterface $exporter;
 
+  /**
+   * The entity repository service.
+   *
+   * @var \Drupal\Core\Entity\EntityRepositoryInterface
+   */
+  protected EntityRepositoryInterface $entityRepository;
+
   /**
    * Constructs new TaxonomyTerm plugin instance.
    *
@@ -38,11 +46,14 @@ class TaxonomyTerm extends SingleContentSyncBaseFieldsProcessorPluginBase implem
    *   The plugin implementation definition.
    * @param \Drupal\single_content_sync\ContentExporterInterface $exporter
    *   The content exporter service.
+   * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
+   *   The entity repository service.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, ContentExporterInterface $exporter) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, ContentExporterInterface $exporter, EntityRepositoryInterface $entity_repository) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->exporter = $exporter;
+    $this->entityRepository = $entity_repository;
   }
 
   /**
@@ -54,6 +65,7 @@ class TaxonomyTerm extends SingleContentSyncBaseFieldsProcessorPluginBase implem
       $plugin_id,
       $plugin_definition,
       $container->get('single_content_sync.exporter'),
+      $container->get('entity.repository'),
     );
   }
 
@@ -67,6 +79,10 @@ class TaxonomyTerm extends SingleContentSyncBaseFieldsProcessorPluginBase implem
       /** @var \Drupal\taxonomy\TermInterface $parent_entity */
       $parent_entity = $entity->get('parent')->entity;
 
+      // Respect language context so the parent term is exported in the same
+      // language as the rest of the export, rather than its default language.
+      $parent_entity = $this->entityRepository->getTranslationFromContext($parent_entity);
+
       if ($entity->isSyncing() || $this->exporter->isReferenceCached($parent_entity)) {
         $parent_entity->setSyncing(TRUE);
         $parent = [
diff --git a/src/Plugin/SingleContentSyncFieldProcessor/EntityReference.php b/src/Plugin/SingleContentSyncFieldProcessor/EntityReference.php
index 57d6770..020beb5 100644
--- a/src/Plugin/SingleContentSyncFieldProcessor/EntityReference.php
+++ b/src/Plugin/SingleContentSyncFieldProcessor/EntityReference.php
@@ -9,6 +9,7 @@ use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\single_content_sync\ContentExporterInterface;
 use Drupal\single_content_sync\ContentImporterInterface;
 use Drupal\single_content_sync\SingleContentSyncFieldProcessorPluginBase;
@@ -135,10 +136,30 @@ class EntityReference extends SingleContentSyncFieldProcessorPluginBase implemen
       $storage = $this->entityTypeManager->getStorage($entity_type);
       $entities = $storage->loadMultiple($ids);
       foreach ($entities as $child_entity) {
+        // Switch the referenced entity to the translation matching the current
+        // language context. loadMultiple() returns entities in their default
+        // language, so on an English page a French-default entity would be
+        // exported as French in the reference-cached (stub) branch below.
+        if ($child_entity instanceof TranslatableInterface) {
+          $child_entity = $this->entityRepository->getTranslationFromContext($child_entity);
+        }
         if ($child_entity instanceof FieldableEntityInterface) {
           // Avoid exporting the same entity multiple times.
           if (!$this->exporter->isReferenceCached($child_entity)) {
             if (isset($skip_reference_settings[$entity_type]) && $skip_reference_settings[$entity_type] === $entity_type) {
+              // This reference type is configured to be skipped, so we must not
+              // export the full referenced entity. Still export a uuid stub so
+              // the import can re-link to the existing entity on the target by
+              // uuid instead of dropping the reference entirely. Without this,
+              // e.g. content-push cards whose target node lives in a skipped
+              // node-reference field would import with an empty reference and
+              // render blank.
+              $value[] = [
+                'uuid' => $child_entity->uuid(),
+                'entity_type' => $child_entity->getEntityTypeId(),
+                'base_fields' => $this->exporter->exportBaseValues($child_entity),
+                'bundle' => $child_entity->bundle(),
+              ];
               continue;
             }
             // Export content entity relation.
diff --git a/src/Plugin/SingleContentSyncFieldProcessor/Link.php b/src/Plugin/SingleContentSyncFieldProcessor/Link.php
index ec4efc6..621eb0c 100644
--- a/src/Plugin/SingleContentSyncFieldProcessor/Link.php
+++ b/src/Plugin/SingleContentSyncFieldProcessor/Link.php
@@ -9,6 +9,7 @@ use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\single_content_sync\Annotation\SingleContentSyncFieldProcessor;
 use Drupal\single_content_sync\ContentExporterInterface;
 use Drupal\single_content_sync\ContentImporterInterface;
@@ -147,6 +148,14 @@ class Link extends SingleContentSyncFieldProcessorPluginBase implements Containe
           continue;
         }
 
+        // Switch the linked entity to the translation matching the current
+        // language context. Loading by id returns the entity in its default
+        // language, so on an English page a French-default node would be
+        // embedded as French in both the stub and full export branches below.
+        if ($entity instanceof TranslatableInterface) {
+          $entity = $this->entityRepository->getTranslationFromContext($entity);
+        }
+
         if ($export_mode === 'stub') {
           $values[$delta]['linked_entity'] = [
             'uuid' => $entity->uuid(),
diff --git a/src/Plugin/SingleContentSyncFieldProcessor/TextField.php b/src/Plugin/SingleContentSyncFieldProcessor/TextField.php
index 7a62383..94e852c 100644
--- a/src/Plugin/SingleContentSyncFieldProcessor/TextField.php
+++ b/src/Plugin/SingleContentSyncFieldProcessor/TextField.php
@@ -9,6 +9,7 @@ use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\TempStore\PrivateTempStore;
+use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\file\FileInterface;
 use Drupal\media\MediaInterface;
 use Drupal\single_content_sync\ContentExporterInterface;
@@ -150,6 +151,14 @@ class TextField extends SingleContentSyncFieldProcessorPluginBase implements Con
           continue;
         }
 
+        // Switch the linked entity to the translation matching the current
+        // language context. loadEntityByUuid() returns the entity in its
+        // default language, so on an English page a French-default entity would
+        // be embedded as French in the stub/cached branches below.
+        if ($linked_entity instanceof TranslatableInterface) {
+          $linked_entity = $this->entityRepository->getTranslationFromContext($linked_entity);
+        }
+
         // Only export base fields.
         if ($export_mode === 'stub') {
           $embed_entities[] = [
