Desafortunadamente, su auto respuesta no es tan universal. El lenguaje de campo y el lenguaje de nodo no son las mismas cosas.
El lenguaje de campo solo es necesario si está utilizando API de traducción de campo (por ejemplo, traducción de entidad ). Cuando empiezas a usarlo, algunos campos se convierten en traducibles.
Los campos traducibles tienen código de idioma, lo que realmente tiene sentido. Pero si el campo no es traducible, el código del idioma siempre lo será (y para todos los tipos de contenido, entidades, etc.) LANGUAGE_NONE
(lo mejor es usar la constante LANGUAGE_NONE
y no la cadena 'und'
).
Entonces, con su solución, puede obtener una situación en la que un nodo es ruso, pero usa un campo del nodo LANGUAGE_NONE
.
Afortunadamente, los campos se adjuntan al formulario con '#language'
clave, que siempre contiene el código de idioma correcto.
$lang = $form['FIELDNAME']['#language'];
$form['FIELDNAME'][$lang][0]['value']['#value'] = $value;
Si no tiene acceso al formulario adjunto, las funciones de API de lenguaje de campo pueden ser útiles.
foreach
bucle Si es solo LANGUAGE_NONE, es una sola ejecución. En el sentido de form_alter, técnicamente debería alterar cualquier idioma que tenga el formulario.