К сожалению, ваш ответ не так универсален. Язык полей и язык узлов не одно и то же.
Язык полей необходим только в том случае, если вы используете API перевода полей (например, перевод сущностей ). Когда вы начинаете использовать его, некоторые поля преобразуются в переводимые.
У переводимых полей есть код языка, который действительно имеет смысл. Но если поле не переводимо, код языка всегда будет (и для всех типов контента, сущностей и т. Д.) - LANGUAGE_NONE
(лучше всего использовать константу, LANGUAGE_NONE
а не строку 'und'
).
Таким образом, с вашим решением вы можете получить ситуацию, когда узел является русским, но поле узла использует LANGUAGE_NONE
.
К счастью, поля прикрепляются к форме с '#language'
ключом, который всегда содержит правильный код языка.
$lang = $form['FIELDNAME']['#language'];
$form['FIELDNAME'][$lang][0]['value']['#value'] = $value;
Если у вас нет доступа к прикрепленной форме, могут быть полезны функции API Field Language .
foreach
цикла. Если это просто LANGUAGE_NONE, это один запуск. В смысле form_alter, он должен технически изменить любой язык формы.