A Symfony bundle that provides translation management capabilities through API Platform, with support for multiple locales and domains.
- API Platform integration for translation management
- Support for multiple locales and domains
- Database-backed translation storage
- Cache support for improved performance
- Command-line tools for translation management
- Integration with Lexik Translation Bundle
- Support for translatable entities
- PHP 8.2 or higher
- Symfony 6.x
- API Platform 3.x
- Doctrine ORM
- Install the bundle using Composer:
composer require whitedigital-eu/translation-bundle
- Add the bundle to your
config/bundles.php
:
return [
// ...
WhiteDigital\Translation\TranslationBundle::class => ['all' => true],
];
Create a configuration file config/packages/translation.yaml
:
translation:
entity_manager: default # Optional: defaults to 'default'
locale: en # Default locale for translations
translation_fallback: false # Whether to use translation fallback
managed_locales: ['en', 'lv'] # List of managed locales
cache_pool: cache.app # Optional: Cache pool to use for translations
To make an entity translatable, extend the AbstractTranslatableEntity
class:
use WhiteDigital\Translation\Entity\AbstractTranslatableEntity;
use Gedmo\Mapping\Annotation as Gedmo;
class YourEntity extends AbstractTranslatableEntity
{
#[Gedmo\Translatable]
private ?string $name = null;
// ... getters and setters
}
The bundle provides the following API endpoints:
GET /api/trans_units
- List all translation unitsGET /api/trans_units/{id}
- Get a specific translation unitPOST /api/trans_units
- Create a new translation unitPATCH /api/trans_units/{id}
- Update a translation unitDELETE /api/trans_units/{id}
- Delete a translation unitGET /api/trans_units/list/{locale}
- Get translations for a specific locale
The bundle provides several command-line tools. There are two ways to use these commands depending on your setup:
Each locale is passed as a separate option with its corresponding file path:
# Import translations
bin/console wd:trans_unit:import --en=/path/to/en.json --lv=/path/to/lv.json
# Override translations
bin/console wd:trans_unit:override --en=/path/to/en.json --lv=/path/to/lv.json
Locales and files are passed as comma-separated lists:
# Import translations
bin/console wd:trans_unit:import --locales=en,lv --files=/path/to/en.json,/path/to/lv.json
# Override translations
bin/console wd:trans_unit:override --locales=en,lv
When creating or updating translations via API, use the following format:
{
"key": "translation.key",
"domain": "messages",
"translations": {
"en": "English translation",
"lv": "Latvian translation"
}
}
The bundle supports caching of translations for improved performance. Configure the cache pool in your configuration:
translation:
cache_pool: cache.app
The cache is automatically invalidated when translations are updated.
Contributions are welcome! Please feel free to submit a Pull Request.
This bundle is released under the MIT license. See the included LICENSE file for more information.