diff --git a/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
index 7a8e0fc..b9a5c9c 100644
--- a/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
+++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
@@ -11,6 +11,7 @@ use Drupal\Component\Utility\NestedArray;
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Field\FieldFilteredMarkup;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Core\Field\WidgetBase;
@@ -212,6 +213,7 @@ class InlineParagraphsWidget extends WidgetBase {
       $target_langcode = $this->getCurrentLangcode($form_state, $items);
       if ($paragraphs_entity->language()->getId() != $target_langcode && !$paragraphs_entity->hasTranslation($target_langcode)) {
         $paragraphs_entity->addTranslation($target_langcode, $paragraphs_entity->toArray());
+        $this->setSourceLangcode($paragraphs_entity, $this->getSourceLangcode($form_state, $items));
       }
 
       // Initiate the paragraph with the correct translation.
@@ -219,6 +221,7 @@ class InlineParagraphsWidget extends WidgetBase {
         $paragraphs_entity = $paragraphs_entity->getTranslation($this->getCurrentLangcode($form_state, $items));
       } else {
         $paragraphs_entity = $paragraphs_entity->addTranslation($this->getCurrentLangcode($form_state, $items));
+        $this->setSourceLangcode($paragraphs_entity, $this->getSourceLangcode($form_state, $items));
       }
 
       $element_parents = $parents;
@@ -855,6 +858,44 @@ class InlineParagraphsWidget extends WidgetBase {
   }
 
   /**
+   * Returns source langcode depending on the form state.
+   *
+   * Returns entity language, if the source language is not available on the
+   * form state.
+   *
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   * @param \Drupal\Core\Field\FieldItemListInterface $items
+   *
+   * @return string
+   *   The language code.
+   */
+  protected function getSourceLangcode(FormStateInterface $form_state, FieldItemListInterface $items) {
+    $content_translation = $form_state->get('content_translation');
+    if (!empty($content_translation['source'])) {
+      return $content_translation['source']->getId();
+    }
+    return $items->getEntity()->language()->getId();
+  }
+
+  /**
+   * Sets the source language of the current translation if possible.
+   *
+   * @param \Drupal\Core\Entity\EntityInterface $paragraphs_entity
+   * @param string $langcode
+   */
+  protected function setSourceLangcode(EntityInterface $paragraphs_entity, $langcode) {
+    try {
+      /** @var \Drupal\content_translation\ContentTranslationManagerInterface $content_translation_manager */
+      $content_translation_manager = \Drupal::service('content_translation.manager');
+      if ($content_translation_manager->isEnabled($paragraphs_entity->getEntityTypeId(), $paragraphs_entity->bundle())) {
+        $content_translation_manager->getTranslationMetadata($paragraphs_entity)
+          ->setSource($langcode);
+      }
+    }
+    catch (\Exception $e) { }
+  }
+
+  /**
    * {@inheritdoc}
    */
   public static function addMoreAjax(array $form, FormStateInterface $form_state) {
@@ -1096,6 +1137,22 @@ class InlineParagraphsWidget extends WidgetBase {
         $display->extractFormValues($paragraphs_entity, $element[$item['_original_delta']]['subform'], $form_state);
         $display->validateFormValues($paragraphs_entity, $element[$item['_original_delta']]['subform'], $form_state);
 
+        // Make sure that the paragraph language matches the host entity's
+        // language. For translations this is ensured automatically by calling
+        // $paragraph_entity->addTranslation() in
+        // InlineParagraphsWidget::formElement() above. But if this is not a
+        // translation form the (original) language of the host entity might
+        // have been changed as part of the form submission so we need to update
+        // the paragraph entities accordingly.
+        if ($paragraphs_entity->langcode->value !== $form_state->get('langcode')) {
+          $paragraphs_entity->set('langcode', $form_state->get('langcode'));
+        }
+
+        // Set the source language if creating a new entity.
+        if ($paragraphs_entity->isNew()) {
+          $this->setSourceLangcode($paragraphs_entity, $paragraphs_entity->language()->getId());
+        }
+
         $paragraphs_entity->setNewRevision(TRUE);
         $paragraphs_entity->save();
         $item['target_id'] = $paragraphs_entity->id();
