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
Cronologia delle versioni
- Versione inizialev7.0.601/11/2025
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
Come internazionalizzare la tua applicazione Next.js usando next-i18next nel 2026
Indice
Cos'è next-i18next?
next-i18next è una popolare soluzione di internazionalizzazione (i18n) per applicazioni Next.js. Mentre il pacchetto originale next-i18next è stato progettato per il Pages Router, questa guida ti mostra come implementare i18next con il moderno App Router utilizzando direttamente i18next e react-i18next.
Con questo approccio, puoi:
- Organizzare le traduzioni usando namespace (ad esempio,
common.json,about.json) per una migliore gestione dei contenuti. - Caricare le traduzioni in modo efficiente caricando solo i namespace necessari per ogni pagina, riducendo la dimensione del bundle.
- Supportare sia componenti server che client con una corretta gestione di SSR e hydration.
- Garantire il supporto a TypeScript con configurazione locale e chiavi di traduzione tipizzate.
- Ottimizza per la SEO con una corretta internazionalizzazione di metadata, sitemap e robots.txt.
In alternativa, puoi anche fare riferimento alla guida next-intl, oppure utilizzare direttamente Intlayer.
Vedi il confronto in next-i18next vs next-intl vs Intlayer.
Pratiche da seguire
Prima di entrare nell'implementazione, ecco alcune pratiche da seguire:
- Imposta gli attributi HTML
langedir - Nel tuo layout, calcola
dirusandogetLocaleDirection(locale)e imposta<html lang={locale} dir={dir}>per una corretta accessibilità e SEO. - Dividi i messaggi per namespace
Organizza i file JSON per locale e namespace (ad esempio,
common.json,about.json) per caricare solo ciò di cui hai bisogno. - Minimizza il payload client
Nelle pagine, invia solo i namespace richiesti a
NextIntlClientProvider(ad esempio,pick(messages, ['common', 'about'])). - Preferisci pagine statiche Usa pagine statiche il più possibile per migliori prestazioni e SEO.
- I18n nei componenti server
I componenti server, come le pagine o tutti i componenti non marcati come
client, sono statici e possono essere prerenderizzati al momento della build. Quindi dovremo passare loro le funzioni di traduzione come props. - Configura i tipi TypeScript
- Per le tue localizzazioni, assicurati la sicurezza dei tipi in tutta la tua applicazione.
- Proxy per il reindirizzamento Usa un proxy per gestire il rilevamento della localizzazione e il routing, e reindirizzare l'utente all'URL corretto con prefisso locale.
- Internazionalizzazione dei tuoi metadata, sitemap, robots.txt
Internazionalizza i tuoi metadata, sitemap, robots.txt usando la funzione
generateMetadatafornita da Next.js per garantire una migliore scoperta da parte dei motori di ricerca in tutte le localizzazioni. - Localizza i Link
Localizza i Link usando il componente
Linkper reindirizzare l'utente all'URL corretto con prefisso locale. È importante garantire la scoperta delle tue pagine in tutte le localizzazioni. - Automatizza test e traduzioni Automatizzare test e traduzioni aiuta a risparmiare tempo nella manutenzione della tua applicazione multilingue.
Consulta la nostra documentazione che elenca tutto ciò che devi sapere sull'internazionalizzazione e SEO: Internazionalizzazione (i18n) con next-intl.
Guida passo-passo per configurare i18next in un'applicazione Next.js
Consulta il Template dell'Applicazione su GitHub.
Ecco la struttura del progetto che andremo a creare:
Copiare il codice nella clipboard
Installa le Dipendenze
Installa i pacchetti necessari usando npm:
bashCopiare il codiceCopiare il codice nella clipboard
- i18next: Il framework principale di internazionalizzazione che gestisce il caricamento e la gestione delle traduzioni.
- react-i18next: Binding React per i18next che forniscono hook come
useTranslationper i componenti client. - i18next-resources-to-backend: Un plugin che permette il caricamento dinamico dei file di traduzione, consentendoti di caricare solo i namespace di cui hai bisogno.
Configura il tuo Progetto
Crea un file di configurazione per definire le localizzazioni supportate, la localizzazione predefinita e le funzioni di supporto per la localizzazione degli URL. Questo file funge da unica fonte di verità per la tua configurazione i18n e garantisce la sicurezza dei tipi in tutta l'applicazione.
Centralizzare la configurazione delle localizzazioni previene incoerenze e rende più semplice aggiungere o rimuovere localizzazioni in futuro. Le funzioni di supporto assicurano una generazione coerente degli URL per SEO e routing.
i18n.config.tsCopiare il codiceCopiare il codice nella clipboard
Centralizzare i Namespace di Traduzione
Crea una fonte unica di verità per ogni namespace che la tua applicazione espone. Riutilizzare questa lista mantiene sincronizzati il server, il client e il codice degli strumenti, e abilita il typing forte per gli helper di traduzione.
src/i18n.namespaces.tsCopiare il codiceCopiare il codice nella clipboard
Tipizzare Fortemente le Chiavi di Traduzione con TypeScript
Estendi
i18nextper puntare ai tuoi file linguistici canonici (di solito in inglese). TypeScript inferisce così le chiavi valide per namespace, quindi le chiamate at()sono verificate end-to-end.src/types/i18next.d.tsCopiare il codiceCopiare il codice nella clipboard
Suggerimento: conserva questa dichiarazione sotto
src/types(crea la cartella se non esiste). Next.js include giàsrcintsconfig.json, quindi l'augmentazione viene rilevata automaticamente. In caso contrario, aggiungi quanto segue al tuo filetsconfig.json:tsconfig.jsonCopiare il codiceCopiare il codice nella clipboard
Con questo in atto puoi fare affidamento sull'autocompletamento e sui controlli a tempo di compilazione:
tsxCopiare il codiceCopiare il codice nella clipboard
Configurare l'inizializzazione i18n lato server
Crea una funzione di inizializzazione lato server che carica le traduzioni per i componenti server. Questa funzione crea un'istanza separata di i18next per il rendering lato server, assicurando che le traduzioni siano caricate prima del rendering.
I componenti server necessitano di una propria istanza di i18next perché vengono eseguiti in un contesto diverso rispetto ai componenti client. Il pre-caricamento delle traduzioni sul server previene il flash di contenuti non tradotti e migliora la SEO garantendo che i motori di ricerca vedano contenuti tradotti.
src/app/i18n/server.tsCopiare il codiceCopiare il codice nella clipboard
Creare il Provider i18n lato Client
Crea un provider componente client che avvolge la tua applicazione con il contesto i18next. Questo provider riceve traduzioni pre-caricate dal server per prevenire il flash di contenuti non tradotti (FOUC) ed evitare richieste duplicate.
I componenti client necessitano della propria istanza i18next che gira nel browser. Accettando risorse pre-caricate dal server, assicuriamo un'idratazione fluida e preveniamo il lampeggio dei contenuti. Il provider gestisce anche dinamicamente i cambi di locale e il caricamento dei namespace.
src/components/I18nProvider.tsxCopiare il codiceCopiare il codice nella clipboard
Definire le Rotte Dinamiche per le Locali
Configura il routing dinamico per le localizzazioni creando una directory
[locale]nella cartella della tua app. Questo permette a Next.js di gestire il routing basato sulla locale, dove ogni locale diventa un segmento dell'URL (es./en/about,/fr/about).L'uso di rotte dinamiche consente a Next.js di generare pagine statiche per tutte le localizzazioni al momento della build, migliorando le prestazioni e la SEO. Il componente layout imposta gli attributi HTML
langedirin base alla locale, cosa cruciale per l'accessibilità e la comprensione da parte dei motori di ricerca.src/app/[locale]/layout.tsxCopiare il codiceCopiare il codice nella clipboard
Crea i tuoi file di traduzione
Crea file JSON per ogni locale e namespace. Questa struttura ti permette di organizzare le traduzioni in modo logico e caricare solo ciò che ti serve per ogni pagina.
Organizzare le traduzioni per namespace (ad esempio,
common.json,about.json) consente di effettuare il code splitting e ridurre la dimensione del bundle. Carichi solo le traduzioni necessarie per ogni pagina, migliorando le prestazioni.src/locales/en/common.jsonCopiare il codiceCopiare il codice nella clipboard
src/locales/fr/common.jsonCopiare il codiceCopiare il codice nella clipboard
src/locales/en/home.jsonCopiare il codiceCopiare il codice nella clipboard
src/locales/it/home.jsonCopiare il codiceCopiare il codice nella clipboard
src/locales/en/about.jsonCopiare il codiceCopiare il codice nella clipboard
src/locales/it/about.jsonCopiare il codiceCopiare il codice nella clipboard
Utilizzare le Traduzioni nelle Tue Pagine
Crea un componente pagina che inizializza i18next sul server e passa le traduzioni sia ai componenti server che client. Questo assicura che le traduzioni siano caricate prima del rendering e previene il lampeggiamento del contenuto.
L'inizializzazione lato server carica le traduzioni prima che la pagina venga renderizzata, migliorando la SEO e prevenendo il FOUC (Flash Of Unstyled Content). Passando le risorse pre-caricate al provider client, evitiamo richieste duplicate e garantiamo un'idratazione fluida.
src/app/[locale]/about/index.tsxCopiare il codiceCopiare il codice nella clipboard
Usare le Traduzioni nei Componenti Client
I componenti client possono utilizzare il hook
useTranslationper accedere alle traduzioni. Questo hook fornisce l'accesso alla funzione di traduzione e all'istanza i18n, permettendo di tradurre contenuti e accedere alle informazioni sulla locale.I componenti client necessitano dei React hooks per accedere alle traduzioni. Il hook
useTranslationsi integra perfettamente con i18next e fornisce aggiornamenti reattivi quando la locale cambia.Assicurati che la pagina/provider includa solo i namespace necessari (es.
about).
Se usi React < 19, memorizza in cache formatter pesanti comeIntl.NumberFormat.src/components/ClientComponent.tsxCopiare il codiceCopiare il codice nella clipboard
Usare le Traduzioni nei Componenti Server
I componenti server non possono utilizzare React hooks, quindi ricevono le traduzioni tramite props dai loro componenti genitori. Questo approccio mantiene i componenti server sincroni e consente loro di essere annidati all'interno di componenti client.
I componenti server che potrebbero essere annidati sotto confini client devono essere sincroni. Passando stringhe tradotte e informazioni sulla localizzazione come props, evitiamo operazioni asincrone e garantiamo un rendering corretto.
src/components/ServerComponent.tsxCopiare il codiceCopiare il codice nella clipboard
Cambiare la lingua del tuo contenuto
OpzionalePer cambiare la lingua del tuo contenuto in Next.js, il modo consigliato è utilizzare URL con prefisso locale e link di Next.js. L'esempio qui sotto legge la locale corrente dalla rotta, la rimuove dal pathname, e rende un link per ogni locale disponibile.
src/components/LocaleSwitcher.tsxCopiare il codiceCopiare il codice nella clipboard
Costruire un componente Link localizzato
OpzionaleRiutilizzare URL localizzati in tutta la tua app mantiene la navigazione coerente e ottimizzata per la SEO. Avvolgi
next/linkin un piccolo helper che aggiunge il prefisso della locale attiva alle rotte interne lasciando intatti gli URL esterni.src/components/LocalizedLink.tsxCopiare il codiceCopiare il codice nella clipboard
Suggerimento: Poiché
LocalizedLinkè un sostituto diretto, migra gradualmente sostituendo gli import e lasciando che il componente gestisca gli URL specifici per la locale.Accedere alla locale attiva all'interno delle Server Actions
OpzionaleLe Server Actions spesso necessitano della locale corrente per email, logging o integrazioni di terze parti. Combina il cookie della locale impostato dal tuo proxy con l'header
Accept-Languagecome fallback.src/app/actions/get-current-locale.tsCopiare il codiceCopiare il codice nella clipboard
Poiché l'helper si basa sui cookie e sugli header di Next.js, funziona nei Route Handlers, nelle Server Actions e in altri contesti esclusivamente server.
Internazionalizza i Tuoi Metadata
OpzionaleTradurre i contenuti è importante, ma l'obiettivo principale dell'internazionalizzazione è rendere il tuo sito web più visibile al mondo. L'i18n è una leva incredibile per migliorare la visibilità del tuo sito web attraverso una corretta SEO.
I metadata correttamente internazionalizzati aiutano i motori di ricerca a comprendere quali lingue sono disponibili sulle tue pagine. Questo include l'impostazione dei meta tag hreflang, la traduzione di titoli e descrizioni, e l'assicurarsi che gli URL canonici siano correttamente impostati per ogni locale.
Ecco una lista di buone pratiche riguardanti la SEO multilingue:
- Imposta i meta tag hreflang nel tag
<head>per aiutare i motori di ricerca a capire quali lingue sono disponibili nella pagina - Elenca tutte le traduzioni delle pagine nel sitemap.xml utilizzando lo schema XML
http://www.w3.org/1999/xhtml - Non dimenticare di escludere le pagine con prefisso dal robots.txt (es.
/dashboard,/fr/dashboard,/es/dashboard) - Usa un componente Link personalizzato per reindirizzare alla pagina più localizzata (es. in francese
<a href="/fr/about">À propos</a>)
Gli sviluppatori spesso dimenticano di riferire correttamente le loro pagine tra le diverse localizzazioni. Sistemiamolo:
src/app/[locale]/about/layout.tsxCopiare il codiceCopiare il codice nella clipboard
- Imposta i meta tag hreflang nel tag
Internazionalizza la tua Sitemap
OpzionaleGenera una sitemap che includa tutte le versioni locali delle tue pagine. Questo aiuta i motori di ricerca a scoprire e indicizzare tutte le versioni linguistiche dei tuoi contenuti.
Una sitemap correttamente internazionalizzata garantisce che i motori di ricerca possano trovare e indicizzare tutte le versioni linguistiche delle tue pagine. Questo migliora la visibilità nei risultati di ricerca internazionali.
src/app/sitemap.tsCopiare il codiceCopiare il codice nella clipboard
Internazionalizza il tuo robots.txt
OpzionaleCrea un file robots.txt che gestisca correttamente tutte le versioni locali delle tue rotte protette. Questo assicura che i motori di ricerca non indicizzino pagine di amministrazione o dashboard in nessuna lingua.
Configurare correttamente robots.txt per tutte le localizzazioni impedisce ai motori di ricerca di indicizzare pagine sensibili in qualsiasi lingua. Questo è cruciale per la sicurezza e la privacy.
src/app/robots.tsCopiare il codiceCopiare il codice nella clipboard
Configurare il Middleware per il Routing Locale
OpzionaleCrea un proxy per rilevare automaticamente la locale preferita dall'utente e reindirizzarlo all'URL con il prefisso della locale appropriata. Questo migliora l'esperienza utente mostrando i contenuti nella lingua preferita.
Il middleware garantisce che gli utenti vengano reindirizzati automaticamente alla loro lingua preferita quando visitano il tuo sito. Inoltre, salva la preferenza dell'utente in un cookie per visite future.
src/proxy.tsCopiare il codiceCopiare il codice nella clipboard
Automatizza le tue traduzioni usando Intlayer
OpzionaleIntlayer è una libreria gratuita e open-source progettata per assistere il processo di localizzazione nella tua applicazione. Mentre i18next gestisce il caricamento e la gestione delle traduzioni, Intlayer aiuta ad automatizzare il flusso di lavoro delle traduzioni.
Gestire manualmente le traduzioni può richiedere molto tempo ed essere soggetto a errori. Intlayer automatizza il testing, la generazione e la gestione delle traduzioni, facendoti risparmiare tempo e garantendo coerenza in tutta la tua applicazione.
Intlayer ti permette di:
Dichiarare i tuoi contenuti dove vuoi nella tua codebase
Intlayer consente di dichiarare i tuoi contenuti dove vuoi nella tua codebase utilizzando file.content.{ts|js|json}. Questo permette una migliore organizzazione dei contenuti, assicurando una maggiore leggibilità e manutenibilità della tua codebase.Testare le traduzioni mancanti
Intlayer fornisce funzioni di test che possono essere integrate nella tua pipeline CI/CD o nei tuoi test unitari. Scopri di più su come testare le tue traduzioni.Automatizza le tue traduzioni, Intlayer fornisce una CLI e un'estensione per VSCode per automatizzare le tue traduzioni. Può essere integrato nella tua pipeline CI/CD. Scopri di più su automatizzare le tue traduzioni. Puoi utilizzare la tua chiave API personale e il provider AI di tua scelta. Fornisce inoltre traduzioni contestuali, vedi riempi contenuto.
- Connetti contenuti esterni
Automatizza le tue traduzioni,
Intlayer fornisce una CLI e un'estensione VSCode per automatizzare le tue traduzioni. Può essere integrato nella tua pipeline CI/CD. Scopri di più su automatizzare le tue traduzioni.
Puoi utilizzare la tua chiave API personale e il provider AI di tua scelta. Offre inoltre traduzioni contestuali, vedi riempimento contenuti.Connetti contenuti esterni
Intlayer ti permette di connettere i tuoi contenuti a un sistema di gestione contenuti esterno (CMS). Per recuperarli in modo ottimizzato e inserirli nelle tue risorse JSON. Scopri di più su recupero contenuti esterni.Editor visuale
Intlayer offre un editor visuale gratuito per modificare i tuoi contenuti usando un editor visuale. Scopri di più su modifica visuale delle tue traduzioni.
E altro ancora. Per scoprire tutte le funzionalità offerte da Intlayer, consulta la documentazione sull'interesse di Intlayer.
Commenti
Ancora nessun commento. Sii il primo a condividere i tuoi pensieri.