function FieldItemNormalizer::createTranslatedInstance

Same name and namespace in other branches
  1. 8.9.x 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();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.