Aggiungi il multilingua alla tua app Next.js.
Traduci i tuoi file di localizzazione, contenuti Markdown e pagine HTML tramite una singola chiamata API. Funziona con App Router, next-intl e qualsiasi configurazione di routing i18n.
Next.js ti offre il routing. Non ti offre le traduzioni.
Next.js App Router ha un eccellente supporto integrato per il routing basato sulla localizzazione. Librerie come next-intl rendono semplice la gestione dei file di traduzione e il cambio di localizzazione. Ciò che non risolvono è la traduzione stessa — qualcuno deve produrre il contenuto tradotto in ogni lingua, e quel qualcuno sei di solito tu. Per la maggior parte dei team, il flusso di lavoro è copiare il JSON inglese in DeepL, correggere il formato che si rompe, incollare il risultato, ripetere per ogni lingua. È lento, soggetto a errori e non scalabile.
Il flusso di lavoro più comune è scrivere tutte le stringhe UI in inglese nel codice sorgente, poi tradurre il file messages.json per ogni lingua di destinazione. In teoria è semplice. In pratica, mantenere sincronizzati più di 10 file di localizzazione con le modifiche al sorgente diventa un problema ricorrente. Ogni volta che il testo inglese cambia, ogni file di localizzazione deve essere aggiornato. Usando API di traduzione standard, i nomi delle chiavi si corrompono, i segnaposto variabili vengono tradotti e la struttura JSON si discosta tra le localizzazioni — causando bug sottili a runtime difficili da tracciare.
PolyLingo si integra nella tua configurazione i18n Next.js esistente.
Se usi next-intl o qualsiasi altra libreria i18n, i tuoi messaggi sono già in JSON. PolyLingo prende quel JSON, lo invia al modello di traduzione e restituisce copie tradotte per ogni lingua di destinazione — con chiavi intatte, nidificazione preservata e valori stringa correttamente tradotti. Puoi chiamarlo da uno script di build, un webhook o l'interfaccia PolyLingo. Il risultato viene inserito direttamente nella tua directory dei messaggi.
Il flusso di lavoro: scrivi il tuo messages.json in inglese. Esegui un singolo script che chiama l'API PolyLingo con il file sorgente e tutti i codici lingua di destinazione. Ricevi un file JSON tradotto per ogni lingua, con struttura identica. Scrivi ciascuno nella directory messages/. Commit. Fatto.
Per siti con molti contenuti in Markdown in CMS (Sanity, Contentful), lo stesso approccio si applica ai contenuti: esporta in Markdown o HTML, traduci, riscrivi nel CMS tramite la sua API. L'intera pipeline può essere eseguita come step di build o tramite trigger 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"
}
}Perché PolyLingo si adatta al workflow i18n di Next.js
- ✓Traduci direttamente i file messages/*.json — chiavi sempre preservate
- ✓Traduci contenuti Markdown per post del blog e pagine di documentazione
- ✓Funziona con next-intl, next-i18next e configurazioni personalizzate
- ✓REST API si integra con script di build e webhook CMS
- ✓Tutte le 36 lingue in una singola richiesta
- ✓Piano gratuito — 100.000 token al mese
- ✓Questo repository usa il flusso di lavoro: npm run i18n:polylingo rigenera le localizzazioni marketing da messages/en.json (vedi MARKETING_I18N.md).
- ✓Funziona con App Router e Pages Router
- ✓I file di output sono pronti per il commit — nessuna riformattazione necessaria
Configura il multilingua nella tua app Next.js
Configura next-intl con il file messaggi in inglese
Installa next-intl e configura i18n.ts e il middleware. Scrivi tutte le stringhe UI in messages/en.json. Struttura il file come preferisci — piatto o nidificato. Questo diventa la tua unica fonte di verità.
Esegui lo script di traduzione
Usa l'API JSON PolyLingo da un piccolo script Node (vedi codice sopra). In questo monorepo, esegui npm run i18n:polylingo da frontend/ con POLYLINGO_API_KEY impostata — suddivide grandi namespace per affidabilità. Le esecuzioni tipiche durano meno di un minuto per un pacchetto marketing completo.
Commit dei file di localizzazione e deploy
I file di localizzazione generati sono JSON validi con struttura identica al sorgente. Committali nel tuo repo. Aggiungi lo script di traduzione alla pipeline CI per mantenere le localizzazioni sincronizzate ad ogni modifica di contenuto.
Casi d'uso multilingua Next.js
App SaaS e dashboard
Traduci l'intera libreria di stringhe UI in un solo script. Supporta tutte le funzionalità di formattazione next-intl — date, numeri, plurali — perché la struttura JSON è preservata esattamente.
Siti di contenuti e blog
Per siti Next.js ricchi di contenuti che usano Sanity o Contentful, usa PolyLingo per tradurre contenuti di pagina e stringhe UI — stessa API, stesse garanzie di preservazione del formato.
E-commerce con varianti regionali
Traduci nomi prodotti, descrizioni, pagine di categoria e UI del checkout. Usa il modello Advanced per testi marketing dove conta la voce del brand, Standard per stringhe UI funzionali.
Domande frequenti
Funziona con Next.js App Router?
Sì. L'integrazione PolyLingo è solo uno script che legge e scrive file JSON — non dipende dagli internals di Next.js. Funziona con App Router, Pages Router o qualsiasi framework. L'esempio di configurazione next-intl mostrato usa l'API v4 con requestLocale, compatibile con Next.js 13, 14 e 15.
E se il mio messages.json cambia frequentemente?
Il modello consigliato è aggiungere lo script di traduzione alla pipeline CI/CD, attivato dalle modifiche a messages/en.json. Questo mantiene sincronizzati automaticamente tutti i file di localizzazione. Per team con frequenti modifiche di testo, previene completamente la deriva delle localizzazioni.
PolyLingo funziona sia con next-i18next che con next-intl?
Sì. next-i18next usa la stessa struttura JSON di localizzazione. Lo script di traduzione funziona identico — punta alla directory public/locales/en/ e scrive gli output nelle altre directory di localizzazione. La compatibilità del formato JSON è la stessa.
E per contenuti dinamici che non sono nel file messaggi?
I contenuti dinamici — post del blog, descrizioni prodotto, contenuti generati dagli utenti — dovrebbero essere tradotti a livello di dati, nel CMS o tramite uno script di build che processa i contenuti prima che arrivino a Next.js. PolyLingo gestisce Markdown, HTML e testo semplice allo stesso modo per questo scopo.
Posso tradurre solo le stringhe cambiate dall'ultima esecuzione?
La traduzione incrementale (solo chiavi cambiate) è in roadmap. Attualmente lo script ritraslate l'intero file. Per la maggior parte dei file messaggi (sotto 20KB), è abbastanza veloce da eseguire ad ogni commit. Per file molto grandi, si consiglia di suddividere per namespace.
C'è un modo per revisionare le traduzioni prima della produzione?
Il modello consigliato è committare i file di localizzazione tradotti in un branch o PR separato per la revisione prima di unire al main. È una pratica standard per team che necessitano di revisione umana sulla qualità della traduzione. PolyLingo genera una buona prima versione — per la maggior parte delle stringhe UI l'output del modello Standard non richiede modifiche.
Guide correlate
Traduci file JSON di localizzazione
Come PolyLingo gestisce la struttura JSON, oggetti nidificati e variabili di interpolazione.
Multilingua per CMS headless
Tradurre contenuti a livello CMS insieme alla traduzione delle stringhe UI.
Traduci Markdown senza rompere il formato
Per siti Next.js con post blog Markdown o pagine MDX.
Fai tradurre il tuo primo file di localizzazione in meno di 5 minuti.
Chiave API gratuita. Nessuna carta di credito. Incolla il tuo JSON di messaggi e vedi subito il risultato.
Ottieni la tua chiave APILo script di traduzione si configura in 5 minuti. Piano gratuito — nessuna carta di credito richiesta.