web-dev-qa-db-ja.com

Drupal 8に翻訳されたフィールドを取得するにはどうすればよいですか?

Drupal 8に多言語サイトがあり、いくつかのノードがあり、一部は翻訳済みで、他は翻訳されていません。翻訳されたフィールドをプログラムで取得できるため、デフォルトでは元の言語から返されます。

私はこれを得た:

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

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

このコードは正常に動作しますが、タイトルが翻訳されると、Drupalは、コードが作成されたデフォルトの言語で返します。

7
rpayanm

$translation = $entity->getTranslation('de')を使用して特定の翻訳を取得し、$ entityとまったく同じように$ translationを使用できます。

通常、特定の翻訳を取得する必要はありませんが、現在の言語で使用できる最良の翻訳は、そのためにgetTranslationFromContext()を使用します。

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

すべてのhelp_pageを読み込み、現在の言語で返します。

$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