IntlPull
Guide
12 min read

Meilleures Pratiques pour les Clés de Traduction en 2026 : Le Guide Définitif

Arrêtez de nommer vos clés "Button_Label". Apprenez les meilleures pratiques pour la gestion des clés de traduction : imbrication, contexte, clés dynamiques et comment éviter le chaos i18n dans les grandes applications.

IntlPull Team
IntlPull Team
03 Feb 2026, 11:44 AM [PST]
On this page
Summary

Arrêtez de nommer vos clés "Button_Label". Apprenez les meilleures pratiques pour la gestion des clés de traduction : imbrication, contexte, clés dynamiques et comment éviter le chaos i18n dans les grandes applications.

Le Problème de Nommage à 1 Millions de Dollars

Nommer des variables est difficile. Nommer des clés de traduction est encore plus difficile car vous le faites pour deux publics différents :

  1. Développeurs qui doivent les trouver et les utiliser dans le code.
  2. Traducteurs (ou IA) qui ont besoin de contexte pour traduire correctement.

Faites-le mal, et vous vous retrouvez avec common.button.save_final_v2_new et une base de code que tout le monde a peur de toucher.

Voici comment nommer et gérer vos clés de traduction en 2026.

1. Sémantique vs Descriptif

L'erreur la plus courante est de nommer les clés en fonction de leur contenu en anglais plutôt que de leur signification dans l'application.

❌ Mauvais : Basé sur le Contenu

JSON
1{
2  "Hello_World": "Hello World",
3  "Click_Here": "Click Here",
4  "Save_Button_Blue": "Save Changes"
5}

Pourquoi ça échoue : "Click Here" pour quoi ? "Save Button" où ? Si vous changez le texte de "Save Changes" à "Update", la clé Save_Button_Blue est maintenant un mensonge.

✅ Bon : Basé sur la Sémantique (Contextuel)

JSON
1{
2  "onboarding.welcome_title": "Hello World",
3  "auth.login.submit_button": "Log In",
4  "settings.profile.save_button": "Save Changes"
5}

Pourquoi ça gagne : La clé décrit et quoi, pas la valeur du texte. Vous pouvez changer "Log In" par "Sign In" sans renommer la clé.

2. Imbrication vs Plat

La guerre sainte du JSON.

Clés Imbriquées (Jadis Populaires)

JSON
1{
2  "auth": {
3    "login": {
4      "title": "Login",
5      "button": "Submit"
6    },
7    "signup": {
8      "title": "Sign Up"
9    }
10  }
11}

Utilisation : t('auth.login.title')

Pour : Organisé visuellement dans le fichier. Contre : Difficile à rechercher (grep). Si vous déplacez des objets, les chemins changent. Fusion git cauchemardesque.

Clés Plates (Le Standard Moderne)

JSON
1{
2  "auth.login.title": "Login",
3  "auth.login.button": "Submit",
4  "auth.signup.title": "Sign Up"
5}

Utilisation : t('auth.login.title')

Pour : Facile à rechercher ("auth.login.title" est unique). Fusions git faciles (ligne par ligne). Meilleur pour les TMS. Contre : Répétition des préfixes.

Verdict 2026 : Utilisez des clés plates pour la source (DX), laissez votre bibliothèque i18n gérer l'analyse. La plupart des outils modernes fonctionnent mieux avec des structures plates.

3. La Hiérarchie de Nommage

Utilisez une structure cohérente. Nous recommandons :

DOMAIN.COMPONENT.ELEMENT_VARIANT

Exemples :

  • marketing.pricing_card.cta_button
  • dashboard.user_table.column_header_name
  • errors.api.404_message

Cela regroupe naturellement les clés connexes lorsqu'elles sont triées par ordre alphabétique.

4. Gérer la Duplication

Devriez-vous réutiliser common.save ou créer profile.save_button et settings.save_button ?

La Règle d'Or : Réutiliser pour les Actions, Dupliquer pour le Contenu

Réutiliser (Communs) : Des actions simples et universelles qui ne changeront probablement jamais de sens.

  • actions.save
  • actions.cancel
  • actions.delete
  • common.loading

Dupliquer (Spécifiques) : Même si le texte est le même maintenant, le contexte diffère.

  • profile.bio_placeholder ("Parlez-nous de vous")
  • project.description_placeholder ("Décrivez votre projet")

En anglais, c'est peut-être "Enter text here" pour les deux. En allemand, le genre ou le ton pourrait différer. Si vous les liez à une seule clé, vous ne pouvez pas les changer indépendamment plus tard.

5. Espaces Réservés et Variables

N'utilisez jamais de concaténation de chaînes. Utilisez toujours l'interpolation.

❌ Mauvais

JavaScript
t('welcome_message') + ' ' + userName

En français, l'adjectif pourrait venir avant ou après. La grammaire diffère.

✅ Bon (Style ICU)

JSON
"welcome_message": "Welcome back, {name}!"
JavaScript
t('welcome_message', { name: userName })

Laisse le traducteur décider de l'ordre des mots.

6. Pluralisation

La pluralisation est complexe. N'essayez pas de la faire avec if/else.

❌ Mauvais

JavaScript
const key = count === 1 ? 'item_singular' : 'item_plural';
t(key)

Certaines langues ont 6 formes de pluriel (Arabe). Votre logique if/else échouera.

✅ Bon (Format ICU)

JSON
"cart.item_count": "{count, plural, =0 {No items} one {# item} other {# items}}"

Laissez la bibliothèque i18n (comme react-intl ou i18next) gérer la logique complexe.

7. Espaces de Noms

Ne mettez pas 5000 clés dans un seul fichier common.json. Divisez par fonctionnalité ou page.

Structure Recommandée :

  • common.json (Boutons, étiquettes universelles)
  • auth.json (Login, Signup, Récupération de mot de passe)
  • dashboard.json
  • settings.json
  • landing_page.json

Pourquoi ?

  • Chargement différé : Chargez seulement les traductions nécessaires pour la page courante. (Performance web vitale).
  • Conflits git réduits.
  • Propriété plus claire : L'équipe "Auth" possède auth.json.

8. Clés Dynamiques

Évitez de générer des clés dynamiquement si vous le pouvez.

⚠️ Risqué

JavaScript
const status = 'active';
t(`status.${status}`) // Cherche 'status.active'

Les scanners de code (extracteurs) ne peuvent pas trouver ces clés. Vous devrez les ajouter manuellement à une liste d'autorisation, sinon elles seront signalées comme inutilisées ou manquantes.

✅ Meilleur (Mappage)

JavaScript
1const statusMap = {
2  active: 'status.active',
3  pending: 'status.pending',
4};
5t(statusMap[status]);

Maintenant les clés sont explicites et trouvables par grep/extracteurs.

9. Supprimer les Clés (Le Cimetière)

Les clés inutilisées s'accumulent. Personne ne les supprime de peur de casser quelque chose.

La Solution 2026 : Outils Automatisés Utilisez des outils comme IntlPull CLI ou i18n-unused pour scanner votre base de code.

  1. Scannez le code source pour tous les appels t('key').
  2. Comparez avec votre fichier JSON.
  3. Signalez les clés dans JSON qui ne sont pas dans le code.

Faites-le dans votre CI. Ne laissez pas le cimetière grandir.

10. Contexte pour l'IA

Les traducteurs IA (comme GPT/Claude) ont besoin de contexte. Les noms de clés ne suffisent pas toujours.

Si vous utilisez un format qui supporte les métadonnées (comme JSON avec des clés imbriquées ou des commentaires), ajoutez-le.

JSON
1{
2  "search_button": {
3    "value": "Search",
4    "description": "Button in the top navigation bar",
5    "limit": 20
6  }
7}

Ou utilisez des conventions de nommage qui aident l'IA : header.nav.search_cta est meilleur que btn_src.

Résumé : La Checklist de la Clé Parfaite

  1. Minuscule avec tirets bas (user_profile)
  2. Plat avec notation par points (auth.login.title)
  3. Sémantique (submit_button) pas contenu (click_here)
  4. Interpolation utilisée ({name}) pas concaténation
  5. Appartient à un espace de noms spécifique (settings.) sauf si vraiment global
  6. Supprimée si inutilisée (automatiquement)

Adoptez ces règles, et votre futur vous (et vos traducteurs) vous remerciera.

Tags
i18n
best-practices
translation-keys
localization
developer-experience
IntlPull Team
IntlPull Team
Engineering

Building tools to help teams ship products globally. Follow us for more insights on localization and i18n.