Ajoutez le multilingue à votre application Next.js.
Traduisez vos fichiers de localisation, contenu Markdown et pages HTML via un seul appel API. Fonctionne avec l'App Router, next-intl et toute configuration i18n.
Next.js vous offre le routage. Pas les traductions.
L'App Router de Next.js offre un excellent support intégré pour le routage basé sur la locale. Des bibliothèques comme next-intl facilitent la gestion des fichiers de traduction et le changement de locale. Ce qu'elles ne résolvent pas, c'est la traduction elle-même — quelqu'un doit produire le contenu traduit dans chaque langue, et cette personne est généralement vous. Pour la plupart des équipes, le flux de travail consiste à copier le JSON anglais dans DeepL, corriger le formatage cassé, coller le résultat, répéter pour chaque langue. C'est lent, sujet aux erreurs et ne s'adapte pas à grande échelle.
Le flux de travail le plus courant est d'écrire toutes les chaînes UI en anglais dans le code source, puis de traduire le fichier messages.json pour chaque langue cible. En théorie, c'est simple. En pratique, maintenir plus de 10 fichiers de locale synchronisés avec les changements source devient un point douloureux récurrent. Chaque fois que le texte anglais change, chaque fichier de locale doit être mis à jour. En utilisant les API de traduction standard, les noms de clés sont corrompus, les variables sont traduites, et la structure JSON diverge entre les locales — causant des bugs subtils difficiles à tracer à l'exécution.
PolyLingo s'intègre à votre configuration i18n Next.js existante.
Si vous utilisez next-intl ou toute autre bibliothèque i18n, vos messages sont déjà en JSON. PolyLingo prend ce JSON, le passe par le modèle de traduction, et renvoie des copies traduites pour chaque langue cible — avec les clés intactes, la structure conservée, et les valeurs de chaîne correctement traduites. Vous pouvez l'appeler depuis un script de build, un webhook ou l'interface PolyLingo. Le résultat est directement déposé dans votre répertoire messages.
Le workflow : écrivez votre messages.json anglais. Lancez un script unique qui appelle l'API PolyLingo avec votre fichier source et tous les codes de langue cible. Recevez un fichier JSON traduit par langue, avec une structure identique. Écrivez-les dans votre répertoire messages/. Validez. Terminé.
Pour les sites riches en contenu avec Markdown dans un CMS (Sanity, Contentful), la même approche s'applique au contenu : exportez en Markdown ou HTML, traduisez, réécrivez dans le CMS via son API. Toute la chaîne peut s'exécuter en étape de build ou déclenchée par webhook.
// This repository: frontend/scripts/translate-messages.mjs
// Chunks large namespaces (e.g. home) so the model stays within output limits.
//
// export POLYLINGO_API_KEY=pl_xxx
// npm run i18n:polylingo
//
// Writes messages/es.json, fr.json, … from messages/en.json via POST /v1/translate
// with format: "json". See MARKETING_I18N.md for options and CI notes.
//
// Minimal one-shot pattern (fine for small message files):
//
// const source = readFileSync('./messages/en.json', 'utf8')
// const { translations } = await fetch(apiUrl + '/translate', {
// method: 'POST',
// headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
// body: JSON.stringify({
// content: source, format: 'json', source: 'en',
// targets: ['es', 'fr', 'de'], model: 'standard',
// }),
// }).then((r) => r.json())
//
// for (const [lang, raw] of Object.entries(translations)) {
// const obj = typeof raw === 'string' ? JSON.parse(raw) : raw
// writeFileSync(`./messages/${lang}.json`, JSON.stringify(obj, null, 2))
// }// i18n.ts (next-intl v4)
import { getRequestConfig } from 'next-intl/server'
export const locales = [
'en', 'ar', 'bn', 'cs', 'da', 'de', 'el', 'es', 'fa', 'fi',
'fr', 'he', 'hi', 'id', 'it', 'ja', 'ko', 'ms', 'nl', 'no',
'pl', 'pt', 'ru', 'sv', 'sw', 'th', 'tr', 'uk', 'vi', 'zh',
] as const
export type Locale = (typeof locales)[number]
export default getRequestConfig(async ({ requestLocale }) => {
const locale = await requestLocale
return {
locale,
messages: (await import(`./messages/${locale}.json`)).default,
}
})// package.json
{
"scripts": {
"dev": "next dev",
"build": "next build",
"i18n:polylingo": "node scripts/translate-messages.mjs",
"translate:build": "npm run i18n:polylingo && next build"
}
}Pourquoi PolyLingo s'adapte au workflow i18n Next.js
- ✓Traduisez directement les fichiers messages/*.json — clés toujours préservées
- ✓Traduisez le contenu Markdown pour articles de blog et pages de documentation
- ✓Fonctionne avec next-intl, next-i18next et configurations personnalisées
- ✓API REST s'intègre aux scripts de build et webhooks CMS
- ✓Toutes les 36 langues en une seule requête
- ✓Offre gratuite — 100 000 tokens par mois
- ✓Ce dépôt utilise son propre workflow : npm run i18n:polylingo régénère les locales marketing depuis messages/en.json (voir MARKETING_I18N.md).
- ✓Fonctionne avec App Router et Pages Router
- ✓Les fichiers produits sont prêts à être validés — pas besoin de reformatage
Configurez le multilingue dans votre app Next.js
Configurez next-intl avec votre fichier de messages anglais
Installez next-intl et configurez votre i18n.ts et middleware. Écrivez toutes les chaînes UI dans messages/en.json. Structurez le fichier comme votre app le nécessite — plat ou imbriqué. Cela devient votre source unique de vérité.
Lancez le script de traduction
Utilisez l'API JSON PolyLingo depuis un petit script Node (voir code ci-dessus). Dans ce monorepo, lancez npm run i18n:polylingo depuis frontend/ avec POLYLINGO_API_KEY défini — il découpe les grands namespaces pour plus de fiabilité. Les exécutions typiques prennent bien moins d'une minute pour un bundle marketing complet.
Validez les fichiers de locale et déployez
Les fichiers de locale générés sont des JSON valides avec une structure identique à votre source. Validez-les dans votre dépôt. Ajoutez le script de traduction à votre pipeline CI pour garder les locales synchronisées à chaque changement de contenu.
Cas d'usage multilingue Next.js
Applications SaaS et tableaux de bord
Traduisez toute votre bibliothèque de chaînes UI en un seul script. Supporte toutes les fonctionnalités de formatage next-intl — dates, nombres, pluriels — car la structure JSON est parfaitement préservée.
Sites de contenu et blogs
Pour les sites Next.js riches en contenu utilisant Sanity ou Contentful, utilisez PolyLingo pour traduire le contenu des pages ainsi que les chaînes UI — même API, mêmes garanties de préservation du format.
E-commerce avec variantes régionales
Traduisez noms de produits, descriptions, pages de catégories et UI de paiement. Utilisez le modèle Avancé pour les textes marketing où la voix de la marque compte, Standard pour les chaînes UI fonctionnelles.
Questions fréquemment posées
Cela fonctionne-t-il avec l'App Router de Next.js ?
Oui. L'intégration PolyLingo est juste un script qui lit et écrit des fichiers JSON — il n'a aucune dépendance aux internals de Next.js. Il fonctionne avec App Router, Pages Router ou tout framework. L'exemple de configuration next-intl montré utilise l'API v4 avec requestLocale, compatible avec Next.js 13, 14 et 15.
Que faire si mon messages.json change fréquemment ?
Le modèle recommandé est d'ajouter le script de traduction à votre pipeline CI/CD, déclenché lors des changements sur messages/en.json. Cela maintient automatiquement tous les fichiers de locale synchronisés. Pour les équipes avec des changements fréquents, cela évite totalement la dérive des locales.
PolyLingo fonctionne-t-il avec next-i18next ainsi qu'avec next-intl ?
Oui. next-i18next utilise la même structure JSON de locale. Le script de traduction fonctionne de la même manière — pointez-le vers votre répertoire public/locales/en/ et écrivez les sorties dans les autres répertoires de locale. La compatibilité du format JSON est identique.
Qu'en est-il du contenu dynamique qui n'est pas dans le fichier messages ?
Le contenu dynamique — articles de blog, descriptions de produits, contenu généré par les utilisateurs — doit être traduit au niveau des données, soit dans votre CMS, soit via un script de build qui traite le contenu avant qu'il n'atteigne Next.js. PolyLingo gère Markdown, HTML et texte brut également bien à cette fin.
Puis-je traduire uniquement les chaînes modifiées depuis la dernière exécution ?
La traduction incrémentale (traduire uniquement les clés modifiées) est prévue. Actuellement, le script retraduit le fichier complet. Pour la plupart des fichiers de messages (moins de 20 Ko), c'est assez rapide pour s'exécuter à chaque commit. Pour les très gros fichiers, la séparation par namespace est la méthode recommandée.
Existe-t-il un moyen de réviser les traductions avant leur mise en production ?
Le modèle recommandé est de valider les fichiers de locale traduits dans une branche ou PR séparée pour révision avant fusion dans la branche principale. C'est une pratique standard pour les équipes nécessitant une relecture humaine de la qualité de traduction. PolyLingo génère un bon premier jet — pour la plupart des chaînes UI, la sortie du modèle Standard ne nécessite pas de modification.
Guides associés
Traduire les fichiers JSON de locale
Comment PolyLingo gère la structure JSON, les objets imbriqués et les variables d'interpolation.
Multilingue pour CMS headless
Traduction du contenu au niveau du CMS en parallèle de la traduction des chaînes UI.
Traduire Markdown sans casser le formatage
Pour les sites Next.js avec articles de blog Markdown ou pages MDX.
Faites traduire votre premier fichier de locale en moins de 5 minutes.
Clé API gratuite. Pas de carte bancaire. Collez votre JSON de messages et voyez le résultat immédiatement.
Obtenez votre clé APILe script de traduction s'installe en 5 minutes. Offre gratuite — pas de carte bancaire requise.