a2lix/translation-form-bundle
A small, flexible Symfony bundle that helps you build forms to manage translations for Doctrine entities. It integrates with common translation strategies (Gedmo Personal Translation and Knp DoctrineBehaviors) and provides form types, helpers and Twig components to make working with multilingual data easier.
Key features
TranslationsFormsType.TranslatedEntityType for entity choice labels using translations.LocaleProvider.LocaleSwitcher component.[!NOTE] Use A2lixAutoFormBundle for automatic form generation and customization.
[!TIP] A complete demonstration is also available at a2lix/demo.

composer require a2lix/translation-form-bundle
Add a minimal configuration in config/packages/a2lix.yaml:
a2lix_translation_form:
enabled_locales: [en, fr, de] # Optional. Default from framework.enabled_locales
default_locale: en # Optional. Default from framework.default_locale
required_locales: [en] # Optional. Default []
# templating: "@A2lixTranslationForm/bootstrap_5_layout.html.twig"
If you keep the default setup, the bundle will automatically prepend the chosen form theme (Bootstrap 5 layout by default) into Twig's form_themes.
Compatibility: Gedmo & Knp
Gedmo translation entities.use A2lix\TranslationFormBundle\Form\Type\TranslationsType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
$builder->add('translations', TranslationsType::class, [
'translatable_class' => App\Entity\Post::class,
// Optional:
// 'locale_labels' => ['en' => 'English', 'fr' => 'Français'],
// 'theming_granularity' => 'field', // or 'locale_field'
]);
use A2lix\TranslationFormBundle\Form\Type\TranslationsFormsType;
$builder->add('medias', TranslationsFormsType::class, [
'form_type' => App\Form\CompanyMediaType::class,
'form_options' => [
'data_class' => App\Entity\CompanyMediaLocale::class,
],
]);
use A2lix\TranslationFormBundle\Form\Type\TranslatedEntityType;
$builder->add('category', TranslatedEntityType::class, [
'class' => App\Entity\Category::class,
'translation_property' => 'title',
]);
use A2lix\TranslationFormBundle\Form\Type\TranslationsLocalesSelectorType;
$builder->add('locales', TranslationsLocalesSelectorType::class, [
// uses the bundle's LocaleProvider to populate choices
]);
Locale rendering function:
{{ locale_render('en') }} {# -> 'English' (localized) #}
{{ locale_render('en', 'locale_upper') }} {# -> 'EN' #}
{{ locale_render('fr', 'locale_name_title') }}{# -> 'Français' #}
LocaleSwitcher component:
{# Render basic badges #}
<twig:A2lixTranslationForm:LocaleSwitcher render="basic" />
{# Render dropdown #}
<twig:A2lixTranslationForm:LocaleSwitcher render="dropdown" />
The bundle centralizes locale configuration through a LocaleProviderInterface. By default, SimpleLocaleProvider is registered and configured from bundle settings. You can replace it with your own service by changing locale_provider in the bundle configuration.
This bundle integrates cleanly with a2lix/auto-form-bundle. When using AutoType with translatable entities, TranslationsType and TranslationsFormsType can be automatically configured and rendered based on entity metadata and bundle options.
This package is available under the MIT license — see the LICENSE file.
How can I help you explore Laravel packages today?