Traduction Symfony 5

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