Same name and namespace in other branches
  1. 8.9.x core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php \Drupal\Core\Entity\ContentEntityStorageBase::createTranslation()
  2. 9 core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php \Drupal\Core\Entity\ContentEntityStorageBase::createTranslation()

Constructs a new entity translation object, without permanently saving it.

@todo Consider accepting \Drupal\Core\Entity\TranslatableInterface as first parameter. See https://www.drupal.org/project/drupal/issues/2932049.

Parameters

\Drupal\Core\Entity\ContentEntityInterface $entity: The entity object being translated.

string $langcode: The translation language code.

array $values: (optional) An associative array of initial field values keyed by field name. If none is provided default values will be applied.

Return value

\Drupal\Core\Entity\ContentEntityInterface Another instance of the specified entity object class with the specified active language and initial values.

Overrides TranslatableStorageInterface::createTranslation

File

core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php, line 352

Class

ContentEntityStorageBase
Base class for content entity storage handlers.

Namespace

Drupal\Core\Entity

Code

public function createTranslation(ContentEntityInterface $entity, $langcode, array $values = []) {
  $translation = $entity
    ->getTranslation($langcode);
  $definitions = array_filter($translation
    ->getFieldDefinitions(), function (FieldDefinitionInterface $definition) {
    return $definition
      ->isTranslatable();
  });
  $field_names = array_map(function (FieldDefinitionInterface $definition) {
    return $definition
      ->getName();
  }, $definitions);
  $values[$this->langcodeKey] = $langcode;
  $values[$this
    ->getEntityType()
    ->getKey('default_langcode')] = FALSE;
  $this
    ->initFieldValues($translation, $values, $field_names);
  $this
    ->invokeHook('translation_create', $translation);
  return $translation;
}