You are here

protected function FieldItemNormalizer::createTranslatedInstance in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/hal/src/Normalizer/FieldItemNormalizer.php \Drupal\hal\Normalizer\FieldItemNormalizer::createTranslatedInstance()

Get a translated version of the field item instance.

To indicate that a field item applies to one translation of an entity and not another, the property path must originate with a translation of the entity. This is the reason for using target_instances, from which the property path can be traversed up to the root.

Parameters

\Drupal\Core\Field\FieldItemInterface $item: The untranslated field item instance.

$langcode: The langcode.

Return value

\Drupal\Core\Field\FieldItemInterface The translated field item instance.

1 call to FieldItemNormalizer::createTranslatedInstance()
FieldItemNormalizer::denormalize in core/modules/hal/src/Normalizer/FieldItemNormalizer.php

File

core/modules/hal/src/Normalizer/FieldItemNormalizer.php, line 114

Class

FieldItemNormalizer
Converts the Drupal field item object structure to HAL array structure.

Namespace

Drupal\hal\Normalizer

Code

protected function createTranslatedInstance(FieldItemInterface $item, $langcode) {

  // Remove the untranslated item that was created for the default language
  // by FieldNormalizer::denormalize().
  $items = $item
    ->getParent();
  $delta = $item
    ->getName();
  unset($items[$delta]);

  // Instead, create a new item for the entity in the requested language.
  $entity = $item
    ->getEntity();
  $entity_translation = $entity
    ->hasTranslation($langcode) ? $entity
    ->getTranslation($langcode) : $entity
    ->addTranslation($langcode);
  $field_name = $item
    ->getFieldDefinition()
    ->getName();
  return $entity_translation
    ->get($field_name)
    ->appendItem();
}