Réponse Rapide
Pour ajouter l'internationalisation (i18n) à React, utilisez react-i18next. Installez avec npm install react-i18next i18next, créez des fichiers de traduction JSON, configurez i18next avec vos langues, et utilisez le hook useTranslation (const { t } = useTranslation()) pour afficher les chaînes traduites. Pour les projets Next.js, utilisez next-intl à la place pour une meilleure intégration App Router. IntlPull peut gérer les traductions et fournir une traduction alimentée par IA lorsque vous passez à plus grande échelle que les fichiers JSON.
Introduction à l'Internationalisation React
Construire une application React pour un public mondial nécessite une internationalisation (i18n) appropriée. Ce guide couvre tout ce que vous devez savoir sur l'implémentation de l'i18n dans les applications React, de la configuration de base aux modèles avancés.
Pourquoi l'Internationalisation Compte
- Atteindre les Marchés Mondiaux : 75% des internautes préfèrent le contenu dans leur langue maternelle
- Augmenter la Conversion : Les applications localisées voient des taux de conversion jusqu'à 70% plus élevés
- Meilleure UX : Les utilisateurs s'engagent plus avec le contenu qu'ils peuvent comprendre pleinement
- Avantages SEO : Le contenu localisé se classe mieux dans les résultats de recherche régionaux
Choisir une Bibliothèque i18n
react-intl (FormatJS)
JSX1import { IntlProvider, FormattedMessage } from 'react-intl'; 2 3function App() { 4 return ( 5 <IntlProvider messages={messages} locale="en"> 6 <FormattedMessage id="greeting" defaultMessage="Hello, World!" /> 7 </IntlProvider> 8 ); 9}
Pour :
- Implémentation officielle React de FormatJS
- Excellent support du format de message ICU
- Formatage intégré des nombres, dates et devises
Contre :
- Taille de bundle plus grande
- Courbe d'apprentissage plus raide pour la syntaxe ICU
react-i18next
JSX1import { useTranslation } from 'react-i18next'; 2 3function App() { 4 const { t } = useTranslation(); 5 return <h1>{t('greeting')}</h1>; 6}
Pour :
- Léger et flexible
- Super support TypeScript
- Écosystème de plugins (backends, détection de langue)
Contre :
- Formatage de message moins strict
- Nécessite plus de configuration
next-intl (pour Next.js)
JSX1import { getTranslations } from 'next-intl/server'; 2 3async function HomePage() { 4 const t = await getTranslations('home'); 5 return <h1>{t('title')}</h1>; 6}
Pour :
- Construit spécifiquement pour Next.js
- Support des composants serveur
- Routage automatique
Configurer Votre Projet
Étape 1 : Installer les Dépendances
Terminalnpm install react-i18next i18next
Étape 2 : Créer les Fichiers de Traduction
/locales
/en
common.json
home.json
/es
common.json
home.json
/fr
common.json
home.json
Étape 3 : Configurer i18next
JavaScript1// i18n.js 2import i18n from 'i18next'; 3import { initReactI18next } from 'react-i18next'; 4 5i18n 6 .use(initReactI18next) 7 .init({ 8 resources: { 9 en: { translation: require('./locales/en/common.json') }, 10 es: { translation: require('./locales/es/common.json') }, 11 }, 12 lng: 'en', 13 fallbackLng: 'en', 14 interpolation: { escapeValue: false }, 15 }); 16 17export default i18n;
Étape 4 : Envelopper Votre App
JSX1import './i18n'; 2 3function App() { 4 return ( 5 <Suspense fallback="Loading..."> 6 <YourApp /> 7 </Suspense> 8 ); 9}
Modèles Avancés
Gérer la Pluralisation
JSON1{ 2 "items": "You have {{count}} item", 3 "items_plural": "You have {{count}} items" 4}
JSXt('items', { count: 5 }) // "You have 5 items"
Interpolation avec Composants
JSX<Trans i18nKey="welcome" components={{ strong: <strong /> }}> Welcome, <strong>{{name}}</strong>! </Trans>
Traductions Basées sur le Contexte
JSON1{ 2 "friend": "A friend", 3 "friend_male": "A boyfriend", 4 "friend_female": "A girlfriend" 5}
Chargement Paresseux des Traductions
JavaScript1i18n.use(Backend).init({ 2 backend: { 3 loadPath: '/locales/{{lng}}/{{ns}}.json', 4 }, 5});
Gérer les Traductions à l'Échelle
À mesure que votre application grandit, gérer les fichiers JSON manuellement devient douloureux :
- Conflits de version : Plusieurs développeurs éditant les mêmes fichiers
- Traductions manquantes : Difficile de suivre ce qui est traduit
- Pas de contexte : Les traducteurs ne voient pas où les chaînes sont utilisées
- Flux lent : Cycles d'export/import manuels
La Solution : Systèmes de Gestion de Traduction
Un TMS comme IntlPull résout ces problèmes :
Terminal1# Tirer les dernières traductions 2npx @intlpullhq/cli download 3 4# Pousser les nouvelles chaînes 5npx @intlpullhq/cli upload 6 7# Vérifier le statut de traduction 8npx @intlpullhq/cli status
Avantages :
- Sync temps réel avec votre base de code
- Captures d'écran de contexte pour les traducteurs
- Suggestions de traduction alimentées par IA
- Collaboration avec flux de révision
Meilleures Pratiques
1. Extraire Toutes les Chaînes
Ne laissez jamais de texte codé en dur :
JSX1// Mauvais 2<button>Submit</button> 3 4// Bon 5<button>{t('form.submit')}</button>
2. Utiliser des Clés Significatives
JSON1// Mauvais 2{ 3 "text1": "Welcome", 4 "text2": "Sign up" 5} 6 7// Bon 8{ 9 "home.hero.title": "Welcome", 10 "auth.signup.button": "Sign up" 11}
3. Inclure du Contexte
JSON1{ 2 "save": "Save", 3 "save_description": "Button to save user profile changes" 4}
4. Gérer les Langues RTL
JSX<div dir={isRTL ? 'rtl' : 'ltr'}> {children} </div>
5. Formater Dates et Nombres Correctement
JSX1const formattedDate = new Intl.DateTimeFormat(locale).format(date); 2const formattedPrice = new Intl.NumberFormat(locale, { 3 style: 'currency', 4 currency: 'USD', 5}).format(price);
Erreurs Courantes à Éviter
- Concaténation de chaînes : Utilisez l'interpolation à la place
- Formatage codé en dur : Laissez la bibliothèque i18n gérer ça
- Ignorer le contexte : Le même mot peut avoir différentes traductions
- Ne pas tester le RTL : Testez avec l'Arabe ou l'Hébreu
- Gestion manuelle de fichiers : Utilisez un TMS
Optimisation de la Performance
Division de Code des Traductions
JavaScriptconst HomeTranslations = lazy(() => import('./locales/home'));
Utiliser Suspense
JSX<Suspense fallback={<Skeleton />}> <TranslatedComponent /> </Suspense>
Mémoïser les Valeurs Formatées
JSX1const formattedPrice = useMemo( 2 () => formatCurrency(price, locale), 3 [price, locale] 4);
Tester les Apps Internationalisées
JavaScript1// test-utils.js 2import { render } from '@testing-library/react'; 3import { I18nextProvider } from 'react-i18next'; 4import i18n from './i18n-test'; 5 6function renderWithI18n(ui, locale = 'en') { 7 i18n.changeLanguage(locale); 8 return render( 9 <I18nextProvider i18n={i18n}>{ui}</I18nextProvider> 10 ); 11}
Conclusion
L'internationalisation React n'a pas besoin d'être complexe. Commencez avec une base solide, suivez les meilleures pratiques et utilisez les bons outils pour gérer les traductions à l'échelle.
Prochaines étapes :
- Configurez react-i18next ou next-intl dans votre projet
- Extrayez les chaînes codées en dur existantes
- Connectez-vous à IntlPull pour la gestion de traduction
- Ajoutez des traductions alimentées par IA pour une localisation rapide
Prêt à simplifier votre flux de travail i18n React ? Commencez votre essai gratuit IntlPull et gérez les traductions comme un pro.
Foire Aux Questions
Quelle est la meilleure bibliothèque i18n pour React ?
react-i18next est la meilleure bibliothèque i18n pour la plupart des projets React en raison de sa taille légère, de sa flexibilité et de son excellent support TypeScript. Pour les projets Next.js, utilisez next-intl à la place — il est conçu spécifiquement pour l'App Router et les Server Components. react-intl (FormatJS) est une bonne alternative si vous avez besoin d'une conformité stricte au format de message ICU.
Comment ajouter l'internationalisation à une app React existante ?
Pour ajouter l'i18n à une app React existante : (1) Installez react-i18next : npm install react-i18next i18next, (2) Créez des fichiers JSON de traduction dans un dossier locales, (3) Configurez i18next avec vos langues et enveloppez votre app, (4) Remplacez les chaînes codées en dur par des appels t('keyName') utilisant le hook useTranslation. La CLI d'IntlPull peut aider à extraire automatiquement les chaînes codées en dur existantes.
Comment gérer la pluralisation dans React i18n ?
Utilisez des clés plurielles avec une variable de nombre : Dans votre JSON, ajoutez "items": "{{count}} item" et "items_plural": "{{count}} items". Puis appelez t('items', { count: 5 }) et react-i18next sélectionne automatiquement la forme correcte. Pour les pluriels complexes (Russe, Arabe), utilisez le format ICU : "{count, plural, one {# item} few {# items} many {# items} other {# items}}".
Devrais-je utiliser react-i18next ou next-intl pour Next.js ?
Utilisez next-intl pour les projets Next.js. Il est conçu spécifiquement pour Next.js App Router avec un support natif des Server Components, un routage de locale automatique, et un bundle plus petit que react-i18next. react-i18next fonctionne dans Next.js mais nécessite une configuration supplémentaire pour les Server Components et ne s'intègre pas aussi parfaitement avec les fonctionnalités de Next.js.
Comment tester les composants React avec i18n ?
Enveloppez les composants avec I18nextProvider dans les tests en utilisant une configuration i18n de test. Créez une fonction de rendu personnalisée qui fournit le contexte i18n. Testez contre les clés de traduction ou le texte traduit réel selon votre préférence. Les traductions simulées (mock) peuvent simplifier les tests mais tester avec de vraies traductions attrape plus de problèmes.
Comment gérer les fichiers de traduction à l'échelle ?
Utilisez un Système de Gestion de Traduction (TMS) comme IntlPull quand vous avez 500+ chaînes ou 3+ langues. La gestion manuelle de JSON devient sujette aux erreurs à l'échelle. IntlPull fournit : sync CLI (npx @intlpullhq/cli upload/download), traduction alimentée par IA, collaboration de traducteurs, et captures d'écran de contexte — éliminant la gestion manuelle de fichiers.
