How to create and translate a multilingual nodes programmatically ?
Programmatically create and translate nodes.
Example:
use Drupal\node\Entity\Node;
$node = Node::create([
// The node entity bundle.
'type' => 'article',
'langcode' => 'en',
'created' => REQUEST_TIME,
'changed' => REQUEST_TIME,
// The user ID.
'uid' => 1,
'title' => 'My test!',
// An array with taxonomy terms.
'field_tags' =>[2],
'body' => [
'summary' => '',
'value' => '<p>The body of my node.</p>',
'format' => 'full_html',
],
]);
$node->save();
\Drupal::service('path.alias_storage')->save("/node/" . $node->id(), "/my/path", "en");
$node_es = $node->addTranslation('es');
$node_es->title = 'Mi prueba!';
$node_es->body->value = '<p>El cuerpo de mi nodo.</p>';
$node_es->body->format = 'full_html';
$node_es->save();
\Drupal::service('path.alias_storage')->save("/node/" . $node->id(), "/mi/ruta", "es");
Note : This example has not checked bu my self.
Example from https://gist.github.com/facine/35bb291811c146b6fc9e
Example 2 : (Tested)
//use Drupal\node\Entity\Node;
//Create Entity
$entity = \Drupal\node\Entity\Node::create([
'type' => 'article',
'title' => "Test Title English"
]);
$entity->save();
//Add French translation
$entity->addTranslation('fr', ['title' => "Title in French"])->save();
Comments2
I get the following error :…
I get the following error : InvalidArgumentException : Invalid translation language (en) specified. dans Drupal\Core\Entity\ContentEntityBase->addTranslation() (ligne 863 de /var/www/drupalvm/drupal/web/core/lib/Drupal/Core/Entity/ContentEntityBase.php).
You probalby didnt defined…
You probalby didnt defined English as a language in your System.