Couverture de l'article Maîtriser la traduction (i18n) dans un projet web - Partie 2 : Conseils pour une localisation gérable et évolutive
Retour aux articles

L'agence

WanadevStudio

Maîtriser la traduction (i18n) dans un projet web - Partie 2 : Conseils pour une localisation gérable et évolutive

Dans la partie 1, nous nous sommes concentrés sur la mise en place d'une base solide pour la gestion des traductions dans un projet Vue. Maintenant que votre système de traduction est opérationnel, il est temps d'examiner de plus près comment structurer, gérer et faire évoluer vos fichiers de traduction de manière efficace.

Cette partie couvrira les bonnes pratiques que nous utilisons chez Wanadev pour créer des clés de traduction maintenables, éviter les pièges courants et garantir que vos fichiers de traduction restent propres et évolutifs au fur et à mesure que votre projet grandit.

(Cet article est aussi disponible en anglais ici.)

Vous lisez actuellement la 2ème partie de cet article, la 1ère partie est disponible sur notre blog à cette adresse.

Structure des fichiers de traduction

Évitez les structures de traduction imbriquées, qui compliquent la recherche et la mise à jour. Utilisez plutôt des clés de traduction à plat avec des noms descriptifs. L’avantage d’une structure de traduction aplatie est qu’elle améliore considérablement la recherche dans un IDE. Avec une structure imbriquée, chercher une clé comme "patient.profile.context" ne donne aucun résultat direct, rendant plus difficile la localisation et la mise à jour des traductions. En revanche, avec une structure plate et des clés comme "patient_profile_context", on trouve immédiatement la traduction correspondante.

Ce simple avantage permet de gagner du temps, réduit la frustration et améliore la maintenabilité, surtout dans les projets de grande envergure où les recherches rapides sont essentielles.

❌ Évitez ce code imbriqué :

{
  "patient": {
"profile": {
"context": "Contexte",
        "job": "Profession"
}
  },
  "lifeguard": {
    "flag": {
        "reason": {
            "pollution_start: "Pollution"
},
"red": "Rouge"
}
   }  
}

}

✅ Préférez plutôt une version plus lisible :

{
"patient_profile_context": "Contexte",

    "patient_profile_job": "Profession",

    "lifeguard_flag_reason_pollution": "Pollution",

    "lifeguard_flag_red": "Rouge",
}

Clés de traduction

Dans le cas où il y a plusieurs mots, nous utilisons le snake_case pour les clés. Cela rend la phrase plus facile à lire et vous permet de sélectionner la clé entière en double-cliquant dessus.

❌ Mauvais exemple (vous ne pouvez pas copier la clé en double-cliquant dessus) :

{
"project-name": "Nom du project",
}

✅ Mieux :

{
"project_name": "Nom du project",
}

Le fait de rendre les clés de traduction trop compliquées les rend non réutilisables et difficiles à maintenir. On pourrait penser que c’est une bonne idée d’ajouter du contexte dans les clés de traduction, mais avec le temps, ce contexte pourra évoluer avec le besoin métier, et vous ne renommerez pas la clé, ce qui engendrera de la confusion sur le sens de cette dernière. Les mots simples doivent avoir des clés simples. Améliorons la traduction de l'exemple précédent.

❌ Ce que nous avons :

{
"patient_profile_context": "Contexte",

    "patient_profile_job": "Profession",

    "lifeguard_flag_reason_pollution": "Pollution",

    "lifeguard_flag_red": "Rouge",
}

✅ Ce que nous devrions avoir :

{
"context": "Contexte",

    "job": "Profession",

    "pollution": "Pollution",

    "red": "Rouge",
}

Ponctuation finale

Une autre fausse bonne idée serait de ne pas ajouter les signes de ponctuation à la fin de la traduction pour la garder réutilisable, par exemple :

Peut être réutilisé :

{
"question": "Question"
}

Moins susceptible d'être réutilisé :

{
"question": "Question?",
}

Le problème avec cette approche, c'est que la ponctuation fait partie intégrante de la langue. Par exemple, en anglais, on écrit Question?, tandis qu'en français, l'espace avant le point d'interrogation est obligatoire : Question ?, et en espagnol, on ajoute un point d'interrogation inversé : ¿Cuestión?. Il vaut mieux dupliquer une traduction avec la ponctuation appropriée pour chaque langue plutôt que de risquer des erreurs de mise en forme ou de compréhension.

✅ C'est pourquoi nous incluons la ponctuation dans nos traductions :

{
"question": "Question?",
}

Pluralisation

Si vous avez besoin de formes singulières et plurielles, vous pouvez utiliser un séparateur pipe |. Les traductions ressembleront à ceci :

{
"product": "Produit | Produits"
}

En l'utilisant dans le code, cela donne :

<span>{{ $t('product', 1) }}</span>// Produit

<span>{{ $t('product', 1000) }}</span>// Produits

Lors de la gestion de la localisation, il est important de noter que certaines langues, en particulier les langues slaves comme le russe ou le polonais, ont des règles de pluralisation plus complexes que le simple singulier et pluriel. Par exemple, en russe, «1 produit», «2 produits» et «5 produits» nécessitent chacun une forme différente. Il peut être nécessaire de définir une fonction de pluralisation personnalisée. Vous pouvez en apprendre davantage sur la personnalisation des règles de pluralisation dans Vue I18n ici : Pluralisation personnalisée.

Listes

Comment traiter les traductions de listes quand elles ont un style complexe ? Vous ne pouvez pas vraiment inclure de style dans votre traduction, à moins de vous exposer à la faille XSS. Titre_de_l_image

L'une des solutions serait d'avoir 3 traductions séparées. Mais ce n'est pas idéal.

❌ Pas de lien entre les traductions de la même liste :

{
"one": "one",

"two": "two",

"three": "three"
}

❌ Clés trop complexes :

{
"question_one": "one",

"question_two": "two",

"question_three": "three"
}

✅ Pour surmonter ces limitations, la meilleure approche reste l'utilisation d'un tableau :

{
questions: [

"one",

"two",

"three"
}

Vous pouvez ainsi styliser vos listes avec du CSS ou TailwindCSS comme dans notre exemple :

<ul class="list-inside list-disc">

<li>{{ $t('questions[0]') }}</li>

<li>{{ $t('questions[1]') }}</li>

<li>{{ $t('questions[2]') }}</li>
</ul>

Fournir aux clients un accès aux traductions

Pour faciliter la mise à jour des traductions par un tiers, vous pouvez utiliser des outils comme POEditor, qui permettent aux clients de modifier directement les traductions, sans intervention du développeur, avec une interface soignée et intuitive. Ces modifications peuvent être intégrées à votre processus Git et fusionnées via API, améliorant ainsi la collaboration.

Conclusion

Si vous choisissez de suivre ces conseils, vous pouvez vous assurer que votre configuration de traduction restera maintenable et évolutive au fur à mesure que votre projet évolue. Des conventions de nommage de clés claires, une gestion appropriée de la ponctuation et l'utilisation de l'automatisation pour le tri et le nettoyage des fichiers de traduction feront gagner du temps à votre équipe et réduiront le risque d'erreurs. De plus, fournir aux clients des outils comme POEditor pour modifier directement les traductions peut favoriser une meilleure collaboration et simplifier le processus de traduction.

J'espère que ces informations vous aideront à être bien équipé pour construire une application multilingue robuste qui peut croître avec les besoins de vos utilisateurs.

La 1ère partie de cet article est disponible ici.

Titre_de_l_image

Découvrez le quotidien d'Aleksandr (Sasha), Développeur web chez WanadevDigital dans son article "Dans les coulisses" disponible sur notre blog.

Commentaires

Il n'y a actuellement aucun commentaire. Soyez le premier !

  • Couverture de l'article Design to code : comment l'IA redéfinit les rôles entre design et développement
    Design to code : comment l'IA redéfinit les rôles entre design et développement

    Il y a 1 semaine

    Chez un fournisseur de solutions 3D web, la collaboration entre designers et développeurs, c'est le cœur du réacteur. C'est aussi, soyons honnêtes, une source de friction chronique : des intentions créatives qui se perdent en chemin, des cycles de validation qui s'étirent, des allers-retours qui s'accumulent. Ce n'est la faute de personne. C'est la faute du processus. Depuis qu'on intègre l'IA dans le workflow des équipes avec lesquelles je travaille, ce processus a changé.

  • Couverture de l'article Retour sur le Meet-up Python du 30 juin 2025
    Retour sur le Meet-up Python du 30 juin 2025

    Il y a 1 an

    Ce lundi 30 juin 2025 nous accueillions la branche lyonnaise de l'AFPy dans nos locaux pour un meetup autour du langage Python. Malgré les fortes températures, une trentaine de personnes ont répondu présentes pour ce moment de convivialité et d'échange.

  • Couverture de l'article Figma Make : enfin une passerelle prometteuse entre design et code grâce à l'IA
    Figma Make : enfin une passerelle prometteuse entre design et code grâce à l'IA

    Il y a 1 an

    Depuis quelques années, les outils d'IA pour générer des intégrations d'interfaces à partir de maquettes fleurissent. On en a testé plusieurs chez WanadevDigital : de Locofy à Uizard, en passant par Framer AI. Tous ont leurs qualités, mais jusqu’ici, il manquait un vrai pont stable entre les intentions du designer et la réalité du code front.

    L’arrivée de Figma Make change la donne. Et si je devais résumer son impact en une phrase : ça fonctionne, et ça fonctionne pour tout le monde, designers, développeurs et intégrateurs !

  • Couverture de l'article Maîtriser la traduction (i18n) dans un projet web - Partie 1 : Configurer proprement
    Maîtriser la traduction (i18n) dans un projet web - Partie 1 : Configurer proprement

    Il y a 1 an

    Mettre en place l'internationalisation (i18n) dans un projet web peut sembler simple. Cependant, de nombreux projets se retrouvent avec des configurations de traduction mal gérées, difficiles à maintenir ou à faire évoluer à mesure que l'application grandit. Une stratégie i18n robuste est essentielle pour offrir une expérience utilisateur fluide dans plusieurs langues.

    Je vous décris ici, les pratiques que nous avons établies chez Wanadev au fil des années d'expérience pour mettre en œuvre et gérer les traductions dans les projets Vue. Bien que les exemples soient spécifiques à Vue, la plupart de ces pratiques peuvent être appliquées à n'importe quel framework.

  • Couverture de l'article Bien choisir sa typographie : quelques bases pour un message clair
    Bien choisir sa typographie : quelques bases pour un message clair
    Méthodologie

    Il y a 2 ans

    On n'écrit pas "Je t'aime" comme "Je te hais" ! Cette petite phrase résume bien ma problématique : quand on doit délivrer un message, la compréhension de ce dernier ne se fait pas uniquement par la lecture simple du texte, mais aussi par sa mise en forme. Et de cette mise en forme dépend la bonne compréhension du message. Dans cet article, nous allons nous pencher sur l’histoire et les familles de typographies dans le but de sensibiliser sur l’importance des choix de typographies dans la communication. Nous verrons ensuite quelques astuces pour bien sélectionner sa typographie et mettre en forme son message.

  • Couverture de l'article Les solutions CPQ sont-elles accessibles à toutes les entreprises ?
    Les solutions CPQ sont-elles accessibles à toutes les entreprises ?
    Méthodologie

    Il y a 2 ans

    Le CPQ (Configure, Price, Quote) est un outil essentiel pour les entreprises cherchant à optimiser leurs processus de vente. Il permet aux équipes commerciales de configurer rapidement et facilement des produits ou services complexes en fonction des besoins spécifiques des clients, tout en garantissant la cohérence des prix. Grâce au CPQ, les vendeurs peuvent établir des devis précis et personnalisés en temps réel, tout en tenant compte des remises, des promotions ou des ajustements spécifiques. Aujourd'hui les CPQ tirent majoritairement parti de la 3D pour proposer une visualisation de produit plus réaliste et complète.