Posez votre question et obtenez un résumé du document en referencant cette page et le Provider AI de votre choix
Le contenu de cette page a été traduit à l'aide d'une IA.
Voir la dernière version du contenu original en anglaisSi vous avez une idée d’amélioration pour améliorer cette documentation, n’hésitez pas à contribuer en submitant une pull request sur GitHub.
Lien GitHub de la documentationCopier le Markdown du doc dans le presse-papiers
Traduisez votre site Next.js 15 utilisant next-i18next avec Intlayer | Internationalisation (i18n)
À qui s'adresse ce guide
- Junior : Suivez les étapes exactes et copiez les blocs de code. Vous obtiendrez une application multilingue fonctionnelle.
- Intermédiaire : Utilisez les checklists et les conseils de bonnes pratiques pour éviter les pièges courants.
- Senior : Parcourez la structure générale, les sections SEO et automatisation ; vous y trouverez des valeurs par défaut pertinentes et des points d'extension.
Ce que vous allez construire
- Projet App Router avec des routes localisées (ex. :
/,/fr/...) - Configuration i18n avec locales, locale par défaut, support RTL
- Initialisation i18n côté serveur et un provider côté client
- Traductions avec namespaces chargées à la demande
- SEO avec
hreflang,sitemaplocalisé,robots - Middleware pour le routage selon la locale
- Intégration Intlayer pour automatiser les workflows de traduction (tests, remplissage IA, synchronisation JSON)
Note : next-i18next est construit sur i18next. Ce guide utilise les primitives i18next compatibles avec next-i18next dans l’App Router, tout en gardant une architecture simple et prête pour la production. Pour une comparaison plus large, voir next-i18next vs next-intl vs Intlayer.
1) Structure du projet
Installez les dépendances next-i18next :
Commencez avec une structure claire. Gardez les messages séparés par locale et namespace.
Checklist (intermédiaire/senior) :
- Gardez un JSON par namespace et par locale
- Ne centralisez pas trop les messages ; utilisez des namespaces petits, spécifiques à une page ou une fonctionnalité
- Évitez d’importer toutes les locales en même temps ; chargez uniquement ce dont vous avez besoin
2) Installer les dépendances
Si vous prévoyez d'utiliser les APIs ou la configuration interop de next-i18next, ajoutez également :
3) Configuration i18n principale
Définissez les locales, la locale par défaut, les langues RTL, et les helpers pour les chemins/URLs localisés.
Note importante : Si vous utilisez next-i18next.config.js, assurez-vous qu'il soit aligné avec i18n.config.ts pour éviter toute dérive.
4) Initialisation i18n côté serveur
Initialisez i18next sur le serveur avec un backend dynamique qui importe uniquement le JSON de locale/espace de noms requis.
Note intermédiaire : Gardez la liste des namespaces courte par page pour limiter la charge. Évitez les bundles globaux « attrape-tout ».
5) Fournisseur client pour les composants React
Encapsulez les composants client avec un provider qui reflète la configuration serveur et charge uniquement les namespaces demandés.
Astuce pour débutant : Vous n'avez pas besoin de transmettre tous les messages au client. Commencez uniquement avec les namespaces de la page.
6) Mise en page et routes localisées
Définissez la langue et la direction, et pré-générez les routes par locale pour favoriser le rendu statique.
7) Exemple de page avec utilisation serveur + client
Traductions (un JSON par namespace sous src/locales/...):
Composant client (charge uniquement le namespace requis) :
Assurez-vous que la page/le provider inclut uniquement les namespaces dont vous avez besoin (par exemple,
about). Si vous utilisez React < 19, mémoïsez les formateurs lourds commeIntl.NumberFormat.
Composant serveur synchrone intégré sous une frontière client :
8) SEO : Métadonnées, Hreflang, Sitemap, Robots
La traduction du contenu est un moyen d'améliorer la portée. Configurez soigneusement le SEO multilingue.
Bonnes pratiques :
- Définir
langetdirà la racine - Ajouter
alternates.languagespour chaque locale (+x-default) - Lister les URLs traduites dans
sitemap.xmlet utiliserhreflang - Exclure les zones privées localisées (ex.
/fr/admin) dansrobots.txt
9) Middleware pour le routage des locales
Détecte la locale et redirige vers une route localisée si elle est manquante.
10) Performance et bonnes pratiques DX
- Définir les attributs html
langetdir: Fait danssrc/app/[locale]/layout.tsx. - Diviser les messages par namespace : Garder les bundles petits (
common.json,about.json, etc.). - Minimiser la charge côté client : Sur les pages, passer uniquement les namespaces nécessaires au provider.
- Préférer les pages statiques : Utiliser
export const dynamic = 'force-static'etgenerateStaticParamspar locale. - Synchroniser les composants serveur : Passer des chaînes/formatages pré-calculés au lieu d'appels asynchrones au moment du rendu.
- Mémoriser les opérations lourdes : Surtout dans le code client pour les anciennes versions de React.
- Cache et headers : Préférer le statique ou
revalidateplutôt que le rendu dynamique quand c'est possible.
11) Tests et CI
- Ajouter des tests unitaires pour les composants utilisant
tafin de garantir que les clés existent. - Valider que chaque namespace possède les mêmes clés dans toutes les locales.
- Remonter les clés manquantes lors du CI avant le déploiement.
Intlayer automatisera une grande partie de cela (voir section suivante).
12) Ajouter Intlayer par-dessus (automatisation)
Intlayer vous aide à garder les traductions JSON synchronisées, à tester les clés manquantes, et à les compléter avec l'IA si désiré.
Installez les dépendances intlayer :
Ajouter des scripts dans le package :
Flux courants :
pnpm i18n:testen CI pour échouer la build en cas de clés manquantespnpm i18n:filllocalement pour proposer des traductions AI pour les clés nouvellement ajoutées
Vous pouvez fournir des arguments CLI ; consultez la documentation CLI d'Intlayer.
13) Dépannage
- Clés introuvables : Assurez-vous que la page/le provider liste les bons namespaces et que le fichier JSON existe sous
src/locales/<locale>/<namespace>.json. - Mauvaise langue/flash d’anglais : Vérifiez la détection de la locale dans
middleware.tset la propriétélngdu provider. - Problèmes de mise en page RTL : Vérifiez que
direst dérivé deisRtl(locale)et que votre CSS respecte[dir="rtl"]. - Alternatives SEO manquantes : Confirmez que
alternates.languagesinclut toutes les locales ainsi quex-default. - Bundles trop volumineux : Scindez davantage les namespaces et évitez d’importer l’arborescence complète des
localescôté client.
14) Et ensuite
- Ajouter plus de locales et de namespaces à mesure que les fonctionnalités évoluent
- Localiser les pages d’erreur, les emails et le contenu généré par API
- Étendre les workflows Intlayer pour ouvrir automatiquement des PRs pour les mises à jour de traduction
Si vous préférez un starter, essayez le template : https://github.com/aymericzip/intlayer-next-i18next-template.