Consulter un tutoriel

Créer un site multilingue

2020-07-13 12:46:13 par François Parisien

Contexte

Imaginons qu’il nous faut un site qui soit multilangue. Il faut donc avoir la possibilité d’offrir à l’utilisateur une traduction des textes du site web. Pour ce tutoriel, nous allons nous concentrer sur la traduction de l’interface.

Description du besoin

Nous voulons offrir aux visiteurs de choisir la langue voulu pour consulter le site web. Par exemple, un visiteur anglophone pourra choisir la langue “Anglais”, alors que le visiteur francophone pourra consulter le site en français.

Requis technique

  • PHP >= 7
  • MySQL >= 5.6

Connaissances requises

  • Gérer les données de sessions;
  • Créer et utiliser des fonctions personnalisées;
  • Lire et modifier un array.

Description du fonctionnement

Lorsque le visiteur arrivera sur le site pour la première fois, nous ne connaîtrons pas son choix. Nous allons donc s’assurer d’avoir une langue par défaut. Afin d’être universel avec ce qui se fait ailleurs sur la toile, nous utiliserons l’anglais comme langue de départ.

Ensuite, le visiteur pourra faire son choix. Soit il reste sur la langue par défaut ou il choisi une langue parmis celles disponibles.

S’il choisi une autre langue, on va placer son choix dans une variable de session. Cette variable sera utilsée afin de savoir quelle langue afficher.

Dans notre code, on va donc créer une fonction qui se chargera de retourner le texte à afficher. En paramètre, on va lui passer le texte dans la langue par défaut (ici l’anglais). Ensuite, la fonction va regarder si elle doit servir la phrase dans une autre langue. Si tel est le cas, elle va aller chercher la traduction et la retourner.

Les étapes à faire

  • On va devoir créer une fonction qui devra être incluse dans chacune de nos pages. Par convention, nous appellerons cette fonction avec un double underscore (__). À chaque fois que du texte devra être affichée, on fera appel à cette fonction.
    • Elle devra d’abord regarder si une langue est choisi dans la session de l’utilisateur;
    • Si une autre langue est choisi, elle tentera d’aller chercher la traduction, si elle existe.
    • Si elle n’existe pas, elle affichera la phrase dans sa langue par défaut (la phrase passée en paramètre)
  • Un fichier de langue devra être créée. Pour simplifier le processus, on va créer un fichier par langue. À l’intérieur de ce fichier, on aura simplement un array qui aura comme clé la phrase dans la langue par défaut et comme valeur, la traduction;
  • Une nouvelle page permettant de changer la langue devra être créée. Cette page devra contenir un paramètre dans l’URL. Ce paramètre sera la langue souhaité par l’utilisateur. Une fois la page appelée, on sauvegarde la langue dans la session de l’utilisateur.

Aller plus loin

  • On peut vouloir dynamiser le contenu du texte. Par exemple, si on veut afficher la phrase “Il y a 4 élément(s)”, on se doute bien que le 4 est une valeur qui peut changer. Alors, notre phrase devra être “Il y a %s élément(s)”. Dans la fonction __(), on pourra ajouter un second argument qui devra contenir les éléments dynamiques. Ensuite, nous aurons simplement besoin de la fonction sprintf() pour les remplacer;
  • Pour éviter des phrases manquantes, on peut utiliser la fonction __() pour loguer les phrases qui n’ont pas de traductions. Ainsi, on créera une banque de phrases à traduire et on évitera les oublies;
  • Au lieu d’utiliser un fichier PHP qui contiendra un array pour les traductions, on pourrait utiliser un fichier CSV. Leur utilisation est intéressante puisqu’elle ne nécessite pas de connaissance technique. On peut donc refiler la traduction à une personne tiers qui n’aura pas besoin de comprendre comment formater son texte. Une colonne avec la phrase originale et une seconde avec la traduction. Ensuite, dans l’application, on créera un processus qui s’occupera de convertir le fichier CSV en array afin de gagner du temps;
  • Pour les gros besoins, il pourrait être intéressant d’avoir plusieurs fichiers de traductions. Cela évitera à PHP de charger un tas de traduction en mémoire alors que la plupart ne serviront pas. On pourrait découper le tout en grande section par exemple.
  • Au lieu de préserver la langue dans la session du visiteur, on pourrait créer des URLs spécifiques pour chaque langue. Le plus commun est d’utiliser par exemple https://www.monsite.com/fr . Le /fr/ indique donc la langue du contenu à afficher. S’il n’y a pas de langue de défini, on affiche la langue par défaut. Si la langue n’existe pas, on redirige vers le contenu dans la langue par défaut. Ainsi, ça sera mieux pour le référencement.

À propos de l'auteur

François Parisien

Développeur PHP de métier, mais développeur PHP surtout par passion. Au début de mon adolescence, je découvre ce langage alors que j'avais soif de faire mon propre site web. C'était au tournant des années 2000. Depuis, je n'ai cessé d'apprendre. Avec le temps, j'ai touché à plusieurs outils : Wordpress, Drupal, Joomla, Symfony, Magento 1 et Magento 2. Cela m'a apporté une plus large connaissance encore. Connaissance que je vais tenter de transmettre ici.


Scroll to Top