Vedremo come configurare un'interfaccia di’amministrazione multilingue con un pulsante di séselettore di lingua (language switcher).
Installazione di translationBundle
composer require sonata-project/translation-bundle
bin/console assets:install
Il selettore di lingua nérichiede un filtro twig spécifique.
Altrimenti otterrete un errore di tipo:
Unknown "language_name" filter.
Bisogna allora installare questi due bundle
composer require twig/intl-extra
composer require twig/extra-bundle
bin/console cache:clear
Si aggiunge la configurazione per débisogna
# 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 aggiungiamo gli stili in l’amministratore
# config/packages/sonata_admin.yaml
sonata_admin:
assets:
extra_stylesheets:
- bundles/sonatatranslation/css/sonata-translation.css
Sulla sovrattassa l’visualizzazione del template sonata
# config/packages/sonata_admin.yaml
sonata_admin:
templates:
layout: '@SonataTranslation/standard_layout.html.twig'
Si aggiungono le strade
# config/routes.yaml
sonata_translation:
resource: '@SonataTranslationBundle/Resources/config/routes.yaml'
E si attiva lo switcher della lingua
# config/packages/sonata_translation.yaml
sonata_translation:
locale_switcher: true
E ultimo punto per évite l’errore
Argument 5 passed to Twig\Extra\Intl\IntlExtension::formatDateTime() must be of the type string, null given,
Sarà necessario caricare l’estensione twig/extra-bundle prima di SonataIntlBundle in modo che la funzione formatDateTime di SonataIntl sovrascriva quella di TwigExtraBundle.
Il che ci dà questo:
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],
Adattare l’esempio alla versione installata
Gli esempi Symfony e Sonata rimangono legati alle versioni indicate nell’articolo. Symfony 4.x e Symfony 6.2 non sono più supportati: per un progetto attuale, utilizzate un ramo mantenuto e la documentazione corrispondente esattamente alle vostre dipendenze.
php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle
Prima di riprendere il codice, controllate le firme, i servizi, le rotte e i template interessati. Aggiungete poi un test funzionale che copra le autorizzazioni, il codice HTTP e il risultato visibile.
Riferimento : versioni di Symfony supportate.