Sonata Extra Bundle proporciona un selector de idioma con muchas funciones, compatible con páginas híbridas. Este documento describe los pasos para activar y utilizar el selector de idioma en su aplicación Sonata.
Configuración del selector de idioma
Integración con las páginas híbridas
El selector de idioma puede integrarse perfectamente con sus controladores y rutas existentes. Una vez que tenga un controlador con una ruta definida, puede encontrarlo y gestionarlo en el gestor de páginas Sonata. El Sonata Extra Bundle permite la personalización de las URL de acción.
Ejemplo:
- Versión francesa de una página de artículo de blog:
/blog-mon-article/{slug}
- Versión inglesa de la misma página:
/blog-my-article/{slug}
El selector de idioma detecta automáticamente las páginas localizadas según la configuración.

Inyección del servicio de localización
Para activar la funcionalidad de cambio de idioma, inyecta el LocaleService en tu aplicación:
use Partitech\SonataExtra\Service\LocaleService;
Utilice el servicio para inyectar la ruta localizada calculada en el objeto de solicitud:
$linkHeader = $this->localeService->languageSelectorGetHeaderLinks($tagEntity, 'sonata_extra_blog_tag');
$response->headers->set('Link', $linkHeader);
El objeto de solicitud se utiliza posteriormente en el bloque de cambio de idioma para mostrar el menú desplegable de selección de idioma.
Tratar la entidad y asociar la ruta
La funcionalidad principal reside en el tratamiento de las entidades. Cada vez que se manipula una entidad, el proceso verifica los elementos relacionados localizados. Para activar esto, informe a la entidad sobre las rutas asociadas:
Ejemplo:
class SonataClassificationCategory extends BaseCategory
{
use EntityTranslationTrait;
private array $baseRouteName = [
'sonata_extra_blog_category',
'sonata_extra_blog_search'
];
// ...
}
El proceso puede gestionar diferentes tipos de configuraciones de ruta. Defina un argumento con un accesor correspondiente para facilitar esto.
Ejemplo:
Para un itinerario como /blog-category/{slug}, el proceso utiliza el $entity->getSlug() función para pasarla al generador de URL.
Adaptar el ejemplo a la versión instalada
Los ejemplos de Symfony y Sonata permanecen ligados a las versiones indicadas en el artículo. Symfony 4.x y Symfony 6.2 ya no se mantienen: para un proyecto actual, utilice una rama mantenida y la documentación que corresponda exactamente a sus dependencias.
php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle
Antes de retomar el código, controle las firmas, los servicios, las rutas y las plantillas correspondientes. Después, agregue una prueba funcional que cubra los permisos, el código HTTP y el resultado visible.
Referencia: versiones de Symfony mantenidas.