# General Translation Knowledge Base: ¿Cómo traduzco una aplicación de Node.js?
URL: https://generaltranslation.com/es/kb/translate-node-app.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Detecta el idioma de cada solicitud, normalmente a partir de su cabecera Accept-Language, y devuelve todas las cadenas en ese idioma. gt-node de General Translation vincula la configuración regional a cada solicitud con withGT y traduce las cadenas con getGT, a partir de las traducciones que npx gt translate --publish genera antes de desplegar.
Category: Internacionalización
Last updated: 2026-10-21
Authors: Kevin Liu, Kevin Wu
Published: 2026-10-21

Traducir una aplicación de Node.js consiste en detectar el idioma de cada solicitud, normalmente a partir de su cabecera `Accept-Language`, y devolver todas las cadenas en ese idioma. Es complicado porque un mismo servidor atiende a muchos usuarios a la vez, así que el idioma no puede ser una configuración global: cada solicitud trae el suyo, y todas las funciones que generan la respuesta necesitan conocerlo. Además, las cadenas con valores requieren reglas gramaticales propias de cada idioma: una cantidad adopta una de 2 formas plurales en inglés y una de 6 en árabe.

## Video

The video is narrated in English, with English captions.

[How do I translate a Node.js app?](https://caxecubb9c64cezv.public.blob.vercel-storage.com/films/kb-translate-node-app.mp4) (48 s)

General Translation lets you translate strings into each request's locale with `gt-node`. Call `initializeGT` once, wrap each request in `withGT`, await `getGT` in a handler, list `server.js` in `gt.config.json`, sign in, and run `npx gt translate`.

## Formas de traducir una aplicación Node.js

| Enfoque                                                                                              | Lo que hace bien                                                                                                                                                                                     | Configuración regional de cada solicitud                                                                            | Lo que queda a tu cargo                                                                                                                                                                                                                   |
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Solo una biblioteca de internacionalización (i18n) ([`i18next`](/kb/general-translation-vs-i18next)) | Tiempo de ejecución maduro para renderizar traducciones y dar formato a valores                                                                                                                      | Un plugin de middleware la detecta                                                                                  | Extraer las cadenas a un archivo JSON de claves por idioma, escribir cada traducción y actualizar todos los archivos cada vez que cambia el texto                                                                                         |
| [`nestjs-i18n`](/kb/general-translation-vs-nestjs-i18n) (NestJS)                                     | Renderiza mensajes a partir de catálogos JSON o YAML por idioma, a través de HTTP, GraphQL, gRPC y WebSockets                                                                                        | Los resolvedores leen la cadena de consulta, una cabecera, una cookie o `Accept-Language`, en el orden que indiques | Escribir el catálogo de cada idioma y mantenerlos todos al día                                                                                                                                                                            |
| Una API de traducción automática en el momento de la solicitud (DeepL, Google Cloud Translation)     | Traduce cualquier texto, incluido el contenido que solo existe en tiempo de ejecución                                                                                                                | Pasas el idioma de destino en cada llamada                                                                          | Latencia y coste en cada solicitud, salvo que almacenes los resultados en caché; coherencia terminológica, plurales y revisión                                                                                                            |
| General Translation (`gt-node` y la CLI `gt`)                                                        | Las cadenas se quedan inline en los manejadores de solicitud, dentro de llamadas a `gt()`, y [`npx gt translate --publish`](/docs/cli/reference/commands/translate) las traduce antes del despliegue | [`withGT`](/docs/node/reference/functions/with-gt) la vincula                                                       | Un ID del proyecto y un `gt.config.json` generados con [`npx gt init`](/docs/cli/reference/commands/init), [`gt login`](/docs/cli/reference/commands/login) o una clave de API, y la CLI integrada en tu paso de compilación o despliegue |

Usa solo `i18next` o `nestjs-i18n` si tu equipo ya mantiene catálogos traducidos. Recurre a una API de traducción automática en el momento de la solicitud únicamente para contenido que solo existe en tiempo de ejecución, como las publicaciones de los usuarios. Usa `gt-node` cuando las cadenas estén en tus manejadores de solicitud y cambien con cada lanzamiento. Si tu API solo devuelve datos y códigos de error, y es un cliente web o móvil el que renderiza todos los mensajes, te basta con una configuración más sencilla: traduce en el cliente.

## Traducir una aplicación Node.js con gt-node

1. Llama a [`initializeGT`](/docs/node/reference/functions/initialize-gt) una sola vez al iniciar la aplicación, con tus configuraciones regionales.

2. Envuelve cada solicitud en [`withGT`](/docs/node/reference/functions/with-gt). Esta función vincula la configuración regional mediante `AsyncLocalStorage`, de modo que cada solicitud concurrente conserva la suya, y [`getRequestLocale`](/docs/node/reference/functions/get-request-locale) la obtiene del encabezado `Accept-Language`.

3. En un manejador de solicitud, llama a [`getGT`](/docs/node/reference/functions/get-gt) para obtener una función `gt()` que acepta mensajes ICU (plurales incluidos) y una opción `$context` para desambiguar palabras:

   ```js title="server.js"
   import express from 'express';
   import { initializeGT, withGT, getRequestLocale, getGT } from 'gt-node';

   initializeGT({ defaultLocale: 'en', locales: ['en', 'es', 'fr'] });
   const app = express();
   app.use((req, res, next) => withGT(getRequestLocale(req), () => next()));

   app.get('/api/greeting', async (req, res) => {
     const gt = await getGT();
     res.json({ message: gt('Hello, {name}!', { name: 'Alice' }) });
   });
   app.listen(3000, () => console.log('Listening on http://localhost:3000'));
   ```

4. Antes de desplegar, habilita la CDN en la configuración del Proyecto y ejecuta [`npx gt translate --publish`](/docs/cli/reference/commands/translate).

En producción, `gt-node` obtiene esas traducciones de la CDN de General Translation para el ID del proyecto definido en `GT_PROJECT_ID`. Si falta alguna traducción, se usa la cadena de origen como alternativa.

## Comparte la terminología con tu aplicación cliente

Si tu cliente web o móvil también usa General Translation, asigna su grupo de contexto (glosario y prompts personalizados) al proyecto del servidor desde **Project &gt; Context** en el panel de control. Así, las nuevas traducciones de las respuestas de la API usarán los mismos términos. Encontrarás todos los pasos en el [Inicio rápido de Node.js](/docs/node/quickstart).

## Related questions

- [¿Cómo traduzco una aplicación de React?](https://generaltranslation.com/es/kb/translate-react-app.mdx): Traducir una aplicación de React significa internacionalizar sus componentes para que se rendericen en el idioma del usuario y, después, traducir cada cadena a todos los idiomas que admitas. gt-react de General Translation traduce JSX en el mismo documento con el componente `<T>`, y npx gt translate genera un archivo por idioma.
- [¿Cómo traduzco una aplicación Vue?](https://generaltranslation.com/es/kb/translate-vue-app.mdx): Traducir una aplicación Vue implica que cada cadena de las plantillas se obtenga mediante una búsqueda según el idioma activo y se traduzca a cada idioma de destino. El plugin gt-vue de General Translation traduce el contenido envuelto en el componente `<T>`, y npx gt translate genera un catálogo por cada idioma de destino.
- [¿Cómo agrego i18n a una aplicación de Next.js con App Router?](https://generaltranslation.com/es/kb/add-i18n-to-nextjs.mdx): Empieza con gt init para configurar General Translation en un proyecto compatible con App Router; luego marca el contenido de origen, genera las traducciones y verifica el cambio de idioma. gt-next mantiene el texto en JSX junto con el contexto de traducción; la CLI, el editor del panel de control y Locadex se encargan de la generación, la revisión y las actualizaciones continuas. Esta guía también muestra la configuración inicial explícita con archivos locales.
- [¿Cómo mantengo las traducciones actualizadas en cada despliegue?](https://generaltranslation.com/es/kb/translations-in-ci.mdx): Ejecuta la traducción como un paso del flujo antes de cada compilación de producción, para que el texto nuevo se publique ya traducido en el mismo despliegue que lo incorpora. La CLI gt de General Translation lo hace con npx gt translate, usando una clave de API del proyecto y el ID del proyecto almacenados como secretos de CI.

## Previous and next questions

- Previous question: [¿Cómo traduzco un sitio de documentación de Mintlify?](https://generaltranslation.com/es/kb/translate-mintlify-docs.mdx)
- Next question: [¿Cómo traduzco una aplicación de React?](https://generaltranslation.com/es/kb/translate-react-app.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/es/kb/sitemap.md) for every article.
