# General Translation React SDKs (gt-react, gt-next): Inicio rápido de App Router de Next.js
URL: https://generaltranslation.com/es/docs/react/nextjs-quickstart.mdx
---
title: Inicio rápido de App Router de Next.js
description: Agrega varios idiomas a una aplicación con App Router de Next.js 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
---
# Inicio rápido de Next.js App Router
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/reference/commands/init). 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:
```ts title="next.config.ts"
import { withGTConfig } from 'gt-next/config';
const nextConfig = {};
export default withGTConfig(nextConfig);
```
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`** 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;
}
```
`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`** le da a toda tu app acceso a las traducciones. Debe envolver tu app en el nivel del layout raíz:
```tsx title="app/layout.tsx"
import { GTProvider, useLocale } from 'gt-next';
export default function RootLayout({ children }: { children: React.ReactNode }) {
const locale = useLocale();
return (
{children}
);
}
```
### 6. Marcar el contenido para traducir
Ahora, envuelve cualquier texto que quieras traducir con el componente **``**. `` significa "traducir":
```tsx title="app/page.tsx"
import { T } from 'gt-next';
export default function Home() {
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.
### 7. Agrega un selector de idioma
Inserta un **``** para que los usuarios puedan cambiar de idioma:
```tsx title="app/page.tsx"
import { T, LocaleSelector } from 'gt-next';
export default function Home() {
return (
Welcome to my app
This content will be translated automatically.
);
}
```
`LocaleSelector` 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 API keys 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/signup) 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 (``, ``, `LocaleSelector`, etc.)
* Ejecutar `npx gt 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`**. 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` 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`.
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 `` como `useGT()` y `getGT()` 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