web-dev-qa-db-ja.com

contribモジュールで定義されたフィールドの翻訳をどのように有効にしますか?

別のモジュールで定義されたフィールドの翻訳を有効にしようとしています。

問題は、このフィールドがUIにリストされないことです。 _hook_entity_field_storage_info_でこのフィールドの定義を確認したところ、setTranslatable(TRUE)がないことがわかります。したがって、同じことを_hook_entity_field_storage_info_alter_に追加しました。この後、UIのフィールドリストが翻訳用に表示されますが、チェックボックスをオンにして送信すると、値が保存されません。

このフィールドの翻訳を有効にするにはどうすればよいですか?

1
wilNev

少しの苦労と研究の後、これが取られたアプローチです-

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にフィールドが表示されているのがわかります。

1
wilNev