# General Translation React SDKs (gt-react, gt-next, gt-react-native): Desarrollo con traducción para SPA URL: https://generaltranslation.com/es/docs/react/guides/developing-spa-translations.mdx --- title: Desarrollo con traducción para SPA description: Cómo previsualizar las traducciones de General Translation mientras desarrollas una aplicación React de una sola página. related: links: - /docs/react/guides/storing-translations - /docs/react/guides/configuring - /docs/react/guides/translating-jsx - /docs/react/guides/managing-locales --- Las traducciones de desarrollo te permiten previsualizar el contenido traducido mientras editas tu SPA. Requieren el compilador de GT y una clave de API de desarrollo. **Requisitos previos:** * Una aplicación React de una sola página configurada con la [SPA Quickstart](/docs/react/react-spa-quickstart) * Una clave de API de desarrollo que comience con `gtx-dev-` **Limitación de CommonJS:** La recarga en caliente durante el desarrollo requiere ESM porque el compilador inserta `await` en el nivel superior. No funciona en aplicaciones compiladas como CommonJS. Las traducciones de producción siguen funcionando con el patrón de inicio de CommonJS de la [SPA Quickstart](/docs/react/react-spa-quickstart). ## Configuración [#setup] ### 1. Instala el compilador Instala `@generaltranslation/compiler` como dependencia de desarrollo: ```bash npm i -D @generaltranslation/compiler ``` ```bash yarn add --dev @generaltranslation/compiler ``` ```bash bun add --dev @generaltranslation/compiler ``` ```bash pnpm add --save-dev @generaltranslation/compiler ``` ### 2. Añade el plugin del compilador Activa la recarga en caliente en desarrollo en la config compartida por la CLI y el compilador: ```json title="gt.config.json" { "files": { "gt": { "output": "src/_gt/[locale].json", "parsingFlags": { "devHotReload": true } } } } ``` A continuación, añade el plugin para tu empaquetador. ```ts title="vite.config.ts" import react from '@vitejs/plugin-react'; import { vite as gtCompiler } from '@generaltranslation/compiler'; // [!code highlight] import { defineConfig } from 'vite'; import gtConfig from './gt.config.json'; // [!code highlight] export default defineConfig({ plugins: [react(), gtCompiler({ ...gtConfig })], // [!code highlight] }); ``` Instala `dotenv` como dependencia de desarrollo para que webpack pueda leer `.env` y `.env.local` y, a continuación, añade el plugin del compilador antes que el resto de tus plugins. Usa `DefinePlugin` para exponer al código del navegador solo las credenciales de desarrollo: ```js title="webpack.config.mjs" import { webpack as gtCompiler } from '@generaltranslation/compiler'; import dotenv from 'dotenv'; import webpack from 'webpack'; import gtConfig from './gt.config.json' with { type: 'json' }; dotenv.config({ path: '.env' }); dotenv.config({ path: '.env.local', override: true }); export default (_env, argv) => { const isProduction = (argv.mode ?? 'production') === 'production'; return { // Mantén tu configuración actual de webpack. plugins: [ gtCompiler({ ...gtConfig }), new webpack.DefinePlugin({ 'process.env.GT_PROJECT_ID': JSON.stringify( isProduction ? '' : (process.env.GT_PROJECT_ID ?? '') ), 'process.env.GT_DEV_API_KEY': JSON.stringify( isProduction ? '' : (process.env.GT_DEV_API_KEY ?? '') ), }), ], }; }; ``` Consulta el [ejemplo completo de webpack de `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/webpack-spa) para ver loaders, archivos de traducción locales y la configuración del servidor de desarrollo. Registra el compilador antes que tus otros plugins de Rollup: ```js title="rollup.config.mjs" import { rollup as gtCompiler } from '@generaltranslation/compiler'; export default { input: 'src/index.ts', plugins: [ gtCompiler(), // Tus otros plugins de Rollup ], }; ``` Rollup no puede analizar una importación de traducciones totalmente dinámica. Enumera cada configuración regional con un especificador de importación estático: ```ts title="src/loadTranslations.ts" const translationLoaders = { es: () => import('./_gt/es.json'), fr: () => import('./_gt/fr.json'), }; export default async function loadTranslations(locale: string) { const loader = translationLoaders[locale as keyof typeof translationLoaders]; return loader ? (await loader()).default : {}; } ``` Rollup sin extensiones no proporciona la integración de credenciales de desarrollo mostrada para Vite y webpack. Vuelve a generar los archivos de traducción locales cuando cambie el contenido fuente. Consulta el [ejemplo completo de Rollup de `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/rollup-spa). Añade el adaptador de Rspack a tus plugins: ```js title="rspack.config.mjs" import { rspack as gtCompiler } from '@generaltranslation/compiler'; export default { plugins: [gtCompiler()], }; ``` La traducción de desarrollo también requiere exponer `GT_PROJECT_ID` y `GT_DEV_API_KEY` al código del navegador sin incluir ninguno de los dos valores en los bundles de producción. Añade el adaptador de esbuild al array `plugins`: ```js title="build.mjs" import { build } from 'esbuild'; import { esbuild as gtCompiler } from '@generaltranslation/compiler'; await build({ entryPoints: ['src/index.tsx'], bundle: true, outdir: 'dist', plugins: [gtCompiler()], }); ``` *Nota: El adaptador de esbuild no admite la inyección automática de JSX. Envuelve explícitamente el JSX traducible o usa otro adaptador cuando se requiera `enableAutoJsxInjection`.* Consulta el [ejemplo completo de Vite de `gt-react`](https://github.com/generaltranslation/gt/tree/main/examples/vite-spa) para una configuración completa de Vite. ### 3. Añade credenciales de desarrollo Obtén una clave de API de desarrollo en [dash.generaltranslation.com](https://dash.generaltranslation.com/en-US/signin) o ejecuta: ```bash npx gt auth ``` Luego, agrega el ID de tu proyecto y tu clave de API de desarrollo a `.env.local` y pásalos a tu función de inicialización: ```bash title=".env.local" VITE_GT_PROJECT_ID="your-project-id" VITE_GT_DEV_API_KEY="your-dev-api-key" ``` ```ts await initializeGTSPA({ ...gtConfig, projectId: import.meta.env.VITE_GT_PROJECT_ID, devApiKey: import.meta.env.VITE_GT_DEV_API_KEY, loadTranslations, }); ``` ```bash title=".env.local" GT_PROJECT_ID="your-project-id" GT_DEV_API_KEY="your-dev-api-key" ``` ```ts await initializeGTSPA({ ...gtConfig, projectId: process.env.GT_PROJECT_ID, devApiKey: process.env.GT_DEV_API_KEY, loadTranslations, }); ``` La configuración de webpack anterior reemplaza ambos valores por cadenas vacías en las compilaciones de producción, por lo que las credenciales de desarrollo no se incluyen en el bundle de producción. **Solo para desarrollo:** Usa una clave que comience con `gtx-dev-`. Nunca expongas una clave de producción que comience con `gtx-api-` en código del navegador. ### 4. Empieza a desarrollar Inicia tu servidor de desarrollo y cambia a una configuración regional distinta de la predeterminada. Cuando editas contenido traducible, el compilador registra el cambio y `gt-react` solicita una traducción de desarrollo actualizada. ## Next steps - /docs/react/guides/storing-translations - /docs/react/guides/configuring - /docs/react/guides/translating-jsx - /docs/react/guides/managing-locales