# General Translation React SDKs (gt-react, gt-next, gt-react-native): Sviluppare con le traduzioni per SPA
URL: https://generaltranslation.com/it/docs/react/guides/developing-spa-translations.mdx
---
title: Sviluppare con le traduzioni per SPA
description: Come visualizzare in anteprima le traduzioni di General Translation durante lo sviluppo di un'app React a pagina singola.
related:
links:
- /docs/react/guides/storing-translations
- /docs/react/guides/configuring
- /docs/react/guides/translating-jsx
- /docs/react/guides/managing-locales
---
Le traduzioni di sviluppo ti permettono di visualizzare in anteprima i contenuti tradotti mentre modifichi la tua SPA. Richiedono il compilatore GT e una chiave API di sviluppo.
**Prerequisiti:**
* Un'app React a pagina singola configurata con la [SPA Quickstart](/docs/react/react-spa-quickstart)
* Una chiave API di sviluppo che inizia con `gtx-dev-`
**Limitazione di CommonJS:** L'hot reload in sviluppo richiede ESM perché il compilatore inserisce `await` al livello superiore. Non funziona nelle applicazioni compilate come CommonJS. Le traduzioni di produzione continuano comunque a funzionare con il pattern di avvio CommonJS della [SPA Quickstart](/docs/react/react-spa-quickstart).
## Configurazione [#setup]
### 1. Installa il compilatore
Installa `@generaltranslation/compiler` come dipendenza di sviluppo:
```bash
npm i -D @generaltranslation/compiler
```
```bash
yarn add --dev @generaltranslation/compiler
```
```bash
bun add --dev @generaltranslation/compiler
```
```bash
pnpm add --save-dev @generaltranslation/compiler
```
### 2. Aggiungi il plugin del compilatore
Abilita l'hot reload di sviluppo nella config condivisa tra CLI e compilatore:
```json title="gt.config.json"
{
"files": {
"gt": {
"output": "src/_gt/[locale].json",
"parsingFlags": {
"devHotReload": true
}
}
}
}
```
Quindi aggiungi il plugin per il bundler che usi.
```ts title="vite.config.ts"
import react from '@vitejs/plugin-react';
import { vite as gtCompiler } from '@generaltranslation/compiler'; // [!code highlight]
import { defineConfig } from 'vite';
import gtConfig from './gt.config.json'; // [!code highlight]
export default defineConfig({
plugins: [react(), gtCompiler({ ...gtConfig })], // [!code highlight]
});
```
Installa `dotenv` come dipendenza di sviluppo in modo che webpack possa leggere `.env` e `.env.local`, quindi aggiungi il compilatore prima degli altri plugin. Usa `DefinePlugin` per esporre al codice del browser solo le credenziali di sviluppo:
```js title="webpack.config.mjs"
import { webpack as gtCompiler } from '@generaltranslation/compiler';
import dotenv from 'dotenv';
import webpack from 'webpack';
import gtConfig from './gt.config.json' with { type: 'json' };
dotenv.config({ path: '.env' });
dotenv.config({ path: '.env.local', override: true });
export default (_env, argv) => {
const isProduction = (argv.mode ?? 'production') === 'production';
return {
// Mantieni le impostazioni webpack esistenti.
plugins: [
gtCompiler({ ...gtConfig }),
new webpack.DefinePlugin({
'process.env.GT_PROJECT_ID': JSON.stringify(
isProduction ? '' : (process.env.GT_PROJECT_ID ?? '')
),
'process.env.GT_DEV_API_KEY': JSON.stringify(
isProduction ? '' : (process.env.GT_DEV_API_KEY ?? '')
),
}),
],
};
};
```
Consulta l'[esempio webpack completo di `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/webpack-spa) per loader, file di traduzione locali e impostazioni del server di sviluppo.
Registra il compilatore prima degli altri plugin Rollup:
```js title="rollup.config.mjs"
import { rollup as gtCompiler } from '@generaltranslation/compiler';
export default {
input: 'src/index.ts',
plugins: [
gtCompiler(),
// I tuoi altri plugin Rollup
],
};
```
Rollup non può analizzare un'importazione di traduzione completamente dinamica. Elenca ogni impostazione regionale con uno specificatore di importazione statico:
```ts title="src/loadTranslations.ts"
const translationLoaders = {
es: () => import('./_gt/es.json'),
fr: () => import('./_gt/fr.json'),
};
export default async function loadTranslations(locale: string) {
const loader =
translationLoaders[locale as keyof typeof translationLoaders];
return loader ? (await loader()).default : {};
}
```
Rollup standard non fornisce l'integrazione delle credenziali di sviluppo mostrata per Vite e webpack. Rigenera i file di traduzione locali quando il contenuto sorgente cambia. Consulta l'[esempio Rollup completo di `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/rollup-spa).
Aggiungi l'adattatore Rspack ai plugin:
```js title="rspack.config.mjs"
import { rspack as gtCompiler } from '@generaltranslation/compiler';
export default {
plugins: [gtCompiler()],
};
```
La traduzione di sviluppo richiede anche di esporre `GT_PROJECT_ID` e `GT_DEV_API_KEY` al codice del browser senza includere nessuno dei due valori nei bundle di produzione.
Aggiungi l'adattatore esbuild all'array `plugins`:
```js title="build.mjs"
import { build } from 'esbuild';
import { esbuild as gtCompiler } from '@generaltranslation/compiler';
await build({
entryPoints: ['src/index.tsx'],
bundle: true,
outdir: 'dist',
plugins: [gtCompiler()],
});
```
*Nota: l'adattatore esbuild non supporta l'iniezione JSX automatica. Racchiudi esplicitamente il JSX traducibile oppure usa un altro adattatore quando è richiesto `enableAutoJsxInjection`.*
Consulta l'[esempio Vite completo di `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/vite-spa) per una configurazione Vite completa.
### 3. Aggiungi le credenziali di sviluppo
Ottieni una chiave API di sviluppo su [dash.generaltranslation.com](https://dash.generaltranslation.com/en-US/signin) oppure esegui:
```bash
npx gt auth
```
Quindi aggiungi l'ID progetto e la chiave API di sviluppo a `.env.local`, quindi passali alla funzione di inizializzazione:
```bash title=".env.local"
VITE_GT_PROJECT_ID="your-project-id"
VITE_GT_DEV_API_KEY="your-dev-api-key"
```
```ts
await initializeGTSPA({
...gtConfig,
projectId: import.meta.env.VITE_GT_PROJECT_ID,
devApiKey: import.meta.env.VITE_GT_DEV_API_KEY,
loadTranslations,
});
```
```bash title=".env.local"
GT_PROJECT_ID="your-project-id"
GT_DEV_API_KEY="your-dev-api-key"
```
```ts
await initializeGTSPA({
...gtConfig,
projectId: process.env.GT_PROJECT_ID,
devApiKey: process.env.GT_DEV_API_KEY,
loadTranslations,
});
```
La configurazione di webpack qui sopra sostituisce entrambi i valori con stringhe vuote nelle build di produzione, quindi le credenziali di sviluppo non vengono incluse nel bundle di produzione.
**Solo per lo sviluppo:** usa una chiave che inizi con `gtx-dev-`. Non esporre mai nel codice del browser una chiave di produzione che inizi con `gtx-api-`.
### 4. Inizia a sviluppare
Avvia il server di sviluppo e passa a un'impostazione regionale diversa da quella predefinita. Quando modifichi contenuti traducibili, il compilatore registra la modifica e `gt-react` richiede una traduzione di sviluppo aggiornata.
## Next steps
- /docs/react/guides/storing-translations
- /docs/react/guides/configuring
- /docs/react/guides/translating-jsx
- /docs/react/guides/managing-locales