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?
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);
.
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() : '';