Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/a2lix/TranslationFormBundle
Ease translations with some dedicated Symfony form types
https://github.com/a2lix/TranslationFormBundle
bundle doctrine php symfony symfony-bundle symfony-form translation
Last synced: about 2 months ago
JSON representation
Ease translations with some dedicated Symfony form types
- Host: GitHub
- URL: https://github.com/a2lix/TranslationFormBundle
- Owner: a2lix
- License: mit
- Created: 2012-06-28T20:51:50.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2024-07-02T17:37:39.000Z (6 months ago)
- Last Synced: 2024-10-29T15:21:34.286Z (about 2 months ago)
- Topics: bundle, doctrine, php, symfony, symfony-bundle, symfony-form, translation
- Language: PHP
- Homepage: https://a2lix.fr/bundles/translation-form
- Size: 390 KB
- Stars: 330
- Watchers: 12
- Forks: 138
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# A2lix Translation Form Bundle
Translate your doctrine objects easily with some helps
[![Latest Stable Version](https://poser.pugx.org/a2lix/translation-form-bundle/v/stable)](https://packagist.org/packages/a2lix/translation-form-bundle)
[![Latest Unstable Version](https://poser.pugx.org/a2lix/translation-form-bundle/v/unstable)](https://packagist.org/packages/a2lix/translation-form-bundle)
[![License](https://poser.pugx.org/a2lix/translation-form-bundle/license)](https://packagist.org/packages/a2lix/translation-form-bundle)[![Total Downloads](https://poser.pugx.org/a2lix/translation-form-bundle/downloads)](https://packagist.org/packages/a2lix/translation-form-bundle)
[![Monthly Downloads](https://poser.pugx.org/a2lix/translation-form-bundle/d/monthly)](https://packagist.org/packages/a2lix/translation-form-bundle)
[![Daily Downloads](https://poser.pugx.org/a2lix/translation-form-bundle/d/daily)](https://packagist.org/packages/a2lix/translation-form-bundle)| Branch | Tools |
| --- | --- |
| 3.x (master) | [![Build Status][v3_ci_badge]][v3_ci_link] [![Coverage Status][v3_coverage_badge]][v3_coverage_link] |## Screenshot example
![A2LiX Translation Form Screenshot](/a2lix_translationForm.jpg)
## Support
* `3.x` depends on [AutoFormBundle](https://github.com/a2lix/AutoFormBundle) and has higher requirements (PHP8.1+, Symfony5.4+/6.3+/7.0+). It is compatible with [KnpLabs](https://github.com/KnpLabs/DoctrineBehaviors#translatable), [A2lix](https://github.com/a2lix/I18nDoctrineBundle) and [Prezent](https://github.com/Prezent/doctrine-translatable-bundle)
## Installation
Use composer:
```bash
composer require a2lix/translation-form-bundle
```After the successful installation, add/check the bundle registration:
```php
// Symfony >= 4.0 in bundles.php
// ...
A2lix\AutoFormBundle\A2lixAutoFormBundle::class => ['all' => true],
A2lix\TranslationFormBundle\A2lixTranslationFormBundle::class => ['all' => true],
// ...// Symfony >= 3.4 in AppKernel::registerBundles()
$bundles = array(
// ...
new A2lix\AutoFormBundle\A2lixAutoFormBundle(),
new A2lix\TranslationFormBundle\A2lixTranslationFormBundle(),
// ...
```## Configuration
There is no minimal configuration. Full list of optional parameters:
```yaml
# Symfony >= 4.0. Create a dedicated a2lix.yaml in config/packages with:
# Symfony >= 3.4. Add in your app/config/config.yml:a2lix_translation_form:
locale_provider: default # [1]
locales: [en, fr, es, de] # [1-a]
default_locale: en # [1-b]
required_locales: [fr] # [1-c]
templating: "@A2lixTranslationForm/bootstrap_4_layout.html.twig" # [2]
```1. Custom locale provider service id. Default one relies on [1-*] values:
- [1-a] List of translations locales to display
- [1-b] Default locale
- [1-c] List of required translations locales
2. The default template is Twitter Bootstrap compatible. You can redefine your own here## Usage
### In a classic formType
```php
use A2lix\TranslationFormBundle\Form\Type\TranslationsType;
...
$builder->add('translations', TranslationsType::class);
```### Advanced examples
```php
use A2lix\TranslationFormBundle\Form\Type\TranslationsType;
...
$builder->add('translations', TranslationsType::class, [
'locales' => ['en', 'fr', 'es', 'de'], // [1]
'default_locale' => ['en'], // [1]
'required_locales' => ['fr'], // [1]
'fields' => [ // [2]
'description' => [ // [3.a]
'field_type' => 'textarea', // [4]
'label' => 'descript.', // [4]
'locale_options' => [ // [3.b]
'es' => ['label' => 'descripción'], // [4]
'fr' => ['display' => false] // [4]
]
]
],
'excluded_fields' => ['details'], // [2]
'locale_labels' => [ // [5]
'fr' => 'Français',
'en' => 'English',
],
]);
```1. Optional. If set, override the default value from config.yml
2. Optional. If set, override the default value from config.yml
3. Optional. If set, override the auto configuration of fields
- [3.a] Optional. - For a field, applied to all locales
- [3.b] Optional. - For a specific locale of a field
4. Optional. Common options of symfony forms (max_length, required, trim, read_only, constraints, ...), which was added 'field_type' and 'display'
5. Optional. Set the labels for the translation tabs. Default to the name of the locale. Translation keys can be used here.## Additional
### TranslationsFormsType
A different approach for entities which don't share fields untranslated. No strategy used here, only a locale field in your entity.
```php
use A2lix\TranslationFormBundle\Form\Type\TranslationsFormsType;
...
$builder->add('translations', TranslationsFormsType::class, [
'locales' => ['en', 'fr', 'es', 'de'], // [1]
'default_locale' => ['en'] // [1]
'required_locales' => ['fr'], // [1]
'form_type' => ProductMediaType::class, // [2 - Mandatory]
'form_options' => [ // [2bis]
'context' => 'pdf'
]
]);
```1. Optional. If set, override the default value from config.yml
2. Mandatory. A real form type that you have to do
- [2bis] Optional. - An array of options that you can set to your form### TranslatedEntityType
Modified version of the native 'entity' symfony form type to translate the label in the current locale by reading translations
```php
use A2lix\TranslationFormBundle\Form\Type\TranslatedEntityType;
...
$builder->add('medias', TranslatedEntityType::class, [
'class' => 'A2lix\DemoTranslationBundle\Entity\Media', // [1 - Mandatory]
'translation_property' => 'title', // [2 - Mandatory]
'multiple' => true, // [3]
]);
```1. Path of the translatable class
2. Property/Method of the translatable class that will be display
3. Common options of the 'entity' Symfony form type (multiple, ...)### Example
See [Demo Bundle](https://github.com/a2lix/Demo) for more examples.
## Contribution help
```
docker run --rm --interactive --tty --volume $PWD:/app --user $(id -u):$(id -g) composer install --ignore-platform-reqs
docker run --rm --interactive --tty --volume $PWD:/app --user $(id -u):$(id -g) composer run-script phpunit
docker run --rm --interactive --tty --volume $PWD:/app --user $(id -u):$(id -g) composer run-script cs-fixer
```## License
This package is available under the [MIT license](LICENSE).
[v3_ci_badge]: https://github.com/a2lix/TranslationFormBundle/actions/workflows/ci.yml/badge.svg
[v3_ci_link]: https://github.com/a2lix/TranslationFormBundle/actions/workflows/ci.yml
[v3_coverage_badge]: https://codecov.io/gh/a2lix/TranslationFormBundle/branch/master/graph/badge.svg
[v3_coverage_link]: https://codecov.io/gh/a2lix/TranslationFormBundle/branch/master