Questa pagina ha un modello di applicazione disponibile.
Pose una domanda e ottieni un riassunto del documento facendo riferimento a questa pagina e al provider AI di tua scelta
Il contenuto di questa pagina è stato tradotto con un'IA.
Vedi l'ultima versione del contenuto originale in ingleseSe hai un’idea per migliorare questa documentazione, non esitare a contribuire inviando una pull request su GitHub.
Collegamento GitHub alla documentazioneCopia il Markdown del documento nella porta-documenti
Traduci il tuo sito Next.js 15 usando next-i18next con Intlayer | Internazionalizzazione (i18n)
A chi è rivolta questa guida
- Junior: Segui esattamente i passaggi e copia i blocchi di codice. Otterrai un'app multilingue funzionante.
- Mid-level: Usa le checklist e i suggerimenti sulle best practice per evitare errori comuni.
- Senior: Dai una rapida occhiata alla struttura generale, alle sezioni SEO e automazione; troverai impostazioni predefinite sensate e punti di estensione.
Cosa costruirai
- Progetto App Router con rotte localizzate (es.
/,/fr/...) - Configurazione i18n con locali, locale predefinito, supporto RTL
- Inizializzazione i18n lato server e un provider client
- Traduzioni con namespace caricate su richiesta
- SEO con
hreflang,sitemaplocalizzato,robots - Middleware per il routing delle localizzazioni
- Integrazione Intlayer per automatizzare i flussi di lavoro di traduzione (test, completamento AI, sincronizzazione JSON)
Nota: next-i18next è costruito sopra i18next. Questa guida utilizza le primitive di i18next compatibili con next-i18next nell'App Router, mantenendo l'architettura semplice e pronta per la produzione. Per un confronto più ampio, vedi next-i18next vs next-intl vs Intlayer.
1) Struttura del progetto
Installa le dipendenze di next-i18next -
Inizia con una struttura chiara. Mantieni i messaggi suddivisi per locale e namespace.
Checklist (mid/senior):
- Mantieni un JSON per namespace per locale
- Non centralizzare eccessivamente i messaggi; usa namespace piccoli, limitati a pagina/funzione
- Evita di importare tutte le locale contemporaneamente; carica solo ciò di cui hai bisogno
2) Installa le dipendenze
Se prevedi di utilizzare le API o l'interoperabilità di configurazione di next-i18next, aggiungi anche:
3) Configurazione core di i18n
Definisci le locale, la locale predefinita, RTL e gli helper per percorsi/URL localizzati.
Nota senior: Se usi next-i18next.config.js, mantienilo allineato con i18n.config.ts per evitare discrepanze.
4) Inizializzazione i18n lato server
Inizializza i18next sul server con un backend dinamico che importa solo il JSON della locale/namespace richiesti.
Nota intermedia: Mantieni la lista dei namespace breve per pagina per limitare il payload. Evita bundle globali “catch-all”.
5) Provider client per componenti React
Avvolgi i componenti client con un provider che rispecchia la configurazione server e carica solo i namespace richiesti.
Suggerimento per principianti: Non è necessario passare tutti i messaggi al client. Inizia solo con i namespace della pagina.
6) Layout e rotte localizzate
Imposta la lingua e la direzione, e pre-generare le rotte per locale per favorire il rendering statico.
7) Pagina di esempio con utilizzo server + client
Traduzioni (un file JSON per namespace sotto src/locales/...):
Componente client (carica solo il namespace richiesto):
Assicurati che la pagina/provider includa solo i namespace di cui hai bisogno (es.
about). Se usi React < 19, memorizza in cache formatter pesanti comeIntl.NumberFormat.
Componente server sincrono incorporato sotto un confine client:
8) SEO: Metadata, Hreflang, Sitemap, Robots
La traduzione dei contenuti è un mezzo per migliorare la portata. Configura accuratamente la SEO multilingue.
Best practice:
- Imposta
langediralla radice - Aggiungi
alternates.languagesper ogni locale (+x-default) - Elenca gli URL tradotti in
sitemap.xmle usahreflang - Escludi aree private localizzate (es.
/fr/admin) inrobots.txt
9) Middleware per il routing della locale
Rileva la locale e reindirizza a un percorso localizzato se mancante.
10) Performance e best practice per DX
- Imposta
langedirnell'html: Fatto insrc/app/[locale]/layout.tsx. - Dividi i messaggi per namespace: Mantieni i bundle piccoli (
common.json,about.json, ecc.). - Minimizza il payload client: Nelle pagine, passa solo i namespace necessari al provider.
- Preferisci pagine statiche: Usa
export const dynamic = 'force-static'egenerateStaticParamsper ogni locale. - Sincronizza i componenti server: Passa stringhe/formatting precomputati invece di chiamate async al momento del render.
- Memoizza operazioni pesanti: Specialmente nel codice client per versioni più vecchie di React.
- Cache e headers: Preferisci rendering statico o
revalidaterispetto a rendering dinamico quando possibile.
11) Testing e CI
- Aggiungi test unitari per i componenti che usano
tper assicurarti che le chiavi esistano. - Verifica che ogni namespace abbia le stesse chiavi tra le diverse localizzazioni.
- Rileva le chiavi mancanti durante la CI prima del deploy.
Intlayer automatizzerà gran parte di questo (vedi sezione successiva).
12) Aggiungere Intlayer sopra (automazione)
Intlayer ti aiuta a mantenere sincronizzate le traduzioni JSON, testare le chiavi mancanti e completare con AI quando desiderato.
Installa le dipendenze di intlayer:
Aggiungi gli script nel package:
Flussi comuni:
pnpm i18n:testin CI per far fallire le build in caso di chiavi mancantipnpm i18n:fillin locale per proporre traduzioni AI per le chiavi appena aggiunte
Puoi fornire argomenti CLI; consulta la documentazione CLI di Intlayer.
13) Risoluzione dei problemi
- Chiavi non trovate: Assicurati che la pagina/provider elenchi i namespace corretti e che il file JSON esista sotto
src/locales/<locale>/<namespace>.json. - Lingua errata/flash di inglese: Controlla due volte il rilevamento della locale in
middleware.tse il providerlng. - Problemi di layout RTL: Verifica che
dirderivi daisRtl(locale)e che il tuo CSS rispetti[dir="rtl"]. - Mancanza di alternate SEO: Conferma che
alternates.languagesincluda tutte le localizzazioni ex-default. - Bundle troppo grandi: Suddividi ulteriormente i namespace ed evita di importare interi alberi
localessul client.
14) Cosa c’è dopo
- Aggiungi più localizzazioni e namespace man mano che le funzionalità crescono
- Localizza pagine di errore, email e contenuti generati da API
- Estendi i workflow di Intlayer per aprire automaticamente PR per aggiornamenti di traduzione
Se preferisci un punto di partenza, prova il template: https://github.com/aymericzip/intlayer-next-i18next-template.