alengo/sulu-translated-media-bundle
SEO-friendly translated media filenames for Sulu CMS 3.x.
Serves media files under locale-specific SEO filenames (e.g. /uploads/red-shoes-de.jpg) while keeping the original file stored under its original name. Includes an "Additional Data" admin tab with locale-aware title, description, and SEO filename fields — plus optional boolean flags (verifyDownload, aiGenerated).
seoFilename, title, description in me_media_translationsMedia entity extending Sulu's base; no project entity requiredsulu_translated_media_url() / sulu_translated_media_urls() with WebP supportsulu_media.objects.media.model and sulu_admin resources are auto-configuredcomposer require alengo/sulu-translated-media-bundle
Register the bundle in config/bundles.php:
Alengo\SuluTranslatedMediaBundle\TranslatedMediaBundle::class => ['all' => true],
Import the admin API routes in config/routes/sulu_admin.yaml:
TranslatedMediaBundle:
resource: "@TranslatedMediaBundle/Resources/config/routing_admin_api.yaml"
prefix: /admin/api
Run a database migration or schema update to create the me_media_translations table:
bin/adminconsole doctrine:schema:update --force
That's it — no further configuration required.
{# Single URL with translated filename #}
{{ sulu_translated_media_url(media, '800x', app.request.locale) }}
{# With explicit format override #}
{{ sulu_translated_media_url(media, '800x', 'de', 'webp') }}
{# All format URLs (default + WebP) for use in <picture> / srcset #}
{% set urls = sulu_translated_media_urls(media, '800x', app.request.locale) %}
<picture>
<source srcset="{{ urls.webp }}" type="image/webp">
<img src="{{ urls.default }}">
</picture>
| Class | Purpose |
|---|---|
Entity\Media |
Concrete Doctrine entity (me_media) — use directly or extend |
Entity\MediaTranslations |
Locale rows in me_media_translations |
Model\MediaTranslationsAwareInterface + MediaTranslationsTrait |
Locale fields: title, description, seoFilename |
Model\MediaAdditionalDataInterface + MediaAdditionalDataTrait |
Boolean flags: verifyDownload, aiGenerated |
How can I help you explore Laravel packages today?