# General Translation React SDKs (gt-react, gt-next): Guida rapida di React Native
URL: https://generaltranslation.com/it/docs/react/react-native-quickstart.mdx
---
title: Guida rapida di React Native
description: Aggiungi General Translation a un'app React Native con gt-react-native, sia per Expo sia per React Native CLI puro.
related:
links:
- /docs/react/guides/translating-jsx
- /docs/react/guides/translating-strings
- /docs/react/guides/managing-locales
- /docs/react/guides/formatting-variables
---
`gt-react-native` aggiunge l'internazionalizzazione automatica alle app React Native. Inizializzi General Translation nell'entry point della tua app, aggiungi un plugin Babel per i polyfill necessari a React Native e avvolgi la tua app in `GTProvider`.
Questa guida rapida copre sia Expo sia React Native CLI puro. Per le app React web, usa la [Guida rapida di React](/docs/react/react-quickstart).
`gt-react-native` è sperimentale e potrebbe non funzionare per tutti i progetti. Include un modulo nativo, quindi **Expo Go non è supportato** — ti serve una build di sviluppo.
## Quickstart [#quickstart]
Installa il pacchetto, crea un file di configurazione, configura i polyfills, aggiungi un loader delle traduzioni, inizializza General Translation con il provider, contrassegna i contenuti da tradurre e genera le traduzioni.
### 1. Installa `gt-react-native`
Installa `gt-react-native` come dipendenza e la [`gt` CLI](/docs/cli/quickstart) come dipendenza di sviluppo.
```bash
npm install gt-react-native && npm install gt --save-dev
```
```bash
yarn add gt-react-native && yarn add --dev gt
```
```bash
bun add gt-react-native && bun add --dev gt
```
```bash
pnpm add gt-react-native && pnpm add --save-dev gt
```
*Nota: se usi la React Native CLI puro, dopo l'installazione esegui `cd ios && pod install` per collegare il modulo nativo.*
### 2. Crea `gt.config.json`
Crea un file `gt.config.json` nella radice del progetto. Specifica la lingua sorgente, le impostazioni regionali di destinazione e dove vengono salvati i file di traduzione.
```json title="gt.config.json"
{
"defaultLocale": "en",
"locales": ["es", "fr", "ja"],
"files": {
"gt": {
"output": "src/_gt/[locale].json"
}
}
}
```
* `defaultLocale` — la lingua in cui è scritta la tua app.
* `locales` — le lingue in cui tradurre. Scegli tra le [impostazioni regionali supportate](/docs/platform/dashboard/reference/supported-locales).
* `files.gt.output` — dove la CLI scrive i file di traduzione. `[locale]` viene sostituito con ciascun codice locale.
### 3. Configura i polyfill
Il Runtime JavaScript di React Native non include le API `Intl` necessarie a `gt-react-native`. Aggiungi il plugin Babel incluso, facendo puntare `entryPointFilePath` al file entry della tua app.
```js title="babel.config.js"
const { plugin: gtPlugin } = require('gt-react-native/plugin');
const gtConfig = require('./gt.config.json');
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
[
gtPlugin,
{
locales: [gtConfig.defaultLocale, ...gtConfig.locales],
entryPointFilePath: require.resolve('expo-router/entry'),
},
],
],
};
};
```
```js title="babel.config.js"
const path = require('path');
const { plugin: 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, 'index.js'),
},
],
],
};
```
Il plugin è una **named export**, quindi va destrutturato: `const { plugin: gtPlugin } = require('gt-react-native/plugin')`. Inserisce i polyfill `@formatjs` richiesti all'inizio del file entry. Se non funziona nella tua configurazione, importa i polyfill manualmente: consulta la [documentazione sui polyfill di FormatJS](https://formatjs.github.io/docs/polyfills).
### 4. Crea un loader delle traduzioni
Metro (il bundler di React Native) non supporta gli import dinamici, quindi mappa ogni impostazione regionale al relativo file di traduzione con chiamate `require` statiche.
```ts title="loadTranslations.ts"
const translations: Record = {
es: require('./src/_gt/es.json'),
fr: require('./src/_gt/fr.json'),
ja: require('./src/_gt/ja.json'),
};
export function loadTranslations(locale: string) {
return translations[locale] ?? {};
}
```
La CLI genera questi file quando esegui `npx gt translate`.
### 5. Inizializza General Translation e aggiungi il provider
Chiama [`initializeGT`](/docs/node/reference/functions/initialize-gt) una sola volta nell'entry point della tua app, prima del rendering, quindi racchiudi l'app in `GTProvider`. A differenza dei pacchetti web, `GTProvider` carica internamente le traduzioni, quindi non devi passare una prop `translations` e normalmente non serve passare neanche `locale` — viene rilevata automaticamente. Se però devi forzare un valore diverso, puoi comunque passare facoltativamente la prop `locale`.
```tsx title="app/_layout.tsx"
import { Slot } from 'expo-router';
import { GTProvider, initializeGT } from 'gt-react-native';
import gtConfig from '../gt.config.json';
import { loadTranslations } from '../loadTranslations';
// Inizializza una sola volta, a livello di modulo
initializeGT({
...gtConfig,
loadTranslations,
projectId: process.env.EXPO_PUBLIC_GT_PROJECT_ID,
devApiKey: process.env.EXPO_PUBLIC_GT_DEV_API_KEY,
});
export default function RootLayout() {
return (
);
}
```
```js title="index.js"
import { AppRegistry } from 'react-native';
import { initializeGT } from 'gt-react-native';
import App from './App';
import { name as appName } from './app.json';
import gtConfig from './gt.config.json';
import { loadTranslations } from './loadTranslations';
// Inizializza una sola volta, prima della registrazione dell'app
initializeGT({ ...gtConfig, loadTranslations });
AppRegistry.registerComponent(appName, () => App);
```
```tsx title="App.tsx"
import { GTProvider } from 'gt-react-native';
import Home from './src/Home';
export default function App() {
return (
);
}
```
*Nota: le opzioni `projectId` e `devApiKey` abilitano la traduzione su richiesta durante lo sviluppo. In Expo, esponile con il prefisso `EXPO_PUBLIC_`.*
### 6. Contrassegna il contenuto per la traduzione
Avvolgi il JSX nel componente [``](/docs/react/reference/components/t) per tradurlo in-place. Per stringhe autonome come i valori `placeholder` e `accessibilityLabel`, usa l'hook [`useGT`](/docs/react/reference/hooks/use-gt). Per creare un selettore della lingua, usa l'hook [`useLocaleSelector`](/docs/react/reference/hooks/use-locale-selector) — `gt-react-native` non fornisce un componente di selezione predefinito.
```tsx title="src/Home.tsx"
import { Text, View, Pressable, TextInput } from 'react-native';
import { T, useGT, useLocaleSelector } from 'gt-react-native';
export default function Home() {
const gt = useGT();
const { locales, locale, setLocale } = useLocaleSelector();
return (
{locales.map((l) => (
setLocale(l)}>
{l}
))}
Welcome to my app
);
}
```
`useGT()` restituisce direttamente la funzione di traduzione, quindi usala così: `const gt = useGT();`.
### 7. Genera le traduzioni
Esegui la CLI per tradurre il tuo progetto tramite l'API di traduzione di General Translation.
```bash
npx gt translate
```
Aggiungi il comando allo script di build, così le build di produzione avranno sempre traduzioni aggiornate:
```json title="package.json"
{
"scripts": {
"build": "npx gt translate && "
}
}
```
*Nota: `npx gt translate` richiede un ID progetto e una chiave API di produzione, da impostare come `GT_PROJECT_ID` e `GT_API_KEY` nel tuo ambiente. Esegui `npx gt auth` oppure visita la [Dashboard](/docs/platform/dashboard/get-started) per ottenerli.*
## Next steps
- /docs/react/guides/translating-jsx
- /docs/react/guides/translating-strings
- /docs/react/guides/managing-locales
- /docs/react/guides/formatting-variables