criar nó multilíngue programaticamente

8

Eu estou tentando criar um nó multilíngue usando um script php.

Eu estou fazendo isto:

 $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);

Enquanto eu definir $ node-> language para 'und' tudo está funcionando bem. Mas assim que eu definir o idioma para 'de' ou 'en' (os dois idiomas são ativados na minha instalação do Drupal), o texto do corpo não será salvo.

Portanto, minha pergunta é: alguém pode me fornecer um exemplo prático de como armazenar um nó multilíngue (de, en) no Drupal usando o código do programa.

Obrigado

caspermc
fonte
[Link] Espero que isso pode ajudá-lo na direção certa ( drupal.stackexchange.com/questions/6401/... )
Vic

Respostas:

9

Depende do seu campo corporal ser traduzido ou não. Observe esta explicação sobre os campos traduzíveis: 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);

um problema no Drupal 8 para tornar a API da linguagem de campo mais utilizável.

kalabro
fonte
Muito obrigado pela sua resposta. Está funcionando agora. Embora eu ache um conceito bastante estranho, o nó em si ser específico da linguagem, enquanto os campos desse nó são "indefinidos". Gostaria de saber se existe algum caso de uso em que os campos sejam específicos do idioma (nos meus testes, todos os campos eram 'und'). Se os campos estiverem sempre 'e' eu poderia abandonar a chamada de função por completo.
caspermc
11
Não é recomendável usar apenas 'und'como chave de campo em sites multilíngues.
Kalabro
@kalabro - Certo, é o LANGUAGE_NONEcontrário.
Leymannx