# react-native: Guida rapida a React Native
URL: https://generaltranslation.com/it/docs/react-native/tutorials/quickstart.mdx
---
title: Guida rapida a React Native
description: Aggiungi più lingue alla tua app React Native in meno di 10 minuti
---
Alla fine di questa guida, la tua app React Native mostrerà contenuti in più lingue, con un selettore della lingua con cui gli utenti potranno interagire.
**Prerequisiti:**
* Un'app React Native CLI (non Expo — per i progetti Expo, consulta la [guida rapida di Expo](/docs/react-native/tutorials/quickstart-expo))
* Node.js 18+
`gt-react-native` è ancora sperimentale e potrebbe non funzionare con tutti i progetti.
Se riscontri problemi, faccelo sapere [aprendo una issue su GitHub](https://github.com/generaltranslation/gt/issues).
**Vuoi una configurazione automatica?** Esegui `npx gt@latest` per configurare tutto con il [Wizard di setup](/docs/cli/init). Questa guida illustra la configurazione manuale.
***
## Passaggio 1: Installa i pacchetti
`gt-react-native` è la libreria che gestisce le traduzioni nella tua app. `gt` è lo strumento CLI che prepara le traduzioni per l'ambiente di produzione.
```bash
npm i gt-react-native
npm i -D gt
cd ios && pod install
```
```bash
yarn add gt-react-native
yarn add --dev gt
cd ios && pod install
```
```bash
bun add gt-react-native
bun add --dev gt
cd ios && pod install
```
```bash
pnpm add gt-react-native
pnpm add --save-dev gt
cd ios && pod install
```
***
## Passaggio 2: Crea un file di configurazione per la traduzione
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"],
"files": {
"gt": {
"output": "content/[locale].json"
}
}
}
```
* **`defaultLocale`** — la lingua in cui è scritta la tua app (la lingua di origine).
* **`locales`** — le lingue in cui vuoi tradurre. Scegline una dall'[elenco delle impostazioni regionali supportate](/docs/platform/supported-locales).
* **`files.gt.output`** — dove la CLI salva i file di traduzione. `[locale]` viene sostituito con ogni codice lingua (ad esempio, `content/es.json`).
***
## Passaggio 3: Configura i polyfill
Il runtime JavaScript di React Native non include le API `Intl` necessarie a `gt-react-native`. La soluzione più semplice è usare il plugin Babel incluso.
Aggiungilo alla configurazione Babel, impostando `entryPointFilePath` sul file di ingresso della tua app (controlla il campo `"main"` nel tuo `package.json`):
```js title="babel.config.js"
const path = require('path');
const gtPlugin = require('gt-react-native/plugin');
const gtConfig = require('./gt.config.json');
module.exports = {
presets: ['module:@react-native/babel-preset'],
plugins: [
[
gtPlugin,
{
locales: [gtConfig.defaultLocale, ...gtConfig.locales],
entryPointFilePath: path.resolve(__dirname, 'App.tsx'),
},
],
],
};
```
Installa i polyfill di FormatJS e importali all'inizio del file di ingresso. Ti servono i polyfill di base, più i dati specifici dell'impostazione regionale per ogni lingua supportata.
Consulta la [documentazione sui polyfill di FormatJS](https://formatjs.github.io/docs/polyfills) per l'elenco completo. Come minimo, ti servono:
```tsx title="index.js"
import '@formatjs/intl-getcanonicallocales/polyfill';
import '@formatjs/intl-locale/polyfill';
import '@formatjs/intl-pluralrules/polyfill-force';
import '@formatjs/intl-numberformat/polyfill';
import '@formatjs/intl-datetimeformat/polyfill';
import '@formatjs/intl-datetimeformat/add-all-tz';
// Aggiungi i dati dell'impostazione regionale per ogni lingua:
import '@formatjs/intl-pluralrules/locale-data/en';
import '@formatjs/intl-pluralrules/locale-data/es';
import '@formatjs/intl-numberformat/locale-data/en';
import '@formatjs/intl-numberformat/locale-data/es';
// ... ripeti per ogni impostazione regionale e polyfill
```
***
## Passaggio 4: Crea un loader delle traduzioni
Metro (il bundler di React Native) non supporta gli import dinamici, quindi devi associare esplicitamente ogni impostazione regionale al relativo file di traduzione:
```ts title="loadTranslations.ts"
const translations: Record = {
es: require("./content/es.json"),
fr: require("./content/fr.json"),
ja: require("./content/ja.json"),
};
export function loadTranslations(locale: string) {
return translations[locale] ?? {};
}
```
Questi file vengono generati dalla CLI quando esegui `npx gt translate`.
***
## Passaggio 5: aggiungi GTProvider alla tua app
Il componente **`GTProvider`** fornisce all'intera app l'accesso alle traduzioni. Avvolgi la tua app nel componente radice:
```tsx title="App.tsx"
import { GTProvider } from 'gt-react-native';
import gtConfig from './gt.config.json';
import { loadTranslations } from './loadTranslations';
export default function App() {
return (
{/* Il contenuto della tua app */}
);
}
```
`GTProvider` gestisce lo stato dell'impostazione regionale e rende le traduzioni disponibili per tutti i componenti figli. La prop `devApiKey` abilita la traduzione on-demand durante lo sviluppo.
***
## Passaggio 6: Contrassegna i contenuti da tradurre
Racchiudi nel componente **``** tutto il testo che vuoi tradurre:
```tsx title="screens/Home.tsx"
import { Text, View } from 'react-native';
import { T } from 'gt-react-native';
export default function Home() {
return (
Welcome to my app
This content will be translated automatically.
);
}
```
Tutto ciò che è incluso in `` viene tradotto come un'unica unità.
***
## Passaggio 7: Aggiungi un selettore della lingua
Usa l'hook **`useLocaleSelector`** per creare un selettore della lingua. A differenza di `gt-react`, `gt-react-native` non esporta un componente `` già pronto: devi creare tu l'interfaccia con l'hook:
```tsx title="screens/Home.tsx"
import { Text, View, Pressable } from 'react-native';
import { T, useLocaleSelector } from 'gt-react-native';
export default function Home() {
const { locales, locale, setLocale } = useLocaleSelector();
return (
{locales.map((l) => (
setLocale(l)}>
{l}
))}
Welcome to my app
);
}
```
`useLocaleSelector` restituisce le impostazioni regionali disponibili, l'impostazione regionale corrente e un setter, offrendoti il controllo completo dell'interfaccia utente.
***
## Passaggio 8: Configura le variabili d'ambiente (facoltativo)
Per vedere le traduzioni in fase di sviluppo, ti servono le chiavi API di General Translation. Queste abilitano la **traduzione on-demand**: la tua app traduce i contenuti in tempo reale mentre lavori allo sviluppo.
Crea un file **`.env`**:
```bash title=".env"
GT_API_KEY="your-api-key"
GT_PROJECT_ID="your-project-id"
```
Ottieni le chiavi gratuite su [dash.generaltranslation.com](https://dash.generaltranslation.com/signup) oppure eseguendo:
```bash
npx gt auth
```
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 le chiavi API di produzione nel bundle della tua app e non salvarle nel controllo di versione.
Sì. Senza chiavi API, `gt-react-native` funziona come una normale libreria i18n. Non avrai la traduzione on-demand in sviluppo, ma puoi comunque:
* Fornire manualmente i file di traduzione
* Usare tutti i componenti (``, ``, `LocaleSelector`, ecc.)
* Eseguire `npx gt generate` per creare modelli di file di traduzione e poi tradurli tu stesso
***
## Passaggio 9: Verifica che funzioni
Compila ed esegui la tua app:
```bash
npx react-native run-ios
# oppure
npx react-native run-android
```
Usa il selettore della lingua per passare da una lingua all'altra. Dovresti vedere i contenuti tradotti.
In fase di sviluppo, le traduzioni avvengono on-demand: la prima volta che passi a una nuova lingua potresti vedere un breve caricamento. In produzione, le traduzioni vengono pre-generate e si caricano istantaneamente.
***
## Passaggio 10: Traduci le stringhe (non solo JSX)
Per le stringhe normali, come gli attributi `placeholder` o i valori di `accessibilityLabel`, usa l'hook **`useGT`**:
```tsx title="screens/Contact.tsx"
import { TextInput, View } from 'react-native';
import { useGT } from 'gt-react-native';
export default function Contact() {
const gt = useGT();
return (
);
}
```
***
## Passaggio 11: Esegui il deploy 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 && "
}
}
```
Imposta le variabili d'ambiente di **produzione** nel tuo sistema CI/CD:
```bash
GT_PROJECT_ID=your-project-id
GT_API_KEY=gtx-api-your-production-key
```
Le chiavi di produzione iniziano con `gtx-api-` (non `gtx-dev-`). Puoi ottenerne una da [dash.generaltranslation.com](https://dash.generaltranslation.com). Non esporre mai le chiavi di produzione nel bundle della tua app.
Fatto: la tua app ora è multilingue. 🎉
***
## Risoluzione dei problemi
```
ERROR [Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'GtReactNative' could not be found.]
```
Significa che il modulo nativo non è stato collegato. Esegui `cd ios && pod install` e ricompila l'app.
```
Error: You are using invalid locale codes in your configuration.
```
In genere significa che i polyfill non sono configurati correttamente. Assicurati che il plugin Babel sia configurato (oppure che i polyfill manuali siano importati) e svuota la cache di Metro:
```bash
npx react-native start --reset-cache
```
È previsto. 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. Ad esempio, "apple" potrebbe indicare il frutto o l'azienda. Aggiungi una prop `context` per chiarire:
```jsx
Apple
```
Sia `` sia `useGT()` supportano l'opzione `context`.
***
## Prossimi passi
* [**Guida al componente ``**](/docs/react-native/guides/t) — Scopri variabili, plurali e schemi di traduzione avanzati
* [**Guida alla traduzione delle stringhe**](/docs/react-native/guides/strings) — Approfondisci `useGT`
* [**Componenti variabili**](/docs/react-native/guides/variables) — Gestisci i contenuti dinamici con ``, ``, `` e ``
* [**Deploy in produzione**](/docs/react-native/tutorials/quickdeploy) — Configurazione CI/CD, caching e ottimizzazione delle prestazioni