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