# gt-react: General Translation React SDK: Inicio rápido de React URL: https://generaltranslation.com/es/docs/react.mdx --- title: Inicio rápido de React description: Añade varios idiomas a tu aplicación React en menos de 10 minutos --- Al final de esta guía, tu aplicación React mostrará contenido en varios idiomas e incluirá un selector de idioma que tus usuarios podrán usar. **Requisitos previos:** * Una aplicación React (Vite, Create React App o similar) * Node.js 18+ **¿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` es la biblioteca que habilita las traducciones en tu aplicación. `gt` es la herramienta de línea de comandos que prepara las traducciones para producción. ```bash npm i gt-react npm i -D gt ``` ```bash yarn add gt-react yarn add --dev gt ``` ```bash bun add gt-react bun add --dev gt ``` ```bash pnpm add gt-react pnpm add --save-dev gt ``` *** ## 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 le indica a la biblioteca qué idiomas admites: ```json title="gt.config.json" { "defaultLocale": "en", "locales": ["es", "fr", "ja"], "files": { "gt": { "output": "public/_gt/[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 admitidas](/docs/platform/supported-locales). * **`files`** — indica a la CLI dónde guardar los archivos de traducción. La ruta de `output` debe coincidir con la ruta de importación de tu función `loadTranslations` (Paso 3). **¿Usas Vite?** Establece la ruta de salida en `"src/_gt/[locale].json"` en lugar de `"public/_gt/[locale].json"`. Vite importa los archivos de traducción como módulos, por lo que deben estar dentro de `src/` en lugar de `public/`. *** ## Paso 3: Crea un cargador de traducciones `gt-react` se ejecuta por completo en el cliente, por lo que necesita una función para cargar los archivos de traducción en runtime. Crea un archivo `loadTranslations`: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { try { const translations = await import(`../public/_gt/${locale}.json`); return translations.default; } catch (error) { console.warn(`No translations found for ${locale}`); return {}; } } ``` Esta función carga archivos JSON de traducción desde tu directorio `public/_gt/`. La CLI genera estos archivos cuando ejecutas `npx gt translate`. Como los archivos de traducción de Vite están en `src/_gt/` (consulta el Paso 2), actualiza la ruta de importación: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { try { const translations = await import(`./_gt/${locale}.json`); return translations.default; } catch (error) { console.warn(`No translations found for ${locale}`); return {}; } } ``` La configuración de webpack de CRA bloquea las importaciones dinámicas con `import()` fuera de `src/`. Usa `fetch()` en su lugar: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { try { const response = await fetch(`${process.env.PUBLIC_URL}/_gt/${locale}.json`); if (!response.ok) throw new Error('Not found'); return await response.json(); } catch (error) { console.warn(`No translations found for ${locale}`); return {}; } } ``` *** ## Paso 4: 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="src/App.tsx" import { GTProvider } from 'gt-react'; import gtConfig from '../gt.config.json'; import loadTranslations from './loadTranslations'; export default function App() { return ( {/* El contenido de tu aplicación */} ); } ``` `GTProvider` recibe tu configuración y el cargador de traducciones como props. Administra el estado de la configuración regional y pone las traducciones a disposición de todos los componentes hijos. CRA restringe las importaciones a archivos dentro de `src/`, por lo que `import gtConfig from '../gt.config.json'` fallará. Puedes copiar `gt.config.json` en `src/` o incluir la configuración directamente en línea: ```tsx title="src/App.tsx" import { GTProvider } from 'gt-react'; import loadTranslations from './loadTranslations'; export default function App() { return ( {/* El contenido de tu aplicación */} ); } ``` *** ## Paso 5: Marca el contenido para traducir Ahora, envuelve cualquier texto que quieras traducir con el componente **``**. `` significa "traducir": ```tsx title="src/components/Welcome.tsx" import { T } from 'gt-react'; export default function Welcome() { return (

Welcome to my app

This content will be translated automatically.

); } ``` Puedes envolver dentro de `` tanto o tan poco JSX como quieras. Todo lo que haya dentro —texto, elementos anidados e incluso el formato— se traduce como una sola unidad. *** ## Paso 6: Agrega un selector de idioma Añade un **``** para que los usuarios puedan cambiar de idioma: ```tsx title="src/components/Welcome.tsx" import { T, LocaleSelector } from 'gt-react'; export default function Welcome() { return (

Welcome to my app

This content will be translated automatically.

); } ``` `LocaleSelector` muestra un menú desplegable con los idiomas de tu `gt.config.json`. *** ## Paso 7: Configura las variables de entorno (opcional) Para ver traducciones durante el desarrollo, necesitas claves de API de General Translation. Estas habilitan la **traducción bajo demanda**: tu aplicación traduce el contenido en tiempo real mientras desarrollas. Crea un archivo **`.env.local`** con el prefijo correcto para tu bundler: ```bash title=".env.local" VITE_GT_API_KEY="your-dev-api-key" VITE_GT_PROJECT_ID="your-project-id" ``` ```bash title=".env.local" REACT_APP_GT_API_KEY="your-dev-api-key" REACT_APP_GT_PROJECT_ID="your-project-id" ``` Obtén tus claves gratuitas 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. Los empaquetadores del lado del cliente, como Vite y CRA, requieren que las variables de entorno usen prefijos específicos (`VITE_` o `REACT_APP_`) para que se expongan en el navegador. `GT_API_KEY` sin prefijo no estará disponible en tiempo de ejecución. Sí. Sin claves API, `gt-react` funciona como una biblioteca de i18n estándar. No tendrás traducción bajo demanda en 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 8: Comprueba cómo funciona Inicia tu servidor de desarrollo: ```bash npm run dev ``` ```bash yarn dev ``` ```bash bun dev ``` ```bash pnpm dev ``` Abre tu aplicación y usa el menú desplegable de idioma para cambiar de idioma. Deberías ver tu contenido traducido. En desarrollo, las traducciones se realizan bajo demanda, así que 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 de antemano y se cargan al instante. *** ## Paso 9: Traduce cadenas (no solo JSX) Para cadenas, como los atributos `placeholder`, los valores de `aria-label` o el texto `alt`, usa el hook **`useGT`**: ```tsx title="src/components/ContactForm.tsx" import { useGT } from 'gt-react'; export default function ContactForm() { const gt = useGT(); return (
); } ``` *** ## Paso 10: Implementa en producción En producción, las traducciones se generan previamente en tiempo de construcción (sin llamadas a la API en tiempo real). Añade 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 proveedor de alojamiento (Vercel, Netlify, etc.): ```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 por `gtx-dev-`). Obtén una en [dash.generaltranslation.com](https://dash.generaltranslation.com). Nunca expongas públicamente tu `GT_API_KEY`. Eso es todo: tu app ya es multilingüe. 🎉 *** ## Solución de problemas `gt-react` almacena la preferencia de idioma del usuario en una cookie llamada `generaltranslation.locale`. Si antes probaste otro idioma, esta cookie puede anular tu selección. Borra las cookies y vuelve a intentarlo. * [Chrome](https://support.google.com/chrome/answer/95647) * [Firefox](https://support.mozilla.org/en-US/kb/delete-cookies-remove-info-websites-stored) * [Safari](https://support.apple.com/en-mn/guide/safari/sfri11471/16.0/mac/11.0) Esto es normal. En desarrollo, las traducciones se realizan bajo demanda (tu contenido se traduce en tiempo real a través de la API). Este retraso **no existe en producción**: todas las traducciones se generan de antemano 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 dar más contexto: ```jsx Apple ``` Tanto `` como `useGT()` admiten la opción `context`. *** ## Siguientes pasos * [**Guía del componente ``**](/docs/react/guides/t) — Aprende sobre variables, plurales y patrones de traducción avanzados * [**Guía de traducción de cadenas**](/docs/react/guides/strings) — Profundiza en `useGT` * [**Componentes de variable**](/docs/react/guides/variables) — Maneja contenido dinámico con ``, ``, `` y `` * [**Pluralización**](/docs/react/api/components/plural) — Maneja formas plurales con el componente `` * [**Despliegue a producción**](/docs/react/tutorials/quickdeploy) — Configuración de CI/CD, caché y optimización del rendimiento * [**Cadenas compartidas**](/docs/react/guides/shared-strings) — Traduce texto en arrays, objetos de configuración y datos compartidos con `msg()`