# 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