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.
Sur cette page
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 devCela démarre un serveur de développement et ouvre la page Vite + React par défaut dans votre navigateur.
Référence de commit : Créer un projet React avec Vite et TypeScript
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.
Référence de commit : Construire l’interface utilisateur de base avec des chaînes statiques en anglais
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 :
- Installez
i18nextetreact-i18next - Créez votre fichier de traduction anglaise (
en.json) - 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-i18nextDans cet exemple :
i18nextest la bibliothèque d’internationalisation principalereact-i18nextajoute des liaisons React comme le hookuseTranslation
3.2 créer le fichier source anglais pour la traduction (en.json)
Créez la structure de dossiers suivante :
src/
i18n/
locales/
en.jsonEnsuite, 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;
Référence de commit : Créer le fichier anglais initial pour la traduction
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.tsAjoutez 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
*.jsonque 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.
5.3 Composant trans : ajout de mise en forme et de liens
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.
- Suivez les étapes du Guide de démarrage pour créer un nouveau projet.
- 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}}.jsonCe 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 Git | PTC ouvre une Pull/Merge Request avec de nouveaux fichiers de langue |
| Téléchargement manuel de fichiers | Téléchargez le fichier JSON et placez-le dans src/i18n/locales/ |
| API PTC | Utilisez 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.
Référence de commit : PTC ReactLocalizationDemo : traductions automatiques
É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.
Référence de commit : Ajouter un sélecteur de langue pour tester la traduction
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.
- Ajoutez le package
i18next-browser-languagedetector:
npm install i18next-browser-languagedetector- 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.
- Installez le backend HTTP :
npm install i18next-http-backend- 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;
- 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.jsonAvec 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.