Skip to main content
Drupal code

Main navigation

  • Home
  • Snippets
User account menu
  • Log in

Breadcrumb

  1. Home

Make custom entity translatable

By admin , 1 April, 2023

Tags

  • translate
  • custom entity

Add to file src/Entity/MyEntity.php

/**
* Defines the my entity class.
*
* @ContentEntityType(
...
*   data_table = "my_entity_field_data",
*   translatable = TRUE,
...
*   entity_keys = {
...
*     "langcode" = "langcode"
*   },
...
* )
*/

Add ->setTranslatable(TRUE) to baseFieldDefinitions. For example

$fields['title'] = BaseFieldDefinition::create('string')
->setLabel(\t('Title'))
->setDescription(\t('The title of the media gallery entity.'))
->setRequired(TRUE)
->setSetting('max_length', 255)
->setDisplayOptions('form', [
 'type' => 'string_textfield',
 'weight' => 0,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('view', [
 'label' => 'hidden',
 'type' => 'string',
 'weight' => 0,
])
->setTranslatable(TRUE)
->setDisplayConfigurable('view', TRUE);

If you have existing content of your entity, you need to create hook_update in your my_entity.install file

/**
* Make my entity translatable.
*/
function my_entity_update_8102(&$sandbox) {
 $definition_update_manager = \Drupal::entityDefinitionUpdateManager();
 $entity_type = $definition_update_manager->getEntityType('my_entity');
 if ($entity_type) {
   $langcode = BaseFieldDefinition::create('language')
     ->setLabel(t('Language code'))
     ->setDescription(t('The language code.'))
     ->setTranslatable(TRUE);
   $definition_update_manager->installFieldStorageDefinition('langcode', $entity_type->id(), 'my_entity', $langcode);
   $keys = $entity_type->getKeys();
   $keys['langcode'] = 'langcode';
   $entity_type->set('entity_keys', $keys);
   $entity_type->set('translatable', TRUE);
   $definition_update_manager->updateFieldableEntityType($entity_type, \Drupal::service('entity_field.manager')->getFieldStorageDefinitions('my_entity'), $sandbox);
 }
}

Run update.php

Go to /admin/config/regional/content-language and enable checkbox for your entity 

Now you can translate your entity

Tags Cloud

dependency injection(21) form(18) drush(14) views(11) twig(11) preprocess(9) field(8) node(7) translate(7) render(6) tabs(6) controller(5) config(5) phpstorm(5) file(5) entityTypeManager(5) routes(5) comment(4) database(4) jquery(4) service(4) roles(4) phpunit(3) php(3) cache(3) entity(3) slick(3) block(3) custom entity(3) javascript(3) user(3) taxonomy(3) guzzle(3) url(3) phpstan(2) event(2) commerce(2) template(2) schema(2) migration(2) libraries(2) date(2) access(2) ajax(2) photoswipe(2) permissions(2) logger(2) vscode(2) suggestions(2) states(2) title(2) fieldset(2) redirect(2) mysql(2) git(1) request(1) attribute(1) service provider(1) csv(1) PHPDoc(1) table(1) eslint(1) deprecation(1) theme(1) errors(1) wsod(1) settings.php(1) watchdog(1) pager(1) widget(1) module(1) file.usage(1) queue(1) exif(1) imagemagick(1) image(1) media(1) uuid(1) drupal.org(1) tests(1) renderer(1) array(1) exposed form(1) page manager(1) transliteration(1) random(1) entityQuery(1) development(1) mail(1) webform(1) register(1) textarea(1) label(1) input(1) batch(1) import(1) messenger(1)
RSS feed
Powered by Drupal