awaresoft/sonata-translation-bundle
Symfony 2.x Dependency: The package is explicitly tied to Symfony 2.x (composer.json requires "symfony/symfony": "2.*"), which is end-of-life (EOL) since November 2023. This introduces high architectural risk for modern Laravel/PHP ecosystems (Laravel 8+ or Symfony 5/6/7).
symfony/http-foundation, symfony/routing) or a custom wrapper.spatie/laravel-translatable, laravel-localization) are more mature and actively maintained.Key Use Cases:
spatie/laravel-translation-loader) offers better performance and modern tooling.Symfony 2.x → Laravel Bridge:
TranslationManager, TranslationProvider).EventDispatcher vs. Laravel’s Events system.Alternative Paths:
spatie/laravel-translatable (for model translations) + laravel-localization (for route/locale handling).| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Symfony 2.x EOL | Critical | Avoid; use Laravel-native solutions. |
| No Active Maintenance | High | Fork and maintain; expect breaking changes. |
| SonataAdmin Dependency | High | Isolate translation logic from admin layer. |
| Lack of Documentation | Medium | Reverse-engineer from Symfony 2.x examples. |
| Performance Overhead | Medium | Benchmark against Laravel alternatives. |
spatie/laravel-translatable or laravel-localization been ruled out?Laravel Ecosystem Mismatch:
register()/boot()).Recommended Stack for Translation in Laravel:
| Component | Laravel Alternative | Notes |
|---|---|---|
| Model Translations | spatie/laravel-translatable |
Supports JSON/array storage. |
| Route/Locale Handling | laravel-localization |
Middleware for locale detection. |
| Admin Panel Translations | FilamentPHP/Nova + spatie/laravel-translation-manager |
Modern UI with translation support. |
| Frontend Translations | laravel-jetstream + vue-i18n/react-i18next |
SPAs or Blade. |
Symlink the Bundle (as per README):
mkdir -p src/Awaresoft
ln -s /path/to/sonata-translation-bundle/src/Awaresoft src/Awaresoft
Create a Laravel Service Provider:
TranslationManager into a Laravel service.// app/Providers/TranslationServiceProvider.php
namespace App\Providers;
use Awaresoft\SonataTranslationBundle\Manager\TranslationManager;
use Illuminate\Support\ServiceProvider;
class TranslationServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('sonata.translation.manager', function () {
return new TranslationManager(); // Requires Symfony dependencies!
});
}
}
Resolve Dependencies:
symfony/translation, symfony/dependency-injection).ContainerInterface.Blade Integration:
Blade::directive('transSonata', function ($expression) {
return "<?php echo app('sonata.translation.manager')->trans({$expression}); ?>";
});
Testing:
symfony/framework-bundle:2.*).Extract Translation Logic:
TranslationManager).Translator interface (Illuminate/Translation).Example Refactor:
// app/Services/CustomTranslationService.php
namespace App\Services;
use Illuminate\Support\Facades\Translator;
class CustomTranslationService
{
public function trans($id, array $parameters = [], $domain = 'messages', $locale = null)
{
return Translator::get($id, $parameters, $domain, $locale);
}
}
Replace Sonata-Specific Features:
laravel-localization) instead of Sonata’s routing.spatie/laravel-translatable:
composer require spatie/laravel-translatable
use Spatie\Translatable\HasTranslations;
class Post extends Model
{
use HasTranslations;
public $translatable = ['title', 'content'];
}
laravel-localization for Routes:
composer require mcamara/php-laravel-localization
AppServiceProvider:
public function boot()
{
app()->setLocale(config('app.fallback_locale'));
$this->loadTranslationsFrom(__DIR__.'/../resources/lang', 'messages');
}
| Laravel Component | Compatibility Risk | Mitigation |
|---|---|---|
| Eloquent ORM | Medium | Use spatie/laravel-translatable |
| Blade Templating | High | Custom directives or JS i18n |
| Service Container | High | Abstract Symfony services |
| Event System | Medium | Rewrite event listeners |
| Middleware | Low | Use laravel-localization |
spatie/laravel-translatable vs. forked bundle.How can I help you explore Laravel packages today?