Infelizmente, sua resposta automática não é tão universal. Idioma de campo e idioma do nó não são as mesmas coisas.
O idioma do campo é necessário apenas se você estiver usando a API de conversão de campo (por exemplo, tradução de entidade ). Quando você começa a usá-lo, alguns campos são convertidos em traduzíveis.
Os campos traduzíveis possuem código de idioma, o que realmente faz sentido. Mas se o campo não puder ser traduzido, o código do idioma será sempre (e para todos os tipos de conteúdo, entidades, etc.) - LANGUAGE_NONE
(melhor usar a constante LANGUAGE_NONE
e não a string 'und'
).
Portanto, com sua solução, você pode obter uma situação quando um nó é russo, mas um campo do nó usa LANGUAGE_NONE
.
Felizmente, os campos são anexados ao formulário com a '#language'
chave, que sempre contém o código de idioma correto.
$lang = $form['FIELDNAME']['#language'];
$form['FIELDNAME'][$lang][0]['value']['#value'] = $value;
Se você não tiver acesso ao formulário anexado, as funções da API de linguagem de campo podem ser úteis.
foreach
loop. Se for apenas LANGUAGE_NONE, é uma corrida única. No sentido form_alter, deve alterar tecnicamente qualquer que seja o idioma do formulário.