computerrock/sonata-translation-bundle
Installation Add the bundle via Composer:
composer require computerrock/sonata-translation-bundle:dev-master
Register bundles in AppKernel.php:
new Lexik\Bundle\TranslationBundle\LexikTranslationBundle(),
new Computerrock\SonataTranslationBundle\IbrowsSonataTranslationBundle(),
Enable Translations in Sonata Admin Extend your Sonata admin class to support translations:
use Computerrock\SonataTranslationBundle\Admin\TranslationAdminInterface;
class YourAdmin extends AbstractAdmin implements TranslationAdminInterface
{
public function getTranslationFields()
{
return ['field_name']; // Fields to translate
}
}
First Use Case Access the translation tab in Sonata Admin for any model supporting translations. Edit translations inline or via popup based on config.
Field Translation
getTranslationFields().getTranslationDomain() to specify translation domain (defaults to messages).Translation Input Types Configure input types per field in Sonata Admin:
public function getTranslationInputType($field, $object)
{
return 'textarea'; // Override default (text|textarea|select|date|checklist)
}
Locale Management
lexik_translation config to set fallback_locale (e.g., en).lexik_translation.locales config.Integration with Lexik
lexik_translation services (e.g., translator, translation_manager) in controllers/services.$translator = $this->get('translator');
$translator->trans('key', [], 'domain');
validation, admin) to organize translations.Resources/views/Translation/.TranslationManager for bulk translation operations:
$manager = $this->get('lexik_translation.manager');
$manager->updateTranslation('domain', 'key', 'en', 'New value');
Configuration Conflicts
lexik_translation.fallback_locale is set; otherwise, translations may fail silently.ibrows_sonata_translation.editable.mode carefully—popup mode requires JS/CSS setup.Field-Specific Issues
options config for select type:
ibrows_sonata_translation:
editable:
type: select
options:
choices:
en: English
fr: Français
date type with format config:
ibrows_sonata_translation:
editable:
type: date
format: Y-m-d
Caching
php bin/console cache:clear
Translation Keys
$user->id). Use static keys with placeholders:
# config/translations/messages.en.yml
user.greeting: "Hello, {name}!"
APP_DEBUG=true) to log translation errors.php bin/console debug:config ibrows_sonata_translation to verify settings.Translation/inline_edit.html.twig).Custom Input Types
Extend Computerrock\SonataTranslationBundle\Form\Type\TranslationType to add new input types.
Translation Events
Listen to lexik_translation.pre_translate or lexik_translation.post_translate events for custom logic:
services:
app.translation_listener:
class: AppBundle\EventListener\TranslationListener
tags:
- { name: kernel.event_listener, event: lexik_translation.pre_translate, method: onPreTranslate }
Dynamic Domains
Use TranslationManager to fetch domains dynamically:
$domains = $manager->getDomains();
How can I help you explore Laravel packages today?