diff --git a/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php b/src/Plugin/Field/FieldWidget/InlineEntityFormBase.php
index 2e875a8..e063140 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;
@@ -353,6 +354,17 @@ 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
@@ -461,4 +473,31 @@ 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.
+   * @param $parent_langcode
+   *   The parent entity language code.
+   */
+  protected function getEntityItemTranslation(ContentEntityInterface $entity, $target_langcode, $parent_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)) {
+      $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($parent_langcode);
+    }
+    // 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 c7ca41b..1fb3be3 100644
--- a/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
+++ b/src/Plugin/Field/FieldWidget/InlineEntityFormComplex.php
@@ -192,6 +192,7 @@ class InlineEntityFormComplex extends InlineEntityFormBase implements ContainerF
 
     // Get the langcode of the parent entity.
     $parent_langcode = $items->getParent()->getValue()->language()->getId();
+    $target_langcode = $form_state->get('langcode') ?: $parent_langcode;
 
     // Determine the wrapper ID for the entire element.
     $wrapper = 'inline-entity-form-' . $this->getIefId();
@@ -232,8 +233,13 @@ 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()) {
+              $item->entity = $this->getEntityItemTranslation($item->entity, $target_langcode, $parent_langcode);
+            }
+
             $form_state->set(['inline_entity_form', $this->getIefId(), 'entities', $delta], array(
               'entity' => $item->entity,
               '_weight' => $delta,
@@ -312,7 +318,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
@@ -510,7 +516,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'])
           )
@@ -533,7 +539,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 e64f664..fc4caf0 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\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
@@ -31,11 +32,19 @@ class InlineEntityFormSimple extends InlineEntityFormBase {
     $this->setIefId(sha1($items->getName() . '-ief-single-' . $delta));
     $entity = NULL;
     if ($items->get($delta)->target_id) {
+      /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
       $entity = $items->get($delta)->entity;
       if (!$entity) {
         $element['warning']['#markup'] = $this->t('Unable to load the referenced entity.');
         return $element;
       }
+
+      if ($entity->isTranslatable()) {
+        // Get the langcode of the parent entity.
+        $parent_langcode = $items->getParent()->getValue()->language()->getId();
+        $target_langcode = $this->getCurrentLangcode($form_state, $items);
+        $entity = $this->getEntityItemTranslation($entity, $target_langcode, $parent_langcode);
+      }
     }
 
     $op = isset($entity) ? 'edit' : 'add';
