Traduisez les applications React avec l’IA de qualité humaine

Apprenez à traduire une application React en utilisant react-i18next et des fichiers JSON dans ce guide d’internationalisation React étape par étape.

Ce guide utilise un petit projet React + Vite et le prépare pour la localisation, notamment :

  • Le chargement de fichiers JSON de traduction
  • L’utilisation de la fonction t() pour les traductions
  • La gestion du texte dynamique (interpolation, pluriels, texte enrichi avec <Trans />)
  • La traduction de fichiers JSON avec l’IA

Vous pouvez suivre les exemples de commit ou appliquer les mêmes étapes à votre application React existante.

Ce dont vous avez besoin pour traduire une application React

Pour suivre ce tutoriel, vous aurez besoin de :

  • Node.js et npm
  • Des connaissances de base en React
  • Un éditeur de code tel que VS Code

Bien sûr, vous aurez également besoin d’un outil de traduction. Nous utiliserons PTC (Private Translation Cloud) pour créer des fichiers JSON traduits. Vous pouvez vous inscrire pour un essai gratuit maintenant ou attendre jusqu’à ce que nous atteignions l’étape de traduction.

Configurer l’internationalisation React (avec des exemples de commit)

1

Configurez votre application React pour la traduction

Si vous avez déjà une application React, passez à l’étape 2.

Pour créer une nouvelle application React + TypeScript, ouvrez votre terminal, naviguez vers le dossier où vous gardez vos projets, et exécutez :

npm create vite@latest react-localization-demo -- --template react-ts
cd react-localization-demo
npm install
npm run dev

Cela démarre un serveur de développement et ouvre la page Vite + React par défaut dans votre navigateur.

2

Ajouter du texte destiné à l’utilisateur à votre application React

Avant d’ajouter react-i18next, vous devez préparer le texte en langue source que vous souhaitez traduire. Ouvrez src/App.tsx et ajoutez vos chaînes destinées à l’utilisateur :

function App() {
  return (
    <div>
      <h1>Welcome</h1>
      <p>This is a localization demo.</p>
      <button onClick={() => alert('Click me')}>Click me</button>
    </div>
  );
}

Pour les besoins de notre démonstration, nous avons gardé notre interface utilisateur simple avec un titre, une description et un bouton.

3

Configurer react-i18next dans votre application React

Maintenant que votre application React affiche du texte anglais de base, il est temps de connecter react-i18next pour que ces chaînes puissent provenir d’un fichier de traduction au lieu d’être codées en dur.

Cette étape comporte trois parties :

  1. Installez i18next et react-i18next
  2. Créez votre fichier de traduction anglaise (en.json)
  3. Mettez à jour votre composant pour utiliser le hook useTranslation

3.1 installer les bibliothèques i18n

Depuis le dossier de votre projet, installez les bibliothèques :

npm install i18next react-i18next

Dans cet exemple :

  • i18next est la bibliothèque d’internationalisation principale
  • react-i18next ajoute des liaisons React comme le hook useTranslation

3.2 créer le fichier source anglais pour la traduction (en.json)

Créez la structure de dossiers suivante :

src/
  i18n/
    locales/
      en.json

Ensuite, ajoutez vos chaînes en anglais à src/i18n/locales/en.json :

{
  "welcome": "Welcome",
  "description": "This is a localization demo.",
  "clickMe": "Click me"
}

Chaque clé (welcome, description, clickMe) correspond au texte que vous souhaitez afficher dans l’interface utilisateur.

3.3 mettre à jour app.tsx pour utiliser useTranslation

Remplacez votre texte anglais codé en dur par des appels à la fonction de traduction t().

Le hook useTranslation() donne à votre composant accès à :

  • t() – recherche une chaîne par clé
  • i18n – vous permet de changer de langue par programmation

Mettez à jour src/App.tsx :

import { useTranslation } from 'react-i18next';

function App() {
  const { t } = useTranslation();

  return (
    <div>
      <h1>{t('welcome')}</h1>
      <p>{t('description')}</p>
      <button onClick={() => alert(t('clickMe'))}>{t('clickMe')}</button>
    </div>
  );
}

export default App;

4

Initialiser i18next et charger automatiquement les fichiers JSON

Pour l’instant, votre composant appelle t('welcome'), mais i18next ne sait pas encore :

  • Où se trouve en.json
  • Quelles langues existent
  • Quelle devrait être la langue par défaut

Dans cette étape, vous allez initialiser i18next et lui dire de charger automatiquement tous les fichiers JSON de votre dossier locales en utilisant import.meta.glob de Vite.

4.1 créer le fichier de configuration i18n

Créez un nouveau fichier à :

src/i18n/index.ts

Ajoutez la configuration suivante :

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';

type TranslationResources = string | { [k: string]: TranslationResources } | TranslationResources[];

const modules = import.meta.glob<{default: Record<string, TranslationResources>}>('./locales/*.json', { eager: true })

const resources: Record<string, { translation: Record<string, TranslationResources> }> = {};

for (const path in modules) {
  const lang = path.match(/\.\/locales\/(.*)\.json$/)?.[1];
  if (lang) {
    resources[lang] = { translation: modules[path].default };
  }
}

i18n
  .use(initReactI18next)
  .init({
    resources,
    fallbackLng: 'en',
    interpolation: { escapeValue: false },
  });

export default i18n;

Cette configuration est utile car :

  • Chaque fichier *.json que vous ajoutez à src/i18n/locales/ devient automatiquement disponible.
  • Lorsque PTC crée de nouveaux fichiers de langue (par exemple ar.json), ils seront automatiquement chargés par cette configuration — aucun import ou changement de code n’est nécessaire.

Référence de commit : configurer la configuration i18n

4.2 importer i18n dans le point d’entrée de votre application

Avant que React ne rende votre application, i18next a besoin d’une chance de s’initialiser. Pour que cela se produise, vous devez importer votre configuration i18n dans le fichier d’entrée.
Si vous sautez cette étape, t() retournera simplement les clés de traduction au lieu du texte traduit.

Ouvrez src/main.tsx et ajoutez l’import mis en évidence :

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App.tsx'
import './index.css'
import './i18n'  // ← Add this import!

ReactDOM.createRoot(document.getElementById('root')!).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
)

5

Gérer les pluriels, l’interpolation et le texte enrichi

Jusqu’à présent, vous n’avez utilisé que des chaînes statiques comme “Bienvenue” et “Cliquez-moi”. Mais les vraies applications ont besoin de contenu dynamique :

  • Inclure des liens ou du formatage dans le texte traduit
  • Saluer les utilisateurs par leur nom
  • Afficher des décomptes (“1 message” vs “3 messages”)

5.1 interpolation : ajouter des variables aux traductions

Au lieu de coder en dur des valeurs qui changent à l’exécution, vous pouvez les interpoler dans vos traductions.

Pour ce faire, incluez une variable à l’intérieur de {{ }} dans votre JSON, puis passez la valeur réelle lors de l’appel à t().

Mettez à jour src/i18n/locales/en.json :

{
  "welcome": "Welcome",
  "userGreeting": "Welcome back, {{firstName}}!",
  "description": "This is a localization demo.",
  "clickMe": "Click me"
}

Maintenant, mettez à jour votre composant pour utiliser le message de bienvenue interpolé :

import { useTranslation } from 'react-i18next';

function App() {
  const { t } = useTranslation();
  const user = { firstName: 'Sarah' };

  return (
    <div>
      <h1>{t('welcome')}</h1>
      <p>{t('userGreeting', { firstName: user.firstName })}</p>
      <p>{t('description')}</p>
      <button onClick={() => alert(t('clickMe'))}>{t('clickMe')}</button>
    </div>
  );
}

export default App;

Le deuxième argument de t() est un objet avec les valeurs que vous voulez substituer. Vous pouvez avoir autant de variables que nécessaire — assurez-vous simplement que chacune apparaît dans vos traductions.

5.2 Ajouter des formes plurielles

Certains textes changent en fonction d’un nombre. Par exemple, “1 nouveau message” vs “3 nouveaux messages”. i18next gère cela automatiquement lorsque vous fournissez des formes plurielles.

Mettez à jour src/i18n/locales/en.json :

{
  "welcome": "Welcome",
  "userGreeting": "Welcome back, {{firstName}}!",
  "description": "This is a localization demo.",
  "clickMe": "Click me",
  "newMessages_one": "You have {{count}} new message.",
  "newMessages_other": "You have {{count}} new messages."
}

Pour que la pluralisation fonctionne, la variable interpolée doit être nommée count. i18next utilise cette valeur pour choisir la forme plurielle correcte pour chaque langue.

Maintenant, utilisez-la dans votre composant :

import { useTranslation } from 'react-i18next';

function App() {
  const { t } = useTranslation();
  const user = { firstName: 'Sarah' };
  const [messageCount, setMessageCount] = useState<number>(1);

  const handleIncrement = () => {
    setMessageCount(messageCount + 1);
  };

  return (
    <div>
      <h1>{t('welcome')}</h1>
      <p>{t('userGreeting', { firstName: user.firstName })}</p>
      <p>{t('newMessages', { count: messageCount })}</p>
      <p>{t('description')}</p>
      <button onClick={handleIncrement}>{t('clickMe')}</button>
    </div>
  );
}

export default App;

i18next choisira automatiquement newMessages (singulier) lorsque le compte est 1, et newMessages_other (pluriel) pour tout autre nombre.

Parfois, vous avez besoin de mise en forme (comme du texte en gras) ou d’éléments interactifs (comme des liens) à l’intérieur d’une chaîne traduite. Le composant Trans vous permet d’inclure des éléments JSX (JavaScript XML) dans vos traductions.

Tout d’abord, importez le composant Trans :

import { useTranslation, Trans } from 'react-i18next';

Ajoutez une nouvelle clé à src/i18n/locales/en.json :

{
  "welcome": "Welcome",
  "userGreeting": "Welcome back, {{firstName}}!",
  "newMessages_one": "You have {{count}} new message.",
  "newMessages_other": "You have {{count}} new messages.",
  "description": "This is a localization demo.",
  "termsText": "I agree to the <1>Terms of Service</1> and <3>Privacy Policy</3>.",
  "clickMe": "Click me"
}

Remarquez les balises <1> et <3>. Ce sont des espaces réservés qui correspondent aux composants enfants par index (en commençant par 0).

Maintenant, utilisez le composant Trans dans votre JSX :

import { useTranslation, Trans } from 'react-i18next';

function App() {
  const { t } = useTranslation();
  const user = { firstName: "Sarah" };
  const [messageCount, setMessageCount] = useState<number>(1);

  const handleIncrement = () => {
    setMessageCount(messageCount + 1);
  };

  return (
    <div>
      <h1>{t("welcome")}</h1>
      <p>{t("userGreeting", { firstName: user.firstName })}</p>
      <p>{t("newMessages", { count: messageCount })}</p>
      <p>{t("description")}</p>

      <p>
        <Trans i18nKey="termsText">
          I agree to the <a href="/terms">Terms of Service</a> and 
          <a href="/privacy">Privacy Policy</a>.
        </Trans>
      </p>

      <button onClick={handleIncrement}>{t("clickMe")}</button>
    </div>
  );
}

export default App;

Traduisez votre application React

À ce stade, votre application est entièrement prête pour l’internationalisation. Il est maintenant temps de traduire votre fichier en.json.

Il existe différentes façons de le faire, mais nous allons nous concentrer sur l’utilisation de PTC pour générer automatiquement des fichiers JSON traduits. Il permet le téléchargement manuel de fichiers, l’intégration Git ou l’utilisation de l’API.

Pour notre projet de démonstration, nous allons intégrer PTC à notre dépôt GitHub.

Étape 1

Configurez un projet dans PTC pour traduire le fichier JSON

Pour connecter votre projet à PTC, inscrivez-vous pour un essai gratuit.

  1. Suivez les étapes du Guide de démarrage pour créer un nouveau projet.
  2. Dans l’assistant de configuration, sélectionnez votre fichier source (dans notre cas, src/i18n/locales/en.json) et choisissez votre chemin de sortie :
src/i18n/locales/{{lang}}.json

Ce modèle crée un fichier par langue (par exemple, fr.json, de.json) en utilisant la même structure de dossiers que votre application attend déjà.

Étape 2

Obtenez les fichiers JSON traduits et ajoutez-les à votre projet

Lorsque vos traductions sont prêtes, PTC vous en informera. Vos prochaines étapes dépendent de la façon dont vous utilisez PTC :

Si vous utilisez…Ce qui se passe ensuite
Intégration GitPTC ouvre une Pull/Merge Request avec de nouveaux fichiers de langue
Téléchargement manuel de fichiersTéléchargez le fichier JSON et placez-le dans src/i18n/locales/
API PTCUtilisez le point de terminaison de récupération de fichiers

Par exemple, si vous traduisez en français et utilisez l’intégration Git, PTC retournera fr.json et placera le fichier dans src/i18n/locales/fr.json.

Étape 3

Testez votre application React traduite avec un sélecteur de langue

Maintenant que vous avez au moins un fichier de traduction, ajoutons un simple sélecteur de langue pour vérifier que tout fonctionne.

Mettez à jour src/App.tsx pour ajouter des boutons de sélection de langue :

import { useTranslation } from 'react-i18next';

function App() {
  const { t, i18n } = useTranslation();

  return (
    <div>
      <h1>{t('welcome')}</h1>
      <p>{t('userGreeting', { firstName: user.firstName })}</p>
      <p>{t('newMessages', { count: messageCount })}</p>
      <p>{t('description')}</p>
      
      <p>
        <Trans i18nKey="termsText">
          I agree to the <a href="/terms">Terms of Service</a> and <a href="/privacy">Privacy Policy</a>.
        </Trans>
      </p>
      <button onClick={() => alert(t('clickMe'))}>{t('clickMe')}</button>

      <button onClick={() => i18n.changeLanguage('en')}>EN</button>
      <button onClick={() => i18n.changeLanguage('fr')}>FR</button>
    </div>
  );
}

Exécutez votre application (npm run dev) et cliquez sur les boutons EN / FR. Lorsque vous exécutez l’application en français, la mise en page devrait être exactement la même qu’en anglais — seule la langue du texte change.

Optimisez le chargement des traductions et la détection de la langue

Maintenant que vos traductions fonctionnent, vous pouvez optimiser i18next pour rendre votre application plus rapide et plus conviviale, surtout si vous prenez en charge plusieurs langues.

Détection automatique de la langue de l’utilisateur

Par défaut, votre application démarre en anglais et nécessite que les utilisateurs changent manuellement de langue. Avec la détection automatique de la langue, i18next vérifie le navigateur, l’URL ou les préférences enregistrées et charge instantanément la langue correcte.

  1. Ajoutez le package i18next-browser-languagedetector :
npm install i18next-browser-languagedetector
  1. Mettez à jour votre src/i18n/index.ts :
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import LanguageDetector from "i18next-browser-languagedetector";

type TranslationResources = string | { [k: string]: TranslationResources } | TranslationResources[];

const modules = import.meta.glob<{default: Record<string, TranslationResources>}>('./locales/*.json', { eager: true })

const resources: Record<string, { translation: Record<string, TranslationResources> }> = {};

for (const path in modules) {
  const lang = path.match(/\.\/locales\/(.*)\.json$/)?.[1];
  if (lang) {
    resources[lang] = { translation: modules[path].default };
  }
}

i18n
  .use(LanguageDetector) // detect browser/localStorage/etc.
  .use(initReactI18next)
  .init({
    resources,
    fallbackLng: "en",
    supportedLngs: ["en", "fr", "de", "ar"], // adjust to your languages
    interpolation: { escapeValue: false },
    detection: {
      order: ["querystring", "localStorage", "cookie", "navigator"],
      caches: ["localStorage", "cookie"],
    }
  });

export default i18n;

Avec cela en place, les utilisateurs verront automatiquement l’application dans leur langue préférée lorsqu’elle est disponible. Ils peuvent toujours changer manuellement si nécessaire.

Chargement paresseux des traductions

Actuellement, i18next charge chaque fichier de traduction au démarrage. C’est acceptable pour une ou deux langues, mais si vous prenez en charge de nombreuses langues, la taille de votre bundle peut augmenter rapidement.

Le chargement paresseux résout ce problème en ne téléchargeant que les fichiers de langue dont l’utilisateur a besoin.

  1. Installez le backend HTTP :
npm install i18next-http-backend
  1. Mettez à jour votre src/i18n/index.ts :
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import Backend from "i18next-http-backend";
import LanguageDetector from "i18next-browser-languagedetector";

i18n
  .use(Backend) // load JSON over HTTP
  .use(LanguageDetector)
  .use(initReactI18next)
  .init({
    fallbackLng: "en",
    supportedLngs: ["en", "fr"],
    interpolation: { escapeValue: false },
    backend: {
      loadPath: "/locales/{{lng}}/{{ns}}.json"
    }
  });

export default i18n;
  1. Après avoir activé le backend, i18next chargera les fichiers de traduction via HTTP au lieu de les regrouper. Pour que cela fonctionne, vos traductions doivent être servies à partir d’un chemin public que le navigateur peut demander :
public/
  locales/
    en/
      translation.json
    fr/
      translation.json

Avec cette structure, chaque langue réside dans son propre dossier, reflétant la partie {{lng}} de votre loadPath. Ainsi, par exemple, lorsqu’un utilisateur passe au français, i18next récupérera :

/locales/fr/translation.json

Traduisez votre application React avec PTC

Votre application est prête pour la localisation avec i18next. Maintenant, laissez PTC s’occuper du travail de traduction pour vous.
Démarrez votre essai gratuit et traduisez jusqu’à 2 500 mots dans 2 langues, puis activez le paiement à l’utilisation pour ne payer que ce que vous traduisez.

Traduisez des fichiers JSON dans les applications React avec l’IA

Obtenez des traductions contextuelles en quelques minutes

Téléchargez des fichiers, ou automatisez via l’API ou l’intégration Git


1

Commencer un essai gratuit

Traduisez 2 500 mots gratuitement.

2

Ajoutez rapidement les détails du projet

Donnez du contexte sur votre application et vos utilisateurs.

3

Obtenez des traductions

Téléchargez un ZIP, ou fusionnez dans votre dépôt.

Faire défiler vers le haut