web-dev-qa-db-fra.com

Comment obtenir un champ traduit en Drupal 8

J'ai un site multilingue en Drupal 8, et plusieurs nœuds, certains traduits et d'autres non. Comme je peux obtenir par programmation le champ traduit ou par défaut, il le rend à partir de la langue d'origine.

J'ai compris ceci:

$service_entities = entity_load_multiple_by_properties('node', array('type' => 'service'));

$services = [];
foreach ($service_entities as $entity) {
  $services[] = [
    'title' => $entity->title->value,
  ];
}

Ce code fonctionne bien, mais lorsque le titre est traduit Drupal restitue dans la langue par défaut dans laquelle il a été créé.

7
rpayanm

Vous pouvez obtenir une traduction spécifique avec $translation = $entity->getTranslation('de'), puis vous pouvez utiliser $ translation exactement comme $ entity.

Habituellement, vous ne voulez pas obtenir une traduction spécifique, mais la meilleure traduction disponible pour la langue actuelle, pour cela, utilisez getTranslationFromContext ():

 $translation = \Drupal::service('entity.repository')->getTranslationFromCon‌​text($entity);
20
Berdir

Chargement de toutes les pages d'aide et retournez-les dans la langue actuelle:

$elements = [];
$ids = \Drupal::entityQuery('node')
  ->condition('type', 'help_page')
  ->execute();
$nodes = Node::loadMultiple($ids);
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();

foreach ($nodes as $node) {
  $translation = $node->getTranslation($language);
  $elements[] = [
    'title' => $translation->title->value,
    'url' => $translation->url(),
    'img' => $translation->field_imagen->entity->url(),
    'text' => $translation->body->value,
  ];
}
return $elements;
5
estoyausente