Tuesday, June 30, 2026

Lisez ceci en deux langues : le multilingue sur ce site

Image de voyage évoquant un site qui parle plus d'une langue

L'article que vous lisez existe en anglais et en français. Même page, même mise en page, même auteur—deux langues. Si le sélecteur de langue dans l'en-tête est réglé sur le français, vous lisez une version entièrement traduite de ce billet. Cliquez sur le drapeau en haut et regardez la page changer de langue sans perdre votre place.

Cette petite interaction cache quelques décisions qui méritent une explication, car le multilingue fait partie des choses que les équipes sous-estiment jusqu'à ce qu'elles atteignent un troisième marché et se mettent à copier du contenu entre des feuilles de calcul.

Un seul élément de contenu, plusieurs langues

Dans Agility, ce billet est un seul élément de contenu portant un seul identifiant. Les versions anglaise et française partagent cet identifiant; ce sont deux langues d'un même enregistrement, et non deux billets distincts agrafés ensemble. C'est important : quand un rédacteur ouvre l'élément, il voit toutes les langues au même endroit, et notre code peut demander ce billet en français sans deviner quelle ligne est la traduction.

L'avantage se manifeste partout en aval. L'auteur, la catégorie, la date de publication—tout ce qui n'est pas la langue—reste lié d'une langue à l'autre. Les traducteurs ne touchent qu'aux mots qui changent réellement.

Des URL localisées, résolues à partir du plan du site

La version anglaise se trouve à une adresse simple. La version française vit sous un préfixe /fr. Certaines pages ont même des slugs différents selon la langue, parce qu'une bonne URL française n'est pas toujours la traduction mot à mot de l'anglaise. Le site ne code rien de tout cela en dur—il lit le plan du site qu'Agility génère pour chaque langue et résout le bon chemin au moment de la requête.

C'est aussi ainsi que fonctionne le drapeau dans l'en-tête. Quand vous changez de langue, le site repère la page où vous êtes par son identifiant, trouve la page correspondante dans le plan du site de l'autre langue, et vous y envoie. Si une traduction n'existe vraiment pas, vous obtenez une vraie page 404 plutôt qu'une page à moitié traduite. Le changement se fait sur le serveur, donc le lien que vous cliquez mène déjà à la bonne destination.

Pourquoi procéder ainsi

Parce que l'autre approche—gérer les langues comme des copies déconnectées—s'effondre en silence. Les slugs dérivent. Un billet est mis à jour dans une langue et pas dans l'autre. Quelqu'un publie une page qui existe en anglais mais renvoie une 404 en français, et personne ne le remarque pendant un mois.

Relier chaque langue à un seul élément de contenu, et résoudre chaque URL à partir du plan du site, fait en sorte que la structure garde les langues honnêtes. Le site peut toujours répondre à deux questions : cette page a-t-elle une version dans cette langue, et quelle est son adresse là-bas. Tout ce que le lecteur vit—le drapeau, les URL propres, ce paragraphe même en deux langues—découle de ces deux réponses.

Maintenant, changez de drapeau et relisez-le.