Hablemos de su proyecto
PHP symfony Sonata

Symfony 4 / Sonata: gestionar una interfaz de administración multilingüe

Veremos cómo configurar una interfaz de administración multilingüe con un botón de selección de idioma (conmutador de idioma).Instalación de translationBundle composer require sonata-project/translation-bundle bin/console assets:install El conmutador de id...

Symfony 4 / Sonata: gestionar una interfaz de administración multilingüe

Veremos cómo configurar una interfaz de administración multilingüe con un botón de selección de idioma (conmutador de idioma).

Instalación de translationBundle

composer require sonata-project/translation-bundle

bin/console assets:install

El conmutador de idioma requiere un filtro twig específico.
De lo contrario, obtendrás un error como:

Unknown "language_name" filter.

Luego, necesitas instalar estos dos paquetes

composer require twig/intl-extra
composer require twig/extra-bundle
bin/console cache:clear

Agregamos la configuración predeterminada

# config/packages/sonata_translation.yaml

sonata_translation:
    locales: [en, fr, it, nl, es]
    default_locale: en
    # change default behavior for translated field filtering.
    default_filter_mode: gedmo # must be either 'gedmo' or 'knplabs', default: gedmo
    # here enable the types you need
    gedmo:
        enabled: true
    knplabs:
        enabled: true
    #phpcr:
    #    enabled: true

E incluimos estilos en la administración

# config/packages/sonata_admin.yaml

sonata_admin:
    assets:
        extra_stylesheets:
            - bundles/sonatatranslation/css/sonata-translation.css

Sobrescribimos la visualización de la plantilla de sonata

# config/packages/sonata_admin.yaml

sonata_admin:
    templates:
        layout: '@SonataTranslation/standard_layout.html.twig'

Agregamos las rutas

# config/routes.yaml

sonata_translation:
    resource: '@SonataTranslationBundle/Resources/config/routes.yaml'

Y habilitamos el conmutador de idiomas

# config/packages/sonata_translation.yaml

sonata_translation:
    locale_switcher: true

Y el último punto para evitar el error

Argument 5 passed to Twig\Extra\Intl\IntlExtension::formatDateTime() must be of the type string, null given,



Tendrás que cargar el twig/extra-bundle antes del SonataIntlBundle para que la función formatDateTime de sonataIntl sobrescriba la de TwigExtraBundle.

Esto nos da:

    Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
    Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
    Sonata\IntlBundle\SonataIntlBundle::class => ['all' => true],
    Sonata\TranslationBundle\SonataTranslationBundle::class => ['all' => true],
Sélection_413

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.

Compartir este artículo