# General Translation React SDKs (gt-react, gt-next): Next.js App Router Quickstart URL: https://generaltranslation.com/it/docs/react/nextjs-quickstart.mdx --- title: Next.js App Router Quickstart description: Aggiungi più lingue a un'app Next.js App Router con General Translation in meno di 10 minuti. related: links: - /docs/react/guides/translating-jsx - /docs/react/guides/translating-strings - /docs/react/guides/managing-locales - /docs/react/guides/formatting-variables --- # Next.js App Router Quickstart Alla fine di questa guida, la tua app Next.js mostrerà contenuti in più lingue, con un selettore della lingua con cui gli utenti potranno interagire. **Prerequisiti:** * Un'app Next.js che usa **App Router** (Next.js 13+) * Node.js 18+ **Suggerimento:** Esegui `npx gt@latest` per configurare tutto con il [Setup Wizard](/docs/cli/reference/commands/init). Questa guida illustra la configurazione manuale. **Nota:** Se usi Pages Router, segui invece il [Quickstart di Next.js Pages Router](/docs/react/nextjs-pages-router-quickstart). ## Quickstart [#quickstart] ### 1. Installa i pacchetti `gt-next` è la libreria che gestisce le traduzioni nella tua app. `gt` è lo strumento CLI che prepara le traduzioni per la produzione. ```bash npm i gt-next npm i -D gt ``` ```bash yarn add gt-next yarn add --dev gt ``` ```bash bun add gt-next bun add --dev gt ``` ```bash pnpm add gt-next pnpm add --save-dev gt ``` ### 2. Configura la configurazione di Next.js `gt-next` usa un plugin di Next.js chiamato **`withGTConfig`** per configurare l'internazionalizzazione in fase di build. Usalo per avvolgere la configurazione di Next.js esistente: ```ts title="next.config.ts" import { withGTConfig } from 'gt-next/config'; const nextConfig = {}; export default withGTConfig(nextConfig); ``` Questo plugin legge le impostazioni di traduzione e configura tutto automaticamente dietro le quinte. Non sono necessarie altre modifiche alla configurazione di Next.js. ### 3. Crea un file di configurazione per la traduzione Crea un file **`gt.config.json`** nella radice del progetto. In questo modo, la libreria saprà quali lingue supporti: ```json title="gt.config.json" { "defaultLocale": "en", "locales": ["es", "fr", "ja"], "files": { "gt": { "output": "public/_gt/[locale].json" } } } ``` * **`defaultLocale`** — la lingua in cui è scritta la tua app (la lingua sorgente). * **`locales`** — le lingue in cui vuoi tradurre. Scegline una dall'[elenco delle impostazioni regionali supportate](/docs/platform/dashboard/reference/supported-locales). * **`files.gt.output`** — dove la CLI salva i file di traduzione. `[locale]` viene sostituito con il codice di ciascuna lingua (ad esempio `public/_gt/es.json`). Aggiungi `public/_gt/` al tuo **`.gitignore`** — questi file vengono generati, non scritti manualmente: ```txt title=".gitignore" public/_gt/ ``` ### 4. Aggiungi una load function per le traduzioni locali Crea un file **`loadTranslations`** nella directory `src/` (o nella radice del progetto). Questo indica a `gt-next` come caricare i file di traduzione generati dalla CLI: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { const translations = await import(`../public/_gt/${locale}.json`); return translations.default; } ``` `withGTConfig` rileva automaticamente un file `loadTranslations.[js|ts]` nella directory `src/` o nella radice del progetto — non serve alcuna configurazione aggiuntiva. **Nota:** Le traduzioni locali sono incluse nel bundle della tua app, quindi vengono caricate istantaneamente senza dipendere da servizi esterni. Per maggiori dettagli e per i relativi compromessi, vedi [Archiviazione delle traduzioni](/docs/react/guides/storing-translations). ### 5. Aggiungi GTProvider al layout Il componente **`GTProvider`** consente all'intera app di accedere alle traduzioni. Deve racchiudere l'app a livello del layout radice: ```tsx title="app/layout.tsx" import { GTProvider, useLocale } from 'gt-next'; export default function RootLayout({ children }: { children: React.ReactNode }) { const locale = useLocale(); return ( {children} ); } ``` ### 6. Contrassegna il contenuto da tradurre Ora racchiudi nel componente **``** qualsiasi testo che vuoi tradurre. `` sta per "translate": ```tsx title="app/page.tsx" import { T } from 'gt-next'; export default function Home() { return (

Welcome to my app

This content will be translated automatically.

); } ``` Puoi racchiudere in `` tanto o poco JSX quanto vuoi. Tutto ciò che c'è al suo interno — testo, elementi annidati, perfino la formattazione — viene tradotto come un'unica unità. ### 7. Aggiungi un selettore di lingua Inserisci un **``** per consentire agli utenti di cambiare lingua: ```tsx title="app/page.tsx" import { T, LocaleSelector } from 'gt-next'; export default function Home() { return (

Welcome to my app

This content will be translated automatically.

); } ``` `LocaleSelector` mostra un menu a discesa con le lingue presenti nel tuo `gt.config.json`. ### 8. Configura le variabili d'ambiente (facoltativo) Per vedere le traduzioni durante lo sviluppo, ti servono le chiavi API di General Translation. Queste abilitano la **traduzione su richiesta**: la tua app traduce i contenuti in tempo reale mentre sviluppi. Crea un file **`.env.local`**: ```bash title=".env.local" GT_API_KEY="your-api-key" GT_PROJECT_ID="your-project-id" ``` Ottieni gratuitamente le tue chiavi su [dash.generaltranslation.com](https://dash.generaltranslation.com/signup) oppure eseguendo: ```bash npx gt auth ``` **Avviso:** Per lo sviluppo, usa una chiave che inizi con `gtx-dev-`. Le chiavi di produzione (`gtx-api-`) sono solo per CI/CD. Non esporre mai `GT_API_KEY` nel browser e non eseguirne il commit nel sistema di controllo versione. Sì. Senza chiavi API, `gt-next` funziona come una libreria i18n standard. Non avrai la traduzione su richiesta in sviluppo, ma puoi comunque: * Fornire manualmente i tuoi file di traduzione * Usare tutti i componenti (``, ``, `LocaleSelector`, ecc.) * Eseguire `npx gt generate` per creare modelli di file di traduzione, poi tradurli tu stesso ### 9. Verifica che funzioni Avvia il server di sviluppo: ```bash npm run dev ``` ```bash yarn dev ``` ```bash bun dev ``` ```bash pnpm dev ``` Apri [http://localhost:3000](http://localhost:3000) e usa il menu a discesa della lingua per passare da una lingua all'altra. Dovresti vedere i contenuti tradotti. **Nota:** In sviluppo, le traduzioni vengono generate on-demand, quindi la prima volta che passi a una nuova lingua potresti vedere per un attimo uno stato di caricamento. In produzione, le traduzioni vengono pregenerate e si caricano all'istante. ### 10. Traduci le stringhe Per stringhe semplici — come gli attributi `placeholder`, i valori di `aria-label` o il testo `alt` — usa l'hook **`useGT`**. Funziona nei componenti server e client sincroni: ```tsx title="app/contact/page.tsx" import { useGT } from 'gt-next'; export default function ContactPage() { const gt = useGT(); return (
); } ``` I componenti async non possono usare gli hook. Importa invece `getGT` da `gt-next/server`: ```tsx import { getGT } from 'gt-next/server'; export default async function Page() { const gt = await getGT(); return

{gt('Hello')}

; } ```
### 11. Esegui il deploy in produzione In produzione, le traduzioni vengono generate in fase di build (senza chiamate API in tempo reale). Aggiungi il comando `translate` allo script di build: ```json title="package.json" { "scripts": { "build": "npx gt translate && next build" } } ``` Imposta le variabili d'ambiente di **produzione** sul tuo provider di hosting (Vercel, Netlify, ecc.): ```bash GT_PROJECT_ID=your-project-id GT_API_KEY=gtx-api-your-production-key ``` **Avviso:** Le chiavi produzione iniziano con `gtx-api-` (non `gtx-dev-`). Puoi ottenerne una da [dash.generaltranslation.com](https://dash.generaltranslation.com). Non aggiungere mai il prefisso `NEXT_PUBLIC_`. Ecco fatto: la tua app ora è multilingue. 🎉 ## Risoluzione dei problemi [#troubleshooting] `gt-next` memorizza la preferenza della lingua dell'utente in un cookie chiamato `generaltranslation.locale`. Se in precedenza hai fatto delle prove con un'altra lingua, questo cookie potrebbe sovrascrivere la selezione. Cancella i cookie e riprova. * [Chrome](https://support.google.com/chrome/answer/95647) * [Firefox](https://support.mozilla.org/en-US/kb/delete-cookies-remove-info-websites-stored) * [Safari](https://support.apple.com/en-mn/guide/safari/sfri11471/16.0/mac/11.0) È normale. In sviluppo, le traduzioni avvengono on-demand (i contenuti vengono tradotti in tempo reale tramite l'API). Questo ritardo **non esiste in produzione** — tutte le traduzioni vengono pre-generate da `npx gt translate`. Un testo ambiguo può portare a traduzioni imprecise. Per esempio, "apple" potrebbe indicare il frutto o l'azienda. Aggiungi una prop `context` per chiarire: ```jsx Apple ``` L'opzione `context` è supportata da ``, `useGT()` e `getGT()`. ## Next steps - /docs/react/guides/translating-jsx - /docs/react/guides/translating-strings - /docs/react/guides/managing-locales - /docs/react/guides/formatting-variables