如何解决在 Drupal 9 中以编程方式获取字段转换的默认值
Drupal 9 中的字段定义可以翻译:字段标签、字段描述和默认值可以获取每种语言的值。
在 hook_form_alter 中,我需要“复制”一些现有字段,但使用不同的语言。 我的流程是:
// force wanted language
$language_manager->setConfigOverrideLanguage($target_language);
\Drupal::service("entity_field.manager")->clearCachedFieldDefinitions();
// getTranslation or addTranslation to the $entity depending on the case
if ($entity->hasTranslation($langcode)) {
$entity = $entity->getTranslation($langcode);
} else {
$entity = $entity->addTranslation($langcode);
}
// get the field
$field_definition = \Drupal\field\Entity\FieldConfig::loadByName($entity_type,$bundle,$field_name);
$form_display = EntityFormDisplay::collectRenderDisplay($entity,'default');
$items = $entity->get($field_name);
$widget = $form_display->getRenderer($field_name);
$field_form = $widget->form($items,$form,$form_state);
// + restore initial language
// insert field in my $form
$form['my-added-field-name'] = $field_form;
这适用于标签和字段描述(它们被翻译成目标语言)。 但是默认值失败(在节点创建而不是修改的情况下)。嗯,它有时有效,但并非总是如此,也不是在所有情况下。例如,如果我使用非默认语言创建新内容,则默认值不会被翻译,并且始终是当前语言之一。
我尝试了很多东西,比如在 $items 上使用 setLangcode(),执行多个 $entity->getTranslation() 等等。看数据,似乎 $widget 是用好的语言(我强制)但 $items 中仍然包含当前语言(即使在其上使用 setLangcode() 之后)。因此,在调用 $widget->form() 后,我得到了糟糕的结果(或者至少是不稳定的结果)。
那么,我错过了什么吗?有没有其他/更好的方法来做到这一点?问候。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。