# General Translation React SDKs (gt-react, gt-next, gt-react-native): Next.js App Router Quickstart
URL: https://generaltranslation.com/it/docs/react/nextjs-quickstart.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Aggiungi più lingue a un'app Next.js App Router con General Translation in meno di 10 minuti.

Alla fine di questa guida, la tua app Next.js mostrerà contenuti in più lingue, con un selettore di lingua con cui gli utenti potranno interagire.

**Prerequisiti:**

* Un&#39;app Next.js che usa **App Router** (Next.js 13.0.0 o versioni successive, esclusi 15.2.1 e 15.2.2)
* Node.js 18+

<Callout type="info">
  **Suggerimento:** Esegui `npx gt@latest` per configurare tutto con il [Setup Wizard](/docs/cli/quickstart). Questa guida illustra la configurazione manuale.
</Callout>

<Callout type="info">
  **Nota:** Se usi Pages Router, segui invece il [Quickstart di Next.js Pages Router](/docs/react/nextjs-pages-router-quickstart).
</Callout>

## 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.

<Tabs items={['npm', 'yarn', 'bun', 'pnpm']}>
  <Tab value="npm">
    ```bash
    npm i gt-next
    npm i -D gt
    ```
  </Tab>

  <Tab value="yarn">
    ```bash
    yarn add gt-next
    yarn add --dev gt
    ```
  </Tab>

  <Tab value="bun">
    ```bash
    bun add gt-next
    bun add --dev gt
    ```
  </Tab>

  <Tab value="pnpm">
    ```bash
    pnpm add gt-next
    pnpm add --save-dev gt
    ```
  </Tab>
</Tabs>

### 2. Configura la configurazione di Next.js

`gt-next` usa un plugin di Next.js chiamato **`withGTConfig`** per configurare l&#39;internazionalizzazione in fase di build. Avvolgi con esso la configurazione di Next.js esistente. In questo frammento e in quelli seguenti, le righe verdi vengono aggiunte e le righe rosse vengono rimosse; mantieni tutte le opzioni già presenti nella tua configurazione:

```ts title="next.config.ts"
import { withGTConfig } from 'gt-next/config'; // [!code ++]

const nextConfig = {};

export default nextConfig; // [!code --]
export default withGTConfig(nextConfig); // [!code ++]
```

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&#39;[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`](/docs/react/reference/functions/load-translations)** 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;
}
```

<Callout type="warn">
  **Avviso:** Questi file di traduzione non esistono finché non li crei, quindi al primo `npm run dev` la compilazione fallisce e la pagina restituisce un HTTP 500. Esegui [`npx gt generate`](/docs/cli/reference/commands/generate) (non serve una chiave API) oppure [`npx gt translate`](/docs/cli/reference/commands/translate) (con credenziali), oppure aggiungi file vuoti `{}` in `public/_gt/[locale].json`.
</Callout>

`withGTConfig` rileva automaticamente un file `loadTranslations.[js|ts]` nella directory `src/` o nella radice del progetto — non serve alcuna configurazione aggiuntiva.

<Callout type="info">
  **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).
</Callout>

### 5. Aggiungi GTProvider al layout

Il componente **[`GTProvider`](/docs/react/reference/components/gt-provider)** consente all&#39;intera app di accedere alle traduzioni. Deve racchiudere l&#39;app a livello del layout radice. Mantieni invariato il resto del layout esistente (font, metadati, stili):

```tsx title="app/layout.tsx"
import { GTProvider, useLocale } from 'gt-next'; // [!code ++]

export default function RootLayout({ children }: { children: React.ReactNode }) {
  const locale = useLocale(); // [!code ++]
  return (
    {/* [!code --] */}
    <html lang="en">
    {/* [!code ++] */}
    <html lang={locale}>
      <body>
        {/* [!code --] */}
        {children}
        {/* [!code ++:3] */}
        <GTProvider>
          {children}
        </GTProvider>
      </body>
    </html>
  );
}
```

### 6. Contrassegna il contenuto da tradurre

Ora racchiudi nel componente **[`<T>`](/docs/react/reference/components/t)** qualsiasi testo che vuoi tradurre. [`<T>`](/docs/react/reference/components/t) sta per &quot;translate&quot;:

```tsx title="app/page.tsx"
import { T } from 'gt-next'; // [!code ++]

export default function Home() {
  return (
    <main>
      {/* [!code ++] */}
      <T>
        <h1>Welcome to my app</h1>
        <p>This content will be translated automatically.</p>
      {/* [!code ++] */}
      </T>
    </main>
  );
}
```

Puoi racchiudere in [`<T>`](/docs/react/reference/components/t) tanto o poco JSX quanto vuoi. Tutto ciò che c&#39;è al suo interno — testo, elementi annidati, perfino la formattazione — viene tradotto come un&#39;unica unità.

### 7. Aggiungi un selettore di lingua

Inserisci un **[`<LocaleSelector>`](/docs/react/reference/components/locale-selector)** per consentire agli utenti di cambiare lingua:

```tsx title="app/page.tsx"
import { T } from 'gt-next'; // [!code --]
import { T, LocaleSelector } from 'gt-next'; // [!code ++]

export default function Home() {
  return (
    <main>
      {/* [!code ++] */}
      <LocaleSelector />
      <T>
        <h1>Welcome to my app</h1>
        <p>This content will be translated automatically.</p>
      </T>
    </main>
  );
}
```

[`LocaleSelector`](/docs/react/reference/components/locale-selector) mostra un menu a discesa con le lingue presenti nel tuo `gt.config.json`.

### 8. Configura le variabili d&#39;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/en-US/signin) oppure eseguendo:

```bash
npx gt auth
```

<Callout type="warn">
  **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.
</Callout>

<Accordions>
  <Accordion title="Posso usare gt-next senza chiavi API?">
    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 ([`<T>`](/docs/react/reference/components/t), [`<Var>`](/docs/react/reference/components/var), [`LocaleSelector`](/docs/react/reference/components/locale-selector), ecc.)
    * Eseguire [`npx gt generate`](/docs/cli/reference/commands/generate) per creare modelli di file di traduzione, poi tradurli tu stesso
  </Accordion>
</Accordions>

### 9. Verifica che funzioni

Avvia il server di sviluppo:

<Tabs items={['npm', 'yarn', 'bun', 'pnpm']}>
  <Tab value="npm">
    ```bash
    npm run dev
    ```
  </Tab>

  <Tab value="yarn">
    ```bash
    yarn dev
    ```
  </Tab>

  <Tab value="bun">
    ```bash
    bun dev
    ```
  </Tab>

  <Tab value="pnpm">
    ```bash
    pnpm dev
    ```
  </Tab>
</Tabs>

Apri [http://localhost:3000](http://localhost:3000) e usa il menu a discesa della lingua per passare da una lingua all&#39;altra. Dovresti vedere i contenuti tradotti.

<Callout type="info">
  **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&#39;istante.
</Callout>

### 10. Traduci le stringhe

Per stringhe semplici — come gli attributi `placeholder`, i valori di `aria-label` o il testo `alt` — usa l&#39;hook **[`useGT`](/docs/react/reference/hooks/use-gt)**. 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 (
    <form>
      <input
        placeholder={gt('Enter your email')}
        aria-label={gt('Email input field')}
      />
      <button type="submit">{gt('Send')}</button>
    </form>
  );
}
```

<Accordions>
  <Accordion title="Stai usando un componente async?">
    I componenti async non possono usare gli hook. Importa invece [`getGT`](/docs/react/nextjs/reference/functions/get-gt) da `gt-next/server`:

    ```tsx
    import { getGT } from 'gt-next/server';

    export default async function Page() {
      const gt = await getGT();
      return <p>{gt('Hello')}</p>;
    }
    ```
  </Accordion>
</Accordions>

### 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&#39;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
```

<Callout type="warn">
  **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_`.
</Callout>

Ecco fatto: la tua app ora è multilingue. 🎉

## Risoluzione dei problemi [#troubleshooting]

<Accordions>
  <Accordion title="La lingua non cambia quando uso il menu a discesa">
    Verifica che i cookie del browser siano abilitati e che il selettore venga renderizzato all&#39;interno di [`<GTProvider>`](/docs/react/reference/components/gt-provider). Se il routing delle impostazioni regionali è abilitato, verifica anche che il matcher del middleware e [`pathRegex`](/docs/react/nextjs/config#path-regex) includano la route corrente.
  </Accordion>

  <Accordion title="Le traduzioni sono lente in sviluppo">
    È normale. In sviluppo, le traduzioni avvengono su richiesta (i contenuti vengono tradotti in tempo reale tramite l&#39;API). Questo ritardo **non esiste in produzione** — tutte le traduzioni vengono pre-generate da [`npx gt translate`](/docs/cli/reference/commands/translate).
  </Accordion>

  <Accordion title="Alcune traduzioni non sono corrette">
    Un testo ambiguo può portare a traduzioni imprecise. Per esempio, &quot;apple&quot; potrebbe indicare il frutto o l&#39;azienda. Aggiungi una prop `$context` per chiarire:

    ```jsx
    <T $context="the technology company">Apple</T>
    ```

    [`<T>`](/docs/react/reference/components/t), [`useGT()`](/docs/react/reference/hooks/use-gt) e [`getGT()`](/docs/react/nextjs/reference/functions/get-gt) supportano tutti `$context`.
  </Accordion>
</Accordions>

## Next steps

- /docs/react/guides/translating-jsx
- /docs/react/guides/translating-strings
- /docs/react/guides/managing-locales
- /docs/react/guides/formatting-variables

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
