Académique Documents
Professionnel Documents
Culture Documents
fr
Accueil
/
Tous les articles
/ 16 - Live Coding : Créer un site multilingue avec
Symfony 4
A A S Réal C C In
16 - Live Coding : Créer un site multilingue avec Symfony 4
ue cle ie ons ta exio ptio
il s s ct n n
https://nouvelle-techno.fr/articles/live-coding-creer-un-site-multilingue-avec-symfony-4 1/8
9/21/21, 1:49 PM 16 - Live Coding : Créer un site multilingue avec Symfony 4 - Nouvelle-Techno.fr
Catégories : Tutoriel
Symfony
Live-Coding
Mots-clés : Tutoriel
Controllers
MVC
Views
Symfony
Live-Coding
traduction
420 lectures
Auteur : Benoit
Il arrive parfois d'avoir à mettre en place un site dans plusieurs langues, au niveau de son interface utilisateur.
Symfony nous propose des outils pour mettre en place cette "localisation", également appelée "Internationalization" ou "i18n"
(en référence au nombre de caractères entre i et n).
ATTENTION : nous n'allons pas traiter de la traduction du contenu de la base de données, traîtée par l'extension Doctrine
Translatable⧉.
Symfony utilisera le service de traduction (Translation service) pour rechercher une traduction pour les chaînes identifiées. Si il
trouve une traduction, il remplacera la chaîne par sa traduction.
Information : il sera toujours préférable d'écrire le site en langue anglaise et de le traduire vers les autres langues.
Installer le service
Le service de traduction s'installera au moyen de Composer. Il est déjà installé par défaut dans les configurations basées sur
"website-skeleton".
Une fois installé, le service sera configuré par le fichier "config/packages/translation.yaml" qui contient le code ci-dessous par
défaut
# config/packages/translation.yaml
framework:
default_locale: 'en'
translator:
default_path: '%kernel.project_dir%/translations'
L'option "default_locale" permet de définir la langue par défaut du site. Nous allons configurer le Français en indiquant "fr".
Utiliser le service
https://nouvelle-techno.fr/articles/live-coding-creer-un-site-multilingue-avec-symfony-4 2/8
9/21/21, 1:49 PM 16 - Live Coding : Créer un site multilingue avec Symfony 4 - Nouvelle-Techno.fr
Une fois le service de traduction installé, nous allons pouvoir l'utiliser. Il est possible de traduire des chaînes directement dans
les contrôleurs, mais également dans les vues.
Si vous devez envoyer une chaîne à traduire depuis un contrôleur, comme dans un message flash par exemple, il est possible
de le faire en utilisant les instructions suivantes dans le contrôleur
use Symfony\Contracts\Translation\TranslatorInterface;
// ...
Nous devrons parfois traduire des chaînes directement dans les vues (fichiers Twig) afin de personnaliser l'interface en
fonction de la langue de l'utilisateur.
{% else %}
{% endfor %}
Nous aurons à traduire les expressions "Commentaires", "Publié par" et "Il n'y a pas encore de commentaire"
Nous allons déclarer des chaînes traductibles dans les vues, comme ci-dessous
{# ou #}
{{ 'Chaîne à traduire'|trans }}
Nous allons utiliser les deux dans notre exemple. Ce qui donnera
{% else %}
https://nouvelle-techno.fr/articles/live-coding-creer-un-site-multilingue-avec-symfony-4 3/8
9/21/21, 1:49 PM 16 - Live Coding : Créer un site multilingue avec Symfony 4 - Nouvelle-Techno.fr
{% endfor %}
Nous allons enfin créer le fichier de traduction qui contiendra les chaînes en anglais et leur traduction dans la langue de notre
choix.
Création manuelle
Le fichier sera à créer en utilisant le code de la langue sur 2 caractères (à l'emplacement de xx), comme fr pour le français.
Pour traduire notre message flash vu précédemment, nous inscrirons donc ceci dans le fichier
<header>
</header>
<body>
</trans-unit>
</body>
</file>
</xliff>
Création automatique
Il existe une commande permettant de créer automatiquement le fichier de traduction pour la langue de notre choix.
Cette commande va parcourir tous les fichiers et intégrer toutes les chaines dans le fichier correspondant à la langue choisie.
Pour permettre aux utilisateurs de choisir la langue dans laquelle le site doit s'afficher, nous allons devoir stocker la langue
choisie dans la session.
https://nouvelle-techno.fr/articles/live-coding-creer-un-site-multilingue-avec-symfony-4 4/8
9/21/21, 1:49 PM 16 - Live Coding : Créer un site multilingue avec Symfony 4 - Nouvelle-Techno.fr
Pour commencer, nous allons créer une variable d'environnement qui contiendra la liste des langues souhaitée.
parameters:
Nous allons également déclarer cette variable globalement dans les fichiers Twig afin d'y accéder depuis tous les fichiers.
Nous l'appellerons "locales" et l'intégrons dans "config/packages/twig.yaml"
twig:
default_path: '%kernel.project_dir%/templates'
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'
globals:
locales: '%app.locales%'
On crée maintenant une méthode dans un contrôleur qui permettra de changer la langue.
/**
* @Route("/change_locale/{locale}", name="change_locale")
*/
$request->getSession()->set('_locale', $locale);
return $this->redirect($request->headers->get('referer'));
Nous appellerons cette méthode depuis notre menu ou tout fichier Twig dans lequel nous donnerons le choix de la langue aux
utilisateurs.
{% if locale != app.request.locale %}
{% endif %}
{% endfor %}
https://nouvelle-techno.fr/articles/live-coding-creer-un-site-multilingue-avec-symfony-4 5/8
9/21/21, 1:49 PM 16 - Live Coding : Créer un site multilingue avec Symfony 4 - Nouvelle-Techno.fr
Afin de gérer les changements de langues dans le coeur de Symfony (Kernel), nous allons nous attacher à chacune des
requêtes en créant un souscripteur d'évènements (EventSubscriber).
Symfony\Component\HttpKernel\Event\RequestEvent
<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
private $defaultLocale;
$this->defaultLocale = $defaultLocale;
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
return;
if ($locale = $request->query->get('_locale')) {
$request->setLocale($locale);
} else {
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
https://nouvelle-techno.fr/articles/live-coding-creer-un-site-multilingue-avec-symfony-4 6/8
9/21/21, 1:49 PM 16 - Live Coding : Créer un site multilingue avec Symfony 4 - Nouvelle-Techno.fr
return [
];
Obtenir de l'aide
Pour obtenir de l'aide, vous pouvez accéder au serveur Discord⧉ pour une entraide par chat
CGU Equipe
https://nouvelle-techno.fr/articles/live-coding-creer-un-site-multilingue-avec-symfony-4 7/8
9/21/21, 1:49 PM 16 - Live Coding : Créer un site multilingue avec Symfony 4 - Nouvelle-Techno.fr
https://nouvelle-techno.fr/articles/live-coding-creer-un-site-multilingue-avec-symfony-4 8/8