EntityRepository::getTranslationFromContext

public EntityRepository::getTranslationFromContext(EntityInterface $entity, $langcode = NULL, $context = array())

Gets the entity translation to be used in the given context.

This will check whether a translation for the desired language is available and if not, it will fall back to the most appropriate translation based on the provided context.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity whose translation will be returned.

string $langcode: (optional) The language of the current context. Defaults to the current content language.

array $context: (optional) An associative array of arbitrary data that can be useful to determine the proper fallback sequence.

Return value

\Drupal\Core\Entity\EntityInterface An entity object for the translated data.

Overrides EntityRepositoryInterface::getTranslationFromContext

See also

\Drupal\Core\Language\LanguageManagerInterface::getFallbackCandidates()

File

core/lib/Drupal/Core/Entity/EntityRepository.php, line 82

Class

EntityRepository
Provides several mechanisms for retrieving entities.

Namespace

Drupal\Core\Entity

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public function getTranslationFromContext(EntityInterface $entity, $langcode = NULL, $context = array()) {
  $translation = $entity;
 
  if ($entity instanceof TranslatableInterface && count($entity->getTranslationLanguages()) > 1) {
    if (empty($langcode)) {
      $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId();
      $entity->addCacheContexts(['languages:' . LanguageInterface::TYPE_CONTENT]);
    }
 
    // Retrieve language fallback candidates to perform the entity language
    // negotiation, unless the current translation is already the desired one.
    if ($entity->language()->getId() != $langcode) {
      $context['data'] = $entity;
      $context += array('operation' => 'entity_view', 'langcode' => $langcode);
      $candidates = $this->languageManager->getFallbackCandidates($context);
 
      // Ensure the default language has the proper language code.
      $default_language = $entity->getUntranslated()->language();
      $candidates[$default_language->getId()] = LanguageInterface::LANGCODE_DEFAULT;
 
      // Return the most fitting entity translation.
      foreach ($candidates as $candidate) {
        if ($entity->hasTranslation($candidate)) {
          $translation = $entity->getTranslation($candidate);
          break;
        }
      }
    }
  }
 
  return $translation;
}
doc_Drupal
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.