web-dev-qa-db-ja.com

ノードの翻訳されたタイトルを取得するにはどうすればよいですか?

FRとENで利用可能なコンテンツタイプがあります。

hook_node_presave()では、フランス語のタイトルと英語のタイトルを別のフィールドに連結したいと思います。 (これは、ビューのフィルターで使用される連結ストリングを含む「ヘルパーフィールド」です。)

これは私のコードです。

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");
}

ノードの翻訳されたタイトルを取得するにはどうすればよいですか?

7
Baud

翻訳されたエンティティをロードし、そこからタイトルを取得する必要があります。

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

現在のエンティティ言語は$entity->get('langcode')->value;を使用して取得できます。@ 4k4が言うように、$entity->hasTranslation($langcode);を使用して翻訳が存在することを確認する必要があります。

12
Matteo Palazzo

エンティティの現在の言語はそれほど重要ではありません。同じ言語を再び取得できるからです。より重要なのは、エラーが発生しないようにエンティティに翻訳があるかどうかを確認することです。

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