別のモジュールで定義されたフィールドの翻訳を有効にしようとしています。
問題は、このフィールドがUIにリストされないことです。 _hook_entity_field_storage_info
_でこのフィールドの定義を確認したところ、setTranslatable(TRUE)
がないことがわかります。したがって、同じことを_hook_entity_field_storage_info_alter
_に追加しました。この後、UIのフィールドリストが翻訳用に表示されますが、チェックボックスをオンにして送信すると、値が保存されません。
このフィールドの翻訳を有効にするにはどうすればよいですか?
少しの苦労と研究の後、これが取られたアプローチです-
custom_module.installファイル-
/**
* Enable translation for workbench_reviewer field.
* Implements hook_update_n.
*/
function hook_update_xxxx() {
$entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
$field_storage_definition_node = $entity_definition_update_manager->getFieldStorageDefinition('workbench_reviewer', 'node');
$field_storage_definition_node->setTranslatable(TRUE);
$entity_definition_update_manager->updateFieldStorageDefinition($field_storage_definition_node);
}
custom_module.moduleファイル-
/**
* Implements hook_entity_field_storage_info_alter().
*/
function hook_entity_field_storage_info_alter(&$fields, EntityTypeInterface $entity_type) {
// Alter translation settings.
if (($entity_type->id() == 'node' || $entity_type->id() == 'taxonomy_term') && !empty($fields['workbench_reviewer'])) {
$fields['workbench_reviewer']->setTranslatable(TRUE);
}
}
/**
* Implements hook_entity_bundle_field_info_alter().
*/
function hook_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {
// Alter translation settings.
if (($entity_type->id() == 'node' || $entity_type->id() == 'taxonomy_term') && !empty($fields['workbench_reviewer'])) {
$fields['workbench_reviewer']->setTranslatable(TRUE);
}
}
実行したらdrush updb
チェックボックスが有効の翻訳UIにフィールドが表示されているのがわかります。