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
next-intl est-il obsolète en 2026 ?
Lorsque Vercel a introduit l'App Router et retiré l'i18n native du Pages Router, next-intl s'est rapidement imposé. Grâce à une documentation soignée de Jan Amann et un support précoce de l'App Router, la bibliothèque est devenue la référence par défaut de la communauté.
Pourquoi alors s'interroger sur son adéquation aujourd'hui ?
L'écosystème frontend s'est profondément transformé ces trois dernières années, alors que le modèle fondamental de next-intl est resté statique.
Tandis que Next.js adoptait les React Server Components (RSC), le streaming et l'optimisation par le compilateur, next-intl traite toujours l'internationalisation comme une tâche d'exécution : transmission de volumineux objets JSON aux providers clients, analyseurs ICU embarqués dans les scripts du navigateur et gestion manuelle des namespaces pour tenter de réduire la taille des bundles.
Points clés
Ralentissement des évolutions :
Sur les 12 derniers mois, next-intl a enregistré environ 187 commits, principalement dédiés aux ajustements de compatibilité Next.js et aux correctifs de maintenance.
Coût runtime côté client :
Monter NextIntlClientProvider avec useTranslations() ajoute environ 12.8 Ko gzippés (51 Ko minifiés) avant même d'afficher le premier mot, soit environ 3 fois plus que next-intlayer (4.3 Ko).
Fuite de contenu de près de 90% :
Dans les configurations habituelles, 89.8% des données de traduction chargées sur une page appartiennent à d'autres routes. Arriver sur /contact télécharge également les textes de /pricing et /dashboard.
Gestion manuelle des namespaces :
Éviter le gonflement des bundles impose de découper manuellement chaque namespace par page, augmentant le risque d'oublis en production.
Partenariat commercial :
En tant que partenaire officiel de Crowdin, la bibliothèque a peu d'intérêt à concevoir une commande de traduction IA locale et gratuite directement dans la CLI.
Maintenance ou outillage moderne
Activité des commits sur les douze derniers mois :
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
Activité sur les 12 derniers mois :
amannn/next-intl: 187 commits (essentiellement montées de dépendances et correctifs légers).aymericzip/intlayer: 4 343 commits (développement continu sur les compilateurs, extensions IDE, serveurs MCP et moteurs de traduction).
Une bibliothèque établie peut être stable. Mais l'i18n frontend progresse : les compilateurs retirent les traductions non référencées au moment du build, les LLMs automatisent la localisation en CI et les développeurs s'appuient sur des serveurs LSP et des agents IA. Une architecture cantonnée au runtime peine à suivre ce rythme.
Mesure des performances sur Next.js 16 App Router
Benchmark réalisé sur une application App Router standard avec 10 routes et 10 langues :
Chargement JSON dynamique
Charge les traductions à la volée
JSON scopé (espaces de noms)
Espaces de noms de traduction par page
Benchmark de Performance I18n
Quelle est cette métrique ?
La taille totale compressée en gzip du bundle de la bibliothèque d’internationalisation. Elle n’inclut que le fournisseur et la logique de récupération de contenu après tree-shaking et minification.
Pourquoi est-ce important ?
Une taille de bibliothèque plus petite réduit la charge utile JavaScript initiale, ce qui accélère le téléchargement et le temps d’exécution sur le client.
Voir comme
Tests exécutés dans de vrais navigateurs avec compression gzip de production. Détails dans le rapport de benchmark Next.js.
Empreinte de base des bibliothèques
Poids côté client avant d'ajouter le moindre texte :
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Bibliothèque | Gzippé | Minifié |
|---|---|---|
next-intl@4.9.1 | 12.8 Ko | 51.0 Ko |
next-intlayer@8.7.12 | 4.3 Ko | 13.3 Ko |
Poids des pages et fuites de données
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Configuration | JS moyen / page (gz) | Fuite de langues | Fuite autres pages | Composant moyen (gz) |
|---|---|---|---|---|
| Base (sans i18n) | 150.8 Ko | 0.0% | 0.0% | 0.7 Ko |
next-intl (statique) | 163.5 Ko | 4.2% | 89.8% | 20.5 Ko |
next-intl (dynamique) | 163.4 Ko | 9.7% | 89.9% | 20.5 Ko |
next-intlayer | 152.1 Ko | 0.0% | 0.0% | 7.2 Ko |
Origine des fuites entre pages
Dans les architectures next-intl classiques, le layout racine charge la totalité des messages dès le départ :
Copier le code dans le presse-papiers
Puisque messages est fourni au client provider à la racine, le navigateur reçoit l'intégralité du dictionnaire sur chaque URL. Ouvrir la page /login oblige l'utilisateur à télécharger les textes de la FAQ, de la documentation et du tableau de bord.
Il est possible de contourner cela en découpant les fichiers JSON en plusieurs namespaces chargés au cas par cas. Mais maintenir manuellement cette correspondance route par route s'avère lourd et fragile.
Intlayer règle ce problème par analyse statique : le compilateur Intlayer inclut exclusivement les textes réellement appelés sur chaque route, ramenant la fuite entre pages à 0.0%.
Pourquoi next-intl résiste au tree-shaking
L'API s'appuie sur des résolutions de chaînes textuelles au runtime :
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
Turbopack et Webpack ne peuvent pas déterminer quelles clés du namespace UserProfile sont effectivement invoquées pendant l'exécution. Pour prévenir les erreurs de clés manquantes, le bundler est forcé d'intégrer tout le namespace dans le bundle client. Grâce à la déstructuration d'Intlayer, le compilateur sait quelles propriétés sont utilisées et retire les champs superflus. Consultez l'optimisation de bundle pour approfondir.
Expérience développeur
Fichiers JSON isolés ou co-localisation
Avec next-intl, les textes se trouvent dans des fichiers JSON regroupés dans un dossier messages/. Intlayer propose de co-localiser les déclarations de contenu juste à côté des composants :
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
Copier le code dans le presse-papiers
En supprimant ou restructurant AuthModal.tsx, ses contenus associés sont immédiatement réorganisés ou retirés.
Autocomplétion ou contraintes de typage strictes
L'extension de IntlMessages dans next-intl assure l'autocomplétion basée sur votre fichier linguistique de référence :
Copier le code dans le presse-papiers
Cependant, seule la langue principale est contrôlée. Si une clé disparaît de fr.json, TypeScript ne signale aucune erreur. Votre CI passe alors au vert, tandis que vos utilisateurs francophones voient des textes manquants.
Intlayer dérive les types de l'ensemble des déclarations de contenu. Activer le strictMode bloque le build dès qu'une traduction manque dans n'importe quelle langue configurée.
Outillage et assistants IA
Ouvrir le tableau dans une fenêtre modale pour voir tout le contenu clairement
| Fonctionnalité | next-intl | Intlayer |
|---|---|---|
| Extension VS Code | ❌ Aucune | ✅ Extension officielle |
| Serveur de langage (LSP) | ❌ Aucun | ✅ LSP intégré |
| Serveur MCP (pour agents IA) | ❌ Aucun | ✅ Serveur MCP inclus |
| Compétences agents (Skills) | ❌ Aucune | ✅ Compétences documentées |
| CMS visuel en contexte | ❌ Aucun | ✅ Gratuit et open source |
L'intégration d'un serveur LSP et d'un serveur MCP permet aux assistants de code intelligents de parcourir le graphe de contenu, de compléter les chaînes multilingues et d'actualiser les dictionnaires avec précision.
Le partenariat avec Crowdin et l'outillage
next-intl est officiellement partenaire de Crowdin. Les partenariats commerciaux soutiennent l'open source, mais influencent logiquement la feuille de route : conçu pour interagir avec des solutions TMS externes, next-intl n'a pas vocation à intégrer un outil de traduction IA gratuit et local.
Intlayer fournit ces mécanismes nativement :
Auto-remplissage local par IA (intlayer fill) :
Identifie et traduit automatiquement les clés manquantes avec vos propres clés API (OpenAI, Anthropic, Mistral ou Gemini).
CMS visuel auto-hébergeable :
Utilisez le CMS Intlayer pour permettre aux équipes éditoriales de modifier les contenus avec validation directe dans Git.
Licence open source permissive :
L'ensemble de l'écosystème est sous licence Apache 2.0.
Dans quels cas next-intl reste-t-il adapté ?
Si votre application exploite des logiques complexes de pluriels imbriqués et de sélecteurs ordinaux, l'intégration ICU de next-intl est éprouvée.
Pour les organisations dont le pipeline est déjà connecté à Crowdin, next-intl s'intègre naturellement.
Si votre base de code donne satisfaction et que le poids du bundle respecte vos contraintes, une migration n'est pas impérative.
Comment améliorer ma configuration next-intl existante ?
Intlayer propose un package de compatibilité direct qui reproduit exactement les signatures de fonctions et hooks de next-intl (tels que useTranslations, getTranslations ou les utilitaires de navigation). Vous n'avez pas besoin de réécrire vos composants pour bénéficier des optimisations au niveau du compilateur.
L'installation s'effectue en une seule commande :
Copier le code dans le presse-papiers
Cette CLI interactive :
- Installe le package de compatibilité
@intlayer/next-intl. - Configure les alias du bundler afin que vos imports habituels (
next-intl,next-intl/server) pointent directement vers Intlayer, vous permettant de retirer l'ancienne bibliothèque de votrepackage.json. - Active immédiatement le support du serveur de langage (LSP), l'élimination des fuites de données entre routes (tree-shaking complet) et les flux de traduction IA locale sans refactorisation massive.
Pour des instructions détaillées étape par étape, consultez nos guides dédiés :
- Couche de compatibilité directe : Gardez vos hooks
useTranslationsexistants grâce à la couche d'adaptationnext-intl. - Migration assistée : Transformez vos fichiers JSON vers des dictionnaires typés via notre guide de migration next-intl.
- Approche hybride : Conservez
next-intlpour l'exécution tout en utilisant Intlayer avec next-intl pour automatiser vos traductions locales par IA.
Évaluez le volume de chargement et les fuites de votre application Next.js grâce au scanner SEO i18n gratuit :
Pour aller plus loin
Commentaires
Aucun commentaire pour le moment. Soyez le premier à partager vos pensées.
