# node: Guida rapida a Node.js
URL: https://generaltranslation.com/it/docs/node/tutorials/quickstart.mdx
---
title: Guida rapida a Node.js
description: Aggiungi più lingue al tuo server Node.js in meno di 10 minuti
---
Al termine di questa guida, il tuo server Node.js risponderà con contenuti tradotti in base alla lingua della richiesta, utilizzando stringhe inline o registrate in precedenza.
**Prerequisiti:**
* Un server Node.js (Express, Fastify o simili)
* Node.js 18+
**Vuoi un Setup automatico?** Esegui `npx gt@latest` per configurare tutto con la [procedura guidata di Setup](/docs/cli/init). Questa guida tratta il Setup manuale.
***
## Passaggio 1: Installa i pacchetti
`gt-node` è la libreria che gestisce le traduzioni sul server. `gt` è lo strumento CLI che prepara le traduzioni per l'ambiente di produzione.
```bash
npm i gt-node
npm i -D gt
```
```bash
yarn add gt-node
yarn add --dev gt
```
```bash
bun add gt-node
bun add --dev gt
```
```bash
pnpm add gt-node
pnpm add --save-dev gt
```
***
## Passaggio 2: Crea un file di configurazione delle traduzioni
Crea un file **`gt.config.json`** nella directory principale del progetto. Questo indica alla libreria quali lingue supporta il progetto:
```json title="gt.config.json"
{
"defaultLocale": "en",
"locales": ["es", "fr", "ja"]
}
```
* **`defaultLocale`** — la lingua in cui sono scritte le stringhe del tuo server.
* **`locales`** — le lingue in cui vuoi tradurre. Scegline una dall'[elenco delle impostazioni regionali supportate](/docs/platform/supported-locales).
***
## Passaggio 3: Inizializza General Translation
Chiama **`initializeGT`** una sola volta all'inizio del file di ingresso del server, prima di usare qualsiasi funzione di traduzione:
```js title="server.js"
import { initializeGT } from 'gt-node';
initializeGT({
defaultLocale: 'en',
locales: ['en', 'es', 'fr', 'ja'],
projectId: process.env.GT_PROJECT_ID,
});
```
In questo modo la libreria viene configurata con le lingue supportate e le credenziali del progetto.
***
## Passaggio 4: Imposta il contesto dell'impostazione regionale per ogni richiesta
Ogni richiesta deve sapere quale lingua usare. Usa **`withGT`** per avvolgere gli handler delle richieste: usa l'archiviazione locale asincrona, quindi le funzioni di traduzione selezionano automaticamente l'impostazione regionale corretta:
```js title="server.js"
import { withGT } from 'gt-node';
app.use((req, res, next) => {
const locale = req.headers['accept-language']?.split(',')[0] || 'en';
withGT(locale, () => next());
});
```
***
## Passaggio 5: Traduci le stringhe inline
Per tradurre le stringhe direttamente all'interno degli handler delle richieste, usa **`getGT`**:
```js title="server.js"
import { getGT } from 'gt-node';
app.get('/api/greeting', async (req, res) => {
const gt = await getGT();
res.json({
message: gt('Hello, world!'),
welcome: gt('Welcome, {name}!', { name: 'Alice' }),
});
});
```
`getGT` restituisce una funzione di traduzione associata all’impostazione regionale della richiesta corrente.
***
## Passaggio 6: Preregistra le stringhe costanti (facoltativo)
Per le stringhe definite fuori dagli handler di richiesta — come messaggi di errore, etichette di enum o costanti — usa **`msg`** per registrarle a livello di modulo, quindi **`getMessages`** per risolvere le traduzioni a runtime:
```js title="messages.js"
import { msg } from 'gt-node';
export const GREETING = msg('Hello, world!');
export const WELCOME = msg('Welcome, {name}!');
export const NOT_FOUND = msg('Resource not found.');
```
```js title="handler.js"
import { getMessages } from 'gt-node';
import { GREETING, WELCOME, NOT_FOUND } from './messages.js';
app.get('/api/status', async (req, res) => {
const m = await getMessages();
res.json({
greeting: m(GREETING),
welcome: m(WELCOME, { name: 'Alice' }),
});
});
app.use(async (req, res) => {
const m = await getMessages();
res.status(404).json({ error: m(NOT_FOUND) });
});
```
Questo approccio è utile quando le stesse stringhe vengono usate in più handler.
***
## Passaggio 7: 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**: il server traduce i contenuti in tempo reale mentre sviluppi.
Crea un file **`.env`**:
```bash title=".env"
GT_API_KEY="your-api-key"
GT_PROJECT_ID="your-project-id"
```
Ottieni le tue chiavi gratuite su [dash.generaltranslation.com](https://dash.generaltranslation.com/signup) oppure esegui:
```bash
npx gt auth
```
Non esporre mai `GT_API_KEY` pubblicamente e non salvarla nel controllo del codice sorgente.
Sì. Senza chiavi API, `gt-node` funziona come una normale libreria i18n. Non avrai la traduzione su richiesta in fase di sviluppo, ma potrai comunque:
* Fornire manualmente i tuoi file di traduzione
* Usare tutte le funzioni di traduzione (`getGT`, `msg`, `getMessages`, ecc.)
* Eseguire `npx gt generate` per creare modelli di file di traduzione, quindi tradurli autonomamente
***
## Passaggio 8: Verificalo in azione
Avvia il server e fai delle prove con diversi header `Accept-Language`:
```bash
# Predefinito (inglese)
curl http://localhost:3000/api/greeting
# Spagnolo
curl -H "Accept-Language: es" http://localhost:3000/api/greeting
# Francese
curl -H "Accept-Language: fr" http://localhost:3000/api/greeting
```
Dovresti vedere risposte tradotte in ciascuna lingua.
In fase di sviluppo, le traduzioni avvengono su richiesta — la prima volta che viene richiesta una nuova lingua potresti notare un breve ritardo. In produzione, le traduzioni sono generate in anticipo e si caricano istantaneamente.
***
## Passaggio 9: Esempio completo
Ecco un server Express completo con tutti gli elementi riuniti:
```js title="server.js"
import express from 'express';
import { initializeGT, withGT, getGT, msg, getMessages } from 'gt-node';
// Inizializza GT prima di tutto il resto
initializeGT({
defaultLocale: 'en',
locales: ['en', 'es', 'fr', 'ja'],
projectId: process.env.GT_PROJECT_ID,
});
// Pre-registra le stringhe costanti
const NOT_FOUND = msg('Resource not found.');
const app = express();
// Imposta il contesto dell'impostazione regionale per ogni richiesta
app.use((req, res, next) => {
const locale = req.headers['accept-language']?.split(',')[0] || 'en';
withGT(locale, () => next());
});
// Traduzione inline
app.get('/api/greeting', async (req, res) => {
const gt = await getGT();
res.json({ message: gt('Hello, world!') });
});
// Traduzione dei messaggi pre-registrati
app.use(async (req, res) => {
const m = await getMessages();
res.status(404).json({ error: m(NOT_FOUND) });
});
app.listen(3000, () => console.log('Server running on port 3000'));
```
***
## Passaggio 10: Esegui il deployment in produzione
In produzione, le traduzioni vengono generate in anticipo durante la 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 && "
}
}
```
Configura le variabili d'ambiente di **produzione** nel tuo provider di hosting:
```bash
GT_PROJECT_ID=your-project-id
GT_API_KEY=gtx-api-your-production-key
```
Non esporre mai pubblicamente la tua `GT_API_KEY`.
Tutto qui: il tuo server ora è multilingue. 🎉
***
## Risoluzione dei problemi
È normale. In fase di sviluppo, le traduzioni avvengono su richiesta (i contenuti vengono tradotti in tempo reale tramite l'API). Questo ritardo **non si verifica in produzione** — tutte le traduzioni vengono generate in anticipo da `npx gt translate`.
Un testo ambiguo può portare a traduzioni imprecise. Per esempio, "apple" potrebbe indicare il frutto o l'azienda. Aggiungi l'opzione `$context` per chiarire:
```js
gt('Apple', { $context: 'the technology company' });
```
Sia `getGT()` sia `msg()` supportano l'opzione `$context`.
***
## Passaggi successivi
* [**`initializeGT`**](/docs/node/api/initialize-gt) — Opzioni di configurazione complete
* [**`withGT`**](/docs/node/api/with-gt) — Contesto dell'impostazione regionale nelle richieste
* [**`getGT`**](/docs/node/api/get-gt) — Traduzione inline di stringhe
* [**`msg` & `getMessages`**](/docs/node/api/get-messages) — Traduzione dei messaggi pre-registrati
* [**CLI**](/docs/cli/translate) — Riferimento per il flusso di lavoro di traduzione