nodes – Cómo obtener un valor de campo de entidad referenciada en el lenguaje de nodo actual

Pregunta:

Estoy tratando de obtener el contenido de algún nodo dentro de un bloque.

Logré obtener los campos que quería, pero siempre se devuelven en el idioma predeterminado de mi sitio en lugar de las traducciones actuales (por ejemplo, / node / 1 y / fr / node / 1 devuelve el mismo contenido en inglés en lugar de la traducción)

Funciona bien para campos simples, pero no puede hacerlo funcionar para entidades referenciadas:

Estoy dentro de una función Block build ():

$node = \Drupal::routeMatch()->getParameter('node');

// Simple text field : Correct value depending on language
$correctValue = $node->field_test_text->getValue(); 

// Paragraphs/referencedEntities
$paras = $node->get('field_paragraphes')->referencedEntities();
foreach ($paras as $para) {
   // Not translated, always in default language ?
   $badValue = $para->get('field_test_in_para')->getValue();
}

Muchas gracias.

Respuesta:

El código para su problema (debe usar getTranslation para obtener una traducción y hasTranslation para verificar si realmente tiene una traducción o no):

$lang_code = \Drupal::service('language_manager')->getCurrentLanguage()->getId();
$node = \Drupal::routeMatch()->getParameter('node');

// Paragraphs/referencedEntities
$paras = $node->get('field_paragraphes')->referencedEntities();
foreach ($paras as $para) {
  // Remember to check if translation exists
  if ($para->hasTranslation($lang_code)) {
    $para = $para->getTranslation($lang_code);
  }
   $goodValue = $para->get('field_test_in_para')->getValue();
}

Aunque este código funcionará y solucionará su problema, puede considerar si está haciendo las cosas bien. La mayoría de las veces, cuando se hacen las cosas de la manera correcta, no es necesario manejar las traducciones. Muchos módulos / sistemas hacen esto automáticamente cuando renderizan cosas o usan módulos como vistas. La mayoría de las veces, cuando necesite manejar las traducciones usted mismo, habrá una forma más sencilla de hacerlo.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım