crear nodo multilingüe mediante programación

8

Estoy tratando de crear un nodo multilingüe usando un script php.

Estoy haciendo esto:

 $node = new stdClass();
 $node->title = "Test ".mktime();
 $node->type = "job";
 $node->language = 'de'; // Or e.g. 'en' if locale is enabled
 $node->uid = $user->uid; 
 $node->status = 1; //(1 or 0): published or not
 $node->promote = 0; //(1 or 0): promoted to front page
 $node->comment = 1; //2 = comments on, 1 = comments off
 $node->path = array('alias' => 'das-ist-ein-test-'.mktime());
 $node->body[$node->language][0]['value']   = "Body Body Body";
 $node->body[$node->language] = text_summary("Body Body Body");
 $node->body[$node->language]  = 'filtered_html';
 node_save($node);

Mientras establezca $ node-> language en 'und', todo funciona bien. Pero tan pronto como configuro el idioma en 'de' o 'en' (ambos idiomas se activan en mi instalación de Drupal), el texto del cuerpo no se guarda.

Entonces mi pregunta es: ¿alguien puede proporcionarme un ejemplo funcional de cómo almacenar un nodo multlingual (de, en) en Drupal usando el código del programa.

Gracias

caspermc
fuente
[Enlace] Espero que esto pueda ayudarte en la dirección correcta ( drupal.stackexchange.com/questions/6401/… )
Vic

Respuestas:

9

Depende de si su campo corporal es traducible o no. Por favor, mire esta explicación sobre los campos traducibles: https://drupal.stackexchange.com/a/31639/2466

$node_lang = 'ru'; // I am a Russian girl

$node = new stdClass();
$node->title = "Test ".mktime();
$node->type = 'article'; // Your type
$node->language = $node_lang;
$node->uid = 1; 
$node->status = 1;

// Get proper langcode
$body_field_info = field_info_field('body');
if (field_is_translatable('node', $body_field_info)) {
  $body_language = field_valid_language($node_lang);
} else {
  $body_language = LANGUAGE_NONE;
}

// Some lorem ipsum.
// You can add custom summary:
// $node->body[$body_language][0]['summary'] = 'Summary';
$node->body[$body_language][0]['value']   = 'Lorem monotonectally iterate resource-leveling innovation before timely core competencies. Globally coordinate sustainable strategic theme areas and intermandated infomediaries. Monotonectally brand customer directed solutions and high-quality bandwidth.';

node_save($node);

Drupal 8 tiene un problema para hacer que la API de lenguaje de campo sea más útil.

kalabro
fuente
Muchas gracias por su respuesta. Está funcionando ahora. A pesar de todo, me parece un concepto bastante extraño, que el nodo en sí es específico del idioma, mientras que los campos de este nodo están 'indefinidos'. Me pregunto si hay algún caso de uso en el que los campos sean específicos del idioma (en mis pruebas cada campo era 'und'). Si los campos están siempre 'und', podría deshacerme de la llamada a la función.
caspermc
1
No se recomienda usar solo 'und'como clave de campo en sitios multilingües.
kalabro
@kalabro - Correcto, es en su LANGUAGE_NONElugar.
leymannx