Search code examples
phpdrupaltranslationparagraph

Drupal 8 translating paragraphs programmatically


Paragraphs are supposed to be translated on on the level of their component fields, not on the paragraph_field level. So how do you programmatically translate paragraphs?

To be more explicit, my paragraph field is not translatable, but the component fields are. So how can I load a node, loop through the paragraph items, and add translations to the fields?

Does anyone have an example? Thanks.


Solution

  • following https://www.flocondetoile.fr/blog/translate-programmatically-drupal-8 node translation:

    This is an abstraction of my actual code, and I haven't actually tested it:

    $node = node_load(12);
    
    if ($node->hasTranslation('de')) {
      $transl_node = $node->getTranslation('de');
    
      foreach ($transl_node->field_paragraph  => $paragraph) {
          $entity_array = $paragraph->toArray();
          $translated_fields = [];
            $translated_fields['field_body'] = array(
              'value' => 'translated value',
              'format' => 'full'
            );
            $translated_fields['field_section_title'] = 'translated section title';
    
            $translated_entity_array = array_merge($entity_array, $translated_fields);
            if (!$paragraph->hasTranslation('de')) {
              $paragraph->addTranslation('de', $translated_entity_array);
              $paragraph->save();
            }
      }
      $transl_node->save();
    }