# react-native: Inicio rápido de React Native URL: https://generaltranslation.com/es/docs/react-native/tutorials/quickstart.mdx --- title: Inicio rápido de React Native description: Agrega varios idiomas a tu aplicación de React Native en menos de 10 minutos --- Al final de esta guía, tu aplicación de React Native mostrará contenido en varios idiomas y contará con un selector de idioma con el que tus usuarios podrán interactuar. **Requisitos previos:** * Una aplicación creada con React Native CLI (no Expo; consulta el [inicio rápido de Expo](/docs/react-native/tutorials/quickstart-expo) para proyectos con Expo) * Node.js 18+ `gt-react-native` sigue siendo experimental y puede que no funcione en todos los proyectos. Avísanos si encuentras algún problema [abriendo un issue en GitHub](https://github.com/generaltranslation/gt/issues). **¿Quieres una configuración automática?** Ejecuta `npx gt@latest` para configurarlo todo con el [Asistente de configuración](/docs/cli/init). Esta guía explica la configuración manual. *** ## Paso 1: Instala los paquetes `gt-react-native` es la biblioteca que gestiona las traducciones en tu aplicación. `gt` es la herramienta CLI que prepara las traducciones para producción. ```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 ``` *** ## Paso 2: Crea un archivo de configuración de traducción Crea un archivo **`gt.config.json`** en la raíz de tu proyecto. Esto indica a la biblioteca qué idiomas admites: ```json title="gt.config.json" { "defaultLocale": "en", "locales": ["es", "fr", "ja"], "files": { "gt": { "output": "content/[locale].json" } } } ``` * **`defaultLocale`** — el idioma en el que está escrita tu aplicación (tu idioma de origen). * **`locales`** — los idiomas a los que quieres traducir. Elige cualquiera de la [lista de configuraciones regionales compatibles](/docs/platform/supported-locales). * **`files.gt.output`** — dónde el CLI guarda los archivos de traducción. `[locale]` se sustituye por cada código de idioma (por ejemplo, `content/es.json`). *** ## Paso 3: Configura los polyfills El runtime de JavaScript de React Native no incluye las APIs de `Intl` que necesita `gt-react-native`. La forma más sencilla de solucionarlo es usar el plugin de Babel incluido. Agrégalo a tu configuración de Babel y haz que `entryPointFilePath` apunte al archivo de entrada de tu app (consulta el campo `"main"` de tu `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'), }, ], ], }; ``` Instala los polyfills de FormatJS e impórtalos al inicio de tu archivo de entrada. Necesitas los polyfills base y datos específicos de la configuración regional para cada idioma que admitas. Consulta [la documentación de polyfills de FormatJS](https://formatjs.github.io/docs/polyfills) para ver la lista completa. Como mínimo, necesitas: ```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'; // Agrega datos de configuración regional para cada idioma: 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'; // ... repite esto para cada configuración regional y polyfill ``` *** ## Paso 4: Crea un cargador de traducciones Metro (el empaquetador de React Native) no admite importaciones dinámicas, así que debes asignar explícitamente cada configuración regional a su archivo de traducción: ```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] ?? {}; } ``` La CLI genera estos archivos cuando ejecutas `npx gt translate`. *** ## Paso 5: Agrega GTProvider a tu aplicación El componente **`GTProvider`** le da acceso a las traducciones a toda tu aplicación. Envuelve tu aplicación en la raíz: ```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 ( {/* El contenido de tu app */} ); } ``` `GTProvider` gestiona el estado de la configuración regional y pone las traducciones a disposición de todos los componentes hijos. La prop `devApiKey` habilita la traducción on-demand durante el desarrollo. *** ## Paso 6: Marca el contenido para su traducción Envuelve cualquier texto que quieras traducir con el componente **``**: ```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. ); } ``` Todo lo que está dentro de `` se traduce como una sola unidad. *** ## Paso 7: Añade un selector de idioma Usa el hook **`useLocaleSelector`** para crear un selector de idioma. A diferencia de `gt-react`, `gt-react-native` no exporta un componente `` ya preparado; debes crear tu propia interfaz con el 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` devuelve las configuraciones regionales disponibles, la configuración regional actual y una función de actualización, lo que te da control total sobre la interfaz de usuario. *** ## Paso 8: Configura las variables de entorno (opcional) Para ver las traducciones durante el desarrollo, necesitas claves de API de General Translation. Estas habilitan la **traducción on-demand**: tu app traduce el contenido en tiempo real mientras desarrollas. Crea un archivo **`.env`**: ```bash title=".env" GT_API_KEY="your-api-key" GT_PROJECT_ID="your-project-id" ``` Obtén tus claves gratis en [dash.generaltranslation.com](https://dash.generaltranslation.com/signup) o ejecuta: ```bash npx gt auth ``` Para desarrollo, usa una clave que empiece por `gtx-dev-`. Las claves de producción (`gtx-api-`) son solo para CI/CD. Nunca expongas claves de API de producción en el bundle de tu app ni las subas al control de versiones. Sí. Sin claves de API, `gt-react-native` funciona como una biblioteca de i18n estándar. No tendrás traducción on-demand durante el desarrollo, pero aun así puedes: * Proporcionar manualmente tus propios archivos de traducción * Usar todos los componentes (``, ``, `LocaleSelector`, etc.) * Ejecutar `npx gt generate` para crear plantillas de archivos de traducción y luego traducirlas tú mismo *** ## Paso 9: Comprueba cómo funciona Compila y ejecuta tu aplicación: ```bash npx react-native run-ios # o npx react-native run-android ``` Usa el selector de idioma para cambiar de idioma. Deberías ver el contenido traducido. En desarrollo, las traducciones se realizan on-demand; es posible que veas un breve estado de carga la primera vez que cambies a un idioma nuevo. En producción, las traducciones se generan con antelación y se cargan al instante. *** ## Paso 10: Traduce cadenas (no solo JSX) Para cadenas de texto, como atributos `placeholder` o valores de `accessibilityLabel`, usa el **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 ( ); } ``` *** ## Paso 11: Despliega en producción En producción, las traducciones se generan de antemano en tiempo de construcción (sin llamadas a la API en tiempo real). Agrega el comando translate a tu script de compilación: ```json title="package.json" { "scripts": { "build": "npx gt translate && " } } ``` Configura las variables de entorno de **producción** en tu CI/CD: ```bash GT_PROJECT_ID=your-project-id GT_API_KEY=gtx-api-your-production-key ``` Las claves de producción empiezan por `gtx-api-` (no `gtx-dev-`). Obtén una en [dash.generaltranslation.com](https://dash.generaltranslation.com). Nunca expongas claves de producción en el bundle de tu app. Eso es todo: tu app ahora es multilingüe. 🎉 *** ## Solución de problemas ``` ERROR [Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'GtReactNative' could not be found.] ``` Esto significa que el módulo nativo no se ha enlazado. Ejecuta `cd ios && pod install` y vuelve a compilar la aplicación. ``` Error: You are using invalid locale codes in your configuration. ``` Normalmente, esto significa que los polyfills no están configurados correctamente. Asegúrate de que el plugin de Babel esté configurado (o de importar manualmente los polyfills) y borra la caché de Metro: ```bash npx react-native start --reset-cache ``` Esto es normal. En desarrollo, las traducciones se hacen on-demand (tu contenido se traduce en tiempo real a través de la API). Esta demora **no existe en producción**: todas las traducciones se generan previamente con `npx gt translate`. El texto ambiguo puede dar lugar a traducciones inexactas. Por ejemplo, "apple" podría referirse a la fruta o a la empresa. Agrega una prop `context` para ayudar: ```jsx Apple ``` Tanto `` como `useGT()` admiten la opción `context`. *** ## Próximos pasos * [**Guía del componente ``**](/docs/react-native/guides/t) — Aprende sobre variables, plurales y patrones de traducción avanzados * [**Guía de traducción de cadenas**](/docs/react-native/guides/strings) — Profundiza en `useGT` * [**Componentes de variable**](/docs/react-native/guides/variables) — Maneja contenido dinámico con ``, ``, `` y `` * [**Despliegue en producción**](/docs/react-native/tutorials/quickdeploy) — Configuración de CI/CD, almacenamiento en caché y optimización del rendimiento