Dans cette partie du cours voyons comment utiliser la traduction avec Symfony 5
Le terme «internationalisation» (souvent abrégé en i18n) fait référence au processus d’abstraction de chaînes et d’autres éléments spécifiques aux paramètres régionaux de votre application dans une couche où ils peuvent être traduits et convertis en fonction des paramètres régionaux de l’utilisateur (c’est-à-dire la langue et le pays).
Pour le texte, cela signifie envelopper chacun avec une fonction capable de traduire le texte (ou «message») dans la langue de l’utilisateur:
// Ce texte là sera toujours écrit en anglais echo 'Hello World'; // le texte peut être traduit dans la langue de l'utilisateur final ou // anglais par défaut echo $translator->trans('Hello World');
Comment installer la traduction Symfony et l’utiliser facilement ?
Le processus de traduction comporte plusieurs étapes:
- Activer et configurer le service de traduction de Symfony;
- Chaînes abstraites (c’est-à-dire «messages») en les enveloppant dans des appels au traducteur («traduction de base»);
- Créez des ressources / fichiers de traduction pour chaque locale prise en charge qui traduisent chaque message dans l’application;
- Déterminez, définissez et gérez les paramètres régionaux de l’utilisateur pour la demande et éventuellement sur l’ensemble de la session de l’utilisateur.
Installation
Tout d’abord, exécutez cette commande pour installer le traducteur avant de l’utiliser:
composer require symfony/translation
Configurer nos fichiers de configuration
# config/packages/translation.yaml framework: default_locale: 'en' translator: default_path: '%kernel.project_dir%/translations'
Simple traduction
La traduction du texte se fait via le service de traduction (Symfony \ Component \ Translation \ Translator). Pour traduire un bloc de texte (appelé message), utilisez la méthode trans (). Supposons, par exemple, que vous traduisez un message statique depuis l’intérieur d’un contrôleur:
// ... use Symfony\Contracts\Translation\TranslatorInterface; public function index(TranslatorInterface $translator) { $translated = $translator->trans('Hello'); // ... }
Lorsque ce code est exécuté, Symfony tentera de traduire le message «Symfony is great» en fonction des paramètres régionaux de l’utilisateur. Pour que cela fonctionne, vous devez indiquer à Symfony comment traduire le message via une «ressource de traduction», qui est généralement un fichier contenant une collection de traductions pour une locale donnée. Ce «dictionnaire» de traductions peut être créé dans plusieurs formats différents:
# translations/messages.fr.yaml Hello: Bonjour
Extraire automatiquement le contenu traduit avec une commande
php bin/console translation:update --dump-messages fr php bin/console translation:update --force fr php bin/console translation:update --help
Vider son cache de temps en temps
Il se peut que des fois les traductions ne se mettent pas à jour, il est nécessaire de vider son cache, voici la commande au cas où
php bin/console cache:clear