Answers:
不幸的是,您的自我回答并不那么普遍。现场语言和节点语言不是一回事。
仅当您使用Field Translation API(例如Entity translation)时才需要使用领域语言。当您开始使用它时,某些字段会转换为可翻译的。
可翻译字段具有语言代码,这确实很有意义。但是,如果该字段不可翻译,则语言代码将始终是(以及对于所有内容类型,实体等)LANGUAGE_NONE
(最好使用常量LANGUAGE_NONE
而不是字符串'und'
)。
因此,通过您的解决方案,您可以得到当节点是俄罗斯节点而节点字段使用时的情况LANGUAGE_NONE
。
幸运的是,字段通过'#language'
键附加到表单,该键始终包含正确的语言代码。
$lang = $form['FIELDNAME']['#language'];
$form['FIELDNAME'][$lang][0]['value']['#value'] = $value;
如果您无权访问附加表格,则字段语言API函数可能会很有用。
如果您知道实体类型和捆绑包,请使用类似以下代码的代码,该代码调用field_language()。
$field_language = field_language('node', $node, 'field_charity_author');
$form['field_charity_author'][$field_language][0]['value']['#value'] = arg(3);
它将找出正确的语言,并将在多语言站点中工作。
还可以看看field_get_items()。
整个und
交易是Drupal 7中最烦人的事情之一,在实践中并不如设计时那样有效。
无论如何,您都可以array_keys
像这样获得第一语言:
function my_module_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "someID") {
$langs = array_keys($form['field_charity_author']);
$form['field_charity_author'][$langs[0]][0]['value']['#value'] = arg(3);
}
}
那应该一直工作。
(回答我自己的问题以防某人受到帮助。答案对我有用。)
我可以写以下行来获取语言:
$lang = $form['language']['#value']; // Instead of "und"
foreach
循环的一种简单方法。如果只是LANGUAGE_NONE,则只需运行一次。从form_alter的意义上讲,它应该从技术上更改表单使用的语言。