# General Translation React SDKs (gt-react, gt-next, gt-react-native): Inicio rápido de Next.js App Router URL: https://generaltranslation.com/es/docs/react/nextjs-quickstart.mdx --- title: Inicio rápido de Next.js App Router description: Añade varios idiomas a una aplicación de Next.js App Router con General Translation en menos de 10 minutos. related: links: - /docs/react/guides/translating-jsx - /docs/react/guides/translating-strings - /docs/react/guides/managing-locales - /docs/react/guides/formatting-variables --- Al final de esta guía, tu aplicación de Next.js mostrará contenido en varios idiomas, con un selector de idioma con el que tus usuarios podrán interactuar. **Requisitos previos:** * Una aplicación de Next.js que use **App Router** (Next.js 13+) * Node.js 18+ **Consejo:** Ejecuta `npx gt@latest` para configurar todo con el [Asistente de configuración](/docs/cli/quickstart). Esta guía explica la configuración manual. **Nota:** Si usas Pages Router, sigue el [Inicio rápido de Next.js Pages Router](/docs/react/nextjs-pages-router-quickstart). ## Inicio rápido [#quickstart] ### 1. Instala los paquetes `gt-next` es la biblioteca que impulsa las traducciones de tu aplicación. `gt` es la herramienta de CLI que prepara las traducciones para Production. ```bash npm i gt-next npm i -D gt ``` ```bash yarn add gt-next yarn add --dev gt ``` ```bash bun add gt-next bun add --dev gt ``` ```bash pnpm add gt-next pnpm add --save-dev gt ``` ### 2. Configura la configuración de Next.js `gt-next` usa un plugin de Next.js llamado **`withGTConfig`** para configurar la internacionalización en tiempo de compilación. Envuelve tu configuración actual de Next.js con él. En este fragmento y en los siguientes, las líneas verdes se añaden y las rojas se eliminan; conserva cualquier opción que tu configuración ya tenga: ```ts title="next.config.ts" import { withGTConfig } from 'gt-next/config'; // [!code ++] const nextConfig = {}; export default nextConfig; // [!code --] export default withGTConfig(nextConfig); // [!code ++] ``` Este complemento lee tu configuración de traducción y se encarga de conectar todo internamente. No necesitas hacer ningún otro cambio en tu configuración de Next.js. ### 3. 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 compatibles](/docs/platform/dashboard/reference/supported-locales). * **`files.gt.output`** — donde la CLI guarda los archivos de traducción. `[locale]` se sustituye por cada código de idioma (por ejemplo, `public/_gt/es.json`). Añade `public/_gt/` a tu **`.gitignore`** — estos archivos se generan, no se escriben a mano: ```txt title=".gitignore" public/_gt/ ``` ### 4. Añade una función de carga para traducciones locales Crea un archivo **[`loadTranslations`](/docs/react/reference/functions/load-translations)** en tu directorio `src/` (o en la raíz del proyecto). Esto le indica a `gt-next` cómo cargar los archivos de traducción generados por el CLI: ```ts title="src/loadTranslations.ts" export default async function loadTranslations(locale: string) { const translations = await import(`../public/_gt/${locale}.json`); return translations.default; } ``` **Advertencia:** Estos archivos de traducción no existen hasta que los crees, por lo que la primera ejecución de `npm run dev` no compila y la página devuelve un HTTP 500. Ejecuta [`npx gt generate`](/docs/cli/reference/commands/generate) (no se necesita una clave de API) o [`npx gt translate`](/docs/cli/reference/commands/translate) (con credenciales), o añade archivos vacíos `{}` en `public/_gt/[locale].json`. `withGTConfig` detecta automáticamente un archivo `loadTranslations.[js|ts]` en tu directorio `src/` o en la raíz del proyecto; no requiere configuración adicional. **Nota:** Las traducciones locales se empaquetan con tu app, por lo que se cargan al instante sin depender de servicios externos. Consulta [Almacenar traducciones](/docs/react/guides/storing-translations) para ver más detalles y sus implicaciones. ### 5. Agrega `GTProvider` a tu layout El componente **[`GTProvider`](/docs/react/reference/components/gt-provider)** le da a toda tu app acceso a las traducciones. Debe envolver tu app en el nivel del layout raíz. Mantén el resto de tu layout existente (fuentes, metadatos, estilos) tal como está: ```tsx title="app/layout.tsx" import { GTProvider, useLocale } from 'gt-next'; // [!code ++] export default function RootLayout({ children }: { children: React.ReactNode }) { const locale = useLocale(); // [!code ++] return ( {/* [!code --] */} {/* [!code ++] */} {/* [!code --] */} {children} {/* [!code ++:3] */} {children} ); } ``` ### 6. Marcar el contenido para traducir Ahora, envuelve cualquier texto que quieras traducir con el componente **[``](/docs/react/reference/components/t)**. [``](/docs/react/reference/components/t) significa "traducir": ```tsx title="app/page.tsx" import { T } from 'gt-next'; // [!code ++] export default function Home() { return (
{/* [!code ++] */}

Welcome to my app

This content will be translated automatically.

{/* [!code ++] */}
); } ``` Puedes envolver dentro de [``](/docs/react/reference/components/t) 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. ### 7. Agrega un selector de idioma Inserta un **[``](/docs/react/reference/components/locale-selector)** para que los usuarios puedan cambiar de idioma: ```tsx title="app/page.tsx" import { T } from 'gt-next'; // [!code --] import { T, LocaleSelector } from 'gt-next'; // [!code ++] export default function Home() { return (
{/* [!code ++] */}

Welcome to my app

This content will be translated automatically.

); } ``` [`LocaleSelector`](/docs/react/reference/components/locale-selector) muestra un menú desplegable con los idiomas definidos en tu `gt.config.json`. ### 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.local`**: ```bash title=".env.local" 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/en-US/signin) o ejecuta: ```bash npx gt auth ``` **Advertencia:** Para desarrollo, usa una clave que empiece por `gtx-dev-`. Las claves de producción (`gtx-api-`) son solo para CI/CD. Nunca expongas `GT_API_KEY` en el navegador ni la subas al control de versiones. Sí. Sin claves de API, `gt-next` funciona como una biblioteca de i18n estándar. No tendrás traducción on-demand en desarrollo, pero aun así puedes: * Proporcionar manualmente tus propios archivos de traducción * Usar todos los componentes ([``](/docs/react/reference/components/t), [``](/docs/react/reference/components/var), [`LocaleSelector`](/docs/react/reference/components/locale-selector), etc.) * Ejecutar [`npx gt generate`](/docs/cli/reference/commands/generate) para crear plantillas de archivos de traducción y luego traducirlas tú mismo ### 9. Comprueba que funciona Inicia tu servidor de desarrollo: ```bash npm run dev ``` ```bash yarn dev ``` ```bash bun dev ``` ```bash pnpm dev ``` Abre [http://localhost:3000](http://localhost:3000) y usa el menú desplegable de idioma para cambiar de idioma. Deberías ver tu contenido traducido. **Nota:** En desarrollo, las traducciones se realizan on-demand, así que es posible que veas un breve estado de carga la primera vez que cambies a otro idioma. En producción, las traducciones se generan previamente y se cargan al instante. ### 10. Traduce cadenas Para cadenas de texto simples —como los atributos `placeholder`, los valores `aria-label` o el texto `alt`— usa el hook **[`useGT`](/docs/react/reference/hooks/use-gt)**. Funciona en componentes síncronos, tanto de servidor como de cliente: ```tsx title="app/contact/page.tsx" import { useGT } from 'gt-next'; export default function ContactPage() { const gt = useGT(); return (
); } ``` Los componentes asíncronos no pueden usar hooks. En su lugar, importa [`getGT`](/docs/react/nextjs/reference/functions/get-gt) de `gt-next/server`: ```tsx import { getGT } from 'gt-next/server'; export default async function Page() { const gt = await getGT(); return

{gt('Hello')}

; } ```
### 11. Despliega en producción En producción, las traducciones se pregeneran durante la compilació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 && next build" } } ``` 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 ``` **Advertencia:** Las claves de producción empiezan por `gtx-api-` (no `gtx-dev-`). Consigue una en [dash.generaltranslation.com](https://dash.generaltranslation.com). No le pongas nunca el prefijo `NEXT_PUBLIC_`. Eso es todo: tu aplicación ya es multilingüe. 🎉 ## Solución de problemas [#troubleshooting] `gt-next` guarda la preferencia de idioma del usuario en una cookie llamada `generaltranslation.locale`. Si antes probaste con 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 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 pregeneran con [`npx gt translate`](/docs/cli/reference/commands/translate). Un texto ambiguo puede dar lugar a traducciones imprecisas. Por ejemplo, "apple" puede referirse a la fruta o a la empresa. Agrega una prop `context` para dar más contexto: ```jsx Apple ``` Tanto [``](/docs/react/reference/components/t), [`useGT()`](/docs/react/reference/hooks/use-gt) y [`getGT()`](/docs/react/nextjs/reference/functions/get-gt) admiten la opción `context`. ## Next steps - /docs/react/guides/translating-jsx - /docs/react/guides/translating-strings - /docs/react/guides/managing-locales - /docs/react/guides/formatting-variables