Nous allons voir comment configurer une interface d’administration en multilingue avec un bouton de sélection de langue (language switcher).
Installation de translationBundle
composer require sonata-project/translation-bundle
bin/console assets:install
Le language switcher nécessite un filtre twig spécifique.
Sinon vous aurez une erreur de type :
Unknown "language_name" filter.
Il faut alors installer ces deux bundles
composer require twig/intl-extra
composer require twig/extra-bundle
bin/console cache:clear
On ajoute la configuration par défaut
# 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
Et on ajoute les styles dans l’admin
# config/packages/sonata_admin.yaml
sonata_admin:
assets:
extra_stylesheets:
- bundles/sonatatranslation/css/sonata-translation.css
On surcharge l’affichage du template sonata
# config/packages/sonata_admin.yaml
sonata_admin:
templates:
layout: '@SonataTranslation/standard_layout.html.twig'
On rajoute les routes
# config/routes.yaml
sonata_translation:
resource: '@SonataTranslationBundle/Resources/config/routes.yaml'
Et on active le language switcher
# config/packages/sonata_translation.yaml
sonata_translation:
locale_switcher: true
Et dernier point pour éviter l’erreur
Argument 5 passed to Twig\Extra\Intl\IntlExtension::formatDateTime() must be of the type string, null given,
Il faudra charger l’extension twig/extra-bundle avant SonataIntlBundle de sorte que la fonction formatDateTime de sonataIntl surcharge celle de TwigExtraBundle.
Ce qui nous donne ceci :
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],
