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],
