diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php b/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
index e538985..cced534 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
@@ -10,6 +10,7 @@ namespace Drupal\inline_entity_form\Plugin\Field\FieldWidget;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
+use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\WidgetBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
@@ -311,6 +312,18 @@ abstract class InlineEntityFormBase extends WidgetBase implements ContainerFacto
   }
 
   /**
+   * Gets current language code from the form state or item.
+   * @todo Test both use cases: reference field itself translatable and non-translatable.
+   *
+   * @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
diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
index e67008f..65439f0 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
@@ -193,6 +193,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
 
     // Get the langcode of the parent entity.
     $parent_langcode = $items->getParent()->getValue()->language()->getId();
+    $target_langcode = $parent_langcode;
 
     // Determine the wrapper ID for the entire element.
     $wrapper = 'inline-entity-form-' . $this->getIefId();
@@ -233,8 +234,24 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
       $form_state->set(['inline_entity_form', $this->getIefId(), 'entities'], array());
 
       if (count($items)) {
+        $target_langcode = $this->getCurrentLangcode($form_state, $items);
         foreach ($items as $delta => $item) {
           if ($item->entity && is_object($item->entity)) {
+            if ($item->entity->isTranslatable()) {
+              // If target translation is not yet available, populate it with data from the original entity.
+              if ($item->entity->language()->getId() != $target_langcode && !$item->entity->hasTranslation($target_langcode)) {
+                $item->entity = $item->entity->addTranslation($target_langcode, $item->entity->toArray());
+                if ($item->entity->getEntityType()->isRevisionable()) {
+                  $item->entity->setRevisionTranslationAffected(NULL);
+                }
+                $metadata = \Drupal::service('content_translation.manager')->getTranslationMetadata($item->entity);
+                $metadata->setSource($parent_langcode);
+              }
+        
+              // Initiate the entity with the correct translation.
+              $item->entity = $item->entity->getTranslation($target_langcode);
+            }
+            
             $form_state->set(['inline_entity_form', $this->getIefId(), 'entities', $delta], array(
               'entity' => $item->entity,
               '_weight' => $delta,
@@ -310,7 +327,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
             'inline_entity_form' => $this->getInlineEntityForm(
               $value['form'],
               $target_type,
-              $parent_langcode,
+              $target_langcode,
               $key,
               array_merge($parents,  ['inline_entity_form', 'entities', $key, 'form']),
               $entity->bundle(),
@@ -510,7 +527,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
           'inline_entity_form' => $this->getInlineEntityForm(
             'add',
             $target_type,
-            $parent_langcode,
+            $target_langcode,
             NULL,
             array_merge($parents, ['inline_entity_form']),
             $this->determineBundle($form_state)
@@ -534,7 +551,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,
           // Add the pre_render callback that powers the #fieldset form element key,
           // which moves the element to the specified fieldset without modifying its
           // position in $form_state->get('values').
diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php b/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
index 0ef0748..f9fc40f 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormSimple.php
@@ -42,6 +42,21 @@ class InlineEntityFormSimple extends InlineEntityFormBase {
     if ($items->get($delta)->target_id) {
       $entity = $this->entityManager->getStorage($entity_type)->load($items->get($delta)->target_id);
       if ($entity) {
+        if ($entity->isTranslatable()) {
+          $target_langcode = $this->getCurrentLangcode($form_state, $items);
+          // 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)) {
+            $entity = $entity->addTranslation($target_langcode, $entity->toArray());
+            if ($entity->getEntityType()->isRevisionable()) {
+              $entity->setRevisionTranslationAffected(NULL);
+            }
+            $metadata = \Drupal::service('content_translation.manager')->getTranslationMetadata($entity);
+            $metadata->setSource($parent_langcode);
+          }
+          // Initiate the entity with the correct translation.
+          $entity = $entity->getTranslation($target_langcode);
+        }
+        
         $element['inline_entity_form'] = $this->getInlineEntityForm(
           'edit',
           $entity_type,
