diff --git a/core/modules/path/path.module b/core/modules/path/path.module
index 182c6a9..aad4bd8 100644
--- a/core/modules/path/path.module
+++ b/core/modules/path/path.module
@@ -8,7 +8,9 @@
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\TypedData\TranslatableInterface;
 
 /**
  * Implements hook_help().
@@ -76,3 +78,70 @@ function path_entity_base_field_info(EntityTypeInterface $entity_type) {
     return $fields;
   }
 }
+
+/**
+ * Implements hook_entity_storage_load().
+ */
+function path_entity_storage_load(array $entities, $entity_type) {
+  /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */
+  $field_manager = \Drupal::service('entity_field.manager');
+  $definitions = $field_manager->getBaseFieldDefinitions($entity_type);
+
+  // No definitions were returned.
+  if (!$definitions) {
+    return;
+  }
+
+  // Get any path fields.
+  $path_fields = [];
+  foreach ($definitions as $definition) {
+    if ($definition->getType() == 'path') {
+      $path_fields[] = $definition;
+    }
+  }
+
+  // No path fields were returned.
+  if (!$path_fields) {
+    return;
+  }
+
+  /** @var \Drupal\Core\Entity\EntityInterface $entity */
+  foreach ($entities as $entity) {
+    $paths = [];
+    $conditions = ['source' => '/' . $entity->urlInfo()->getInternalPath()];
+    if ($entity instanceof TranslatableInterface) {
+      /*if ($entity->language()->getId() != LanguageInterface::LANGCODE_NOT_SPECIFIED) {
+        $conditions['langcode'] = $entity->language()->getId();
+      }*/
+      $lang_codes = $entity->getTranslationLanguages();
+      foreach ($entity->getTranslationLanguages() as $lang_code => $translationLanguage) {
+        $conditions['langcode'] = $lang_code;
+        if ($path = \Drupal::service('path.alias_storage')->load($conditions)) {
+          $paths[$lang_code]  = $path;
+        }
+      }
+
+    }
+    else {
+      $paths[LanguageInterface::LANGCODE_NOT_SPECIFIED] = [\Drupal::service('path.alias_storage')->load($conditions)];
+    }
+
+    // If a path was not returned, there is no path.
+    if (!$paths) {
+      continue;
+    }
+
+    // Add the path to the entity.
+    foreach ($path_fields as $path_field) {
+      foreach ($paths as $lang_code => $path) {
+        if ($lang_code == LanguageInterface::LANGCODE_NOT_SPECIFIED) {
+          $entity->set($path_field->getName(), $path);
+        }
+        else {
+          $entity->getTranslation($lang_code)->set($path_field->getName(), $path);
+        }
+      }
+    }
+  }
+}
+
diff --git a/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php b/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
index 366db88..38b971f 100644
--- a/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
+++ b/core/modules/path/src/Plugin/Field/FieldWidget/PathWidget.php
@@ -2,10 +2,15 @@
 
 namespace Drupal\path\Plugin\Field\FieldWidget;
 
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Entity\FieldableEntityInterface;
+use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
 use Drupal\Core\Field\WidgetBase;
 use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Language\LanguageInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\TypedData\TranslatableInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\Validator\ConstraintViolationInterface;
 
 /**
@@ -19,30 +24,69 @@
  *   }
  * )
  */
-class PathWidget extends WidgetBase {
+class PathWidget extends WidgetBase implements ContainerFactoryPluginInterface {
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $plugin_id,
+      $plugin_definition,
+      $configuration['field_definition'],
+      $configuration['settings'],
+      $configuration['third_party_settings'],
+      $container->get('entity_type.manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, array $third_party_settings, EntityTypeManagerInterface $entity_type_manager) {
+    parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings);
+    $this->entityTypeManager = $entity_type_manager;
+  }
 
   /**
    * {@inheritdoc}
    */
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
     $entity = $items->getEntity();
-    $path = array();
-    if (!$entity->isNew()) {
-      $conditions = array('source' => '/' . $entity->urlInfo()->getInternalPath());
-      if ($items->getLangcode() != LanguageInterface::LANGCODE_NOT_SPECIFIED) {
-        $conditions['langcode'] = $items->getLangcode();
-      }
-      $path = \Drupal::service('path.alias_storage')->load($conditions);
-      if ($path === FALSE) {
-        $path = array();
+    /** @var \Drupal\path\Plugin\Field\FieldType\PathItem $path */
+    $path = $items[$delta];
+
+    $use_existing_path = !$path->isEmpty();
+    if ($entity instanceof TranslatableInterface && !$path->isEmpty()) {
+      $field_name = $items->getFieldDefinition()->getName();
+      $translatable_field_names = array_keys($entity->getTranslatableFields());
+      if (in_array($field_name, $translatable_field_names)) {
+        // If $entity->id() is not empty, set unchanged entity.
+        if (!empty($entity->id())) {
+          // Have to load the unchanged entity because content_translation will
+          // have already loaded the new translation.
+          // @see \Drupal\content_translation\Controller\ContentTranslationController::prepareTranslation().
+          /** @var \Drupal\Core\TypedData\TranslatableInterface $unchanged_entity */
+          $unchanged_entity = $this->entityTypeManager->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id());
+            // If unchanged entity (by ID) is NOT empty continue...
+            if (!in_array($entity->language()->getId(), array_keys($unchanged_entity->getTranslationLanguages()))) {
+              // If this current language is not in translated versions do not use
+              // the existing path.
+              $use_existing_path = FALSE;
+            }
+        } else {
+          // If the entity ID is empty (typically on a node/add/{bundle} page)
+          // do not use the existing path.
+          $use_existing_path = FALSE;
+        }
       }
     }
-    $path += array(
-      'pid' => NULL,
-      'source' => !$entity->isNew() ? '/' . $entity->urlInfo()->getInternalPath() : NULL,
-      'alias' => '',
-      'langcode' => $items->getLangcode(),
-    );
 
     $element += array(
       '#element_validate' => array(array(get_class($this), 'validateFormElement')),
@@ -50,22 +94,23 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
     $element['alias'] = array(
       '#type' => 'textfield',
       '#title' => $element['#title'],
-      '#default_value' => $path['alias'],
+      '#default_value' => $use_existing_path ? $path->get('alias')->getValue() : '',
       '#required' => $element['#required'],
       '#maxlength' => 255,
       '#description' => $this->t('Specify an alternative path by which this data can be accessed. For example, type "/about" when writing an about page.'),
     );
+
     $element['pid'] = array(
       '#type' => 'value',
-      '#value' => $path['pid'],
+      '#value' => $use_existing_path ? $path->get('pid')->getValue() : NULL,
     );
     $element['source'] = array(
       '#type' => 'value',
-      '#value' => $path['source'],
+      '#value' => !$entity->isNew() ? '/' . $entity->urlInfo()->getInternalPath() : NULL,
     );
     $element['langcode'] = array(
       '#type' => 'value',
-      '#value' => $path['langcode'],
+      '#value' => $use_existing_path ? $path->getLangcode() : $items->getLangcode(),
     );
     return $element;
   }
