diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php b/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
index 7fdb07e..1ec442f 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\inline_entity_form\Plugin\Field\FieldWidget;
 
+use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
@@ -325,7 +326,11 @@ abstract class InlineEntityFormBase extends WidgetBase implements ContainerFacto
         'entities' => [],
       ];
       // Store the $items entities in the widget state, for futher manipulation.
+      $target_langcode = $this->getCurrentLangcode($form_state, $items);
       foreach ($items as $delta => $item) {
+        if ($item->entity->isTranslatable()) {
+          $item->entity = $this->getEntityItemTranslation($item->entity, $target_langcode);
+        }
         $entity = $item->entity;
         // The $entity can be NULL if the reference is broken.
         if ($entity) {
@@ -384,6 +389,16 @@ abstract class InlineEntityFormBase extends WidgetBase implements ContainerFacto
   }
 
   /**
+   * Gets current language code from the form state or item.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   * @param \Drupal\Core\Field\FieldItemListInterface $items
+   * @return string
+   */
+  protected function getCurrentLangcode(FormStateInterface $form_state, FieldItemListInterface $items) {
+    return $form_state->get('langcode') ?: $items->getEntity()->language()->getId();
+  }
+
+  /**
    * Adds submit callbacks to the inline entity form.
    *
    * @param array $element
@@ -492,4 +507,30 @@ abstract class InlineEntityFormBase extends WidgetBase implements ContainerFacto
     return !empty($create_bundles);
   }
 
+  /**
+   * Gets the translation for the entity item.
+   *
+   * @param \Drupal\Core\Entity\ContentEntityInterface
+   *   The entity for an IEF item.
+   * @param $target_langcode
+   *   The target language code.
+   */
+  protected function getEntityItemTranslation(ContentEntityInterface $entity, $target_langcode) {
+    // If target translation is not yet available, populate it with data from the original entity.
+    if ($entity->language()->getId() != $target_langcode && !$entity->hasTranslation($target_langcode)) {
+      $original_language = $entity->language()->getId();
+      $entity = $entity->addTranslation($target_langcode, $entity->toArray());
+      if ($entity->getEntityType()->isRevisionable()) {
+        $entity->setRevisionTranslationAffected(NULL);
+      }
+
+      /** @var \Drupal\content_translation\ContentTranslationManagerInterface $translation_manager */
+      $translation_manager = \Drupal::service('content_translation.manager');
+      $metadata = $translation_manager->getTranslationMetadata($entity);
+      $metadata->setSource($original_language);
+    }
+    // Return the entity with the correct translation.
+    return $entity->getTranslation($target_langcode);
+  }
+
 }
diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
index dbed344..2581db1 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
@@ -190,9 +190,6 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
     // a consistent and relatively short length while maintaining uniqueness.
     $this->setIefId(sha1(implode('-', $parents)));
 
-    // Get the langcode of the parent entity.
-    $parent_langcode = $items->getParent()->getValue()->language()->getId();
-
     // Determine the wrapper ID for the entire element.
     $wrapper = 'inline-entity-form-' . $this->getIefId();
 
@@ -208,6 +205,8 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
 
     $element['#attached']['library'][] = 'inline_entity_form/widget';
 
+    $target_langcode = $this->getCurrentLangcode($form_state, $items);
+
     $this->prepareFormState($form_state, $items);
     $entities = $form_state->get(['inline_entity_form', $this->getIefId(), 'entities']);
 
@@ -269,7 +268,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
             'inline_entity_form' => $this->getInlineEntityForm(
               $value['form'],
               $entity->bundle(),
-              $parent_langcode,
+              $target_langcode,
               $key,
               array_merge($parents,  ['inline_entity_form', 'entities', $key, 'form']),
               $entity
@@ -468,7 +467,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
           'inline_entity_form' => $this->getInlineEntityForm(
             'add',
             $this->determineBundle($form_state),
-            $parent_langcode,
+            $target_langcode,
             NULL,
             array_merge($parents, ['inline_entity_form'])
           )
@@ -491,7 +490,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
           // Pass the current entity type.
           '#entity_type' => $target_type,
           // Pass the langcode of the parent entity,
-          '#parent_language' => $parent_langcode,
+          '#parent_language' => $target_langcode,
           // Pass the widget specific labels.
           '#ief_labels' => $this->getEntityTypeLabels(),
         );
diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php b/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
index 2944ea6..006339e 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\inline_entity_form\Plugin\Field\FieldWidget;
 
+use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
@@ -40,7 +41,16 @@ class InlineEntityFormSimple extends InlineEntityFormBase {
       $element['warning']['#markup'] = $this->t('Unable to load the referenced entity.');
       return $element;
     }
+
+    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
     $entity = $item->entity;
+
+    if ($entity->isTranslatable()) {
+      // Get the langcode of the parent entity.
+      $target_langcode = $this->getCurrentLangcode($form_state, $items);
+      $entity = $this->getEntityItemTranslation($entity, $target_langcode);
+    }
+
     $op = $entity ? 'edit' : 'add';
     $language = $items->getParent()->getValue()->language()->getId();
     $parents = array_merge($element['#field_parents'], [
