web-dev-qa-db-fra.com

Comment obtenir le titre traduit d'un nœud?

J'ai un type de contenu disponible en FR et en EN.

Dans hook_node_presave(), je voudrais concaténer le titre français et le titre anglais dans un autre champ. (Il s'agit d'un "champ d'aide" qui contient des chaînes concaténées à utiliser par un filtre dans une vue.)

Ceci est mon code.

function mymodule_node_presave(Drupal\Core\Entity\EntityInterface $entity) {
  $entity_title1=$entity->getTitle(); //It is the French title if the saved node is the french node.
  $entity_title2= '?'; //HERE IS MY PROBLEM: how to get the title in the other language?
  $entity->my_helper_field->setValue("$entity_title1 $entity_title1");
}

Comment obtenir le titre traduit d'un nœud?

7
Baud

Vous devez charger l'entité traduite et obtenir le titre à partir de cela.

$translated_entity = $entity->getTranslation('en');
$translated_title = $translated_entity->getTitle();

Vous pouvez obtenir la langue de l'entité actuelle en utilisant $entity->get('langcode')->value;, et comme @ 4k4 le dit, vous devez vérifier qu'une traduction existe en utilisant $entity->hasTranslation($langcode);.

12
Matteo Palazzo

La langue actuelle de l'entité n'est pas si importante, car vous pouvez à nouveau obtenir la même langue. Le plus important est de vérifier si l'entité a la traduction afin de ne pas obtenir d'erreur:

 $title_en = $entity->hasTranslation('en') ? $entity->getTranslation('en')->getTitle() : '';
 $title_fr = $entity->hasTranslation('fr') ? $entity->getTranslation('fr')->getTitle() : '';
6
4k4