# node: Inicio rápido con Node.js URL: https://generaltranslation.com/es/docs/node/tutorials/quickstart.mdx --- title: Inicio rápido con Node.js description: Agrega varios idiomas a tu servidor Node.js en menos de 10 minutos --- Al final de esta guía, tu servidor Node.js responderá con contenido traducido según el idioma de la solicitud, usando cadenas en línea o registradas previamente. **Requisitos previos:** * Un servidor Node.js (Express, Fastify o similar) * Node.js 18+ **¿Quieres una configuración automática?** Ejecuta `npx gt@latest` para configurar todo con el [Asistente de configuración](/docs/cli/init). Esta guía explica la configuración manual. *** ## Paso 1: Instala los paquetes `gt-node` es la biblioteca que gestiona las traducciones en tu servidor. `gt` es la herramienta de línea de comandos que prepara las traducciones para producción. ```bash npm i gt-node npm i -D gt ``` ```bash yarn add gt-node yarn add --dev gt ``` ```bash bun add gt-node bun add --dev gt ``` ```bash pnpm add gt-node 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 librería qué idiomas admites: ```json title="gt.config.json" { "defaultLocale": "en", "locales": ["es", "fr", "ja"] } ``` * **`defaultLocale`** — el idioma en el que están escritas las cadenas de tu servidor. * **`locales`** — los idiomas a los que quieres traducir. Elige cualquiera de la [lista de configuraciones regionales compatibles](/docs/platform/supported-locales). *** ## Paso 3: Inicializa General Translation Llama a **`initializeGT`** una sola vez al principio del archivo de entrada de tu servidor, antes de usar cualquier función de traducción: ```js title="server.js" import { initializeGT } from 'gt-node'; initializeGT({ defaultLocale: 'en', locales: ['en', 'es', 'fr', 'ja'], projectId: process.env.GT_PROJECT_ID, }); ``` Esto configura la biblioteca con tus idiomas admitidos y las credenciales del proyecto. *** ## Paso 4: Configura el contexto de configuración regional para cada solicitud Cada solicitud debe saber qué idioma usar. Usa **`withGT`** para envolver los manejadores de solicitud de tus solicitudes: utiliza almacenamiento local asíncrono para que las funciones de traducción tomen automáticamente la configuración regional correcta: ```js title="server.js" import { withGT } from 'gt-node'; app.use((req, res, next) => { const locale = req.headers['accept-language']?.split(',')[0] || 'en'; withGT(locale, () => next()); }); ``` *** ## Paso 5: Traducir cadenas en línea Para traducir cadenas directamente dentro de los manejadores de solicitudes, usa **`getGT`**: ```js title="server.js" import { getGT } from 'gt-node'; app.get('/api/greeting', async (req, res) => { const gt = await getGT(); res.json({ message: gt('Hello, world!'), welcome: gt('Welcome, {name}!', { name: 'Alice' }), }); }); ``` `getGT` devuelve una función de traducción para la configuración regional de la solicitud actual. *** ## Paso 6: Registra previamente las cadenas constantes (opcional) Para las cadenas definidas fuera de los manejadores de solicitud —como mensajes de error, etiquetas de enum o constantes—, usa **`msg`** para registrarlas en el ámbito del módulo y luego **`getMessages`** para resolver las traducciones en runtime: ```js title="messages.js" import { msg } from 'gt-node'; export const GREETING = msg('Hello, world!'); export const WELCOME = msg('Welcome, {name}!'); export const NOT_FOUND = msg('Resource not found.'); ``` ```js title="handler.js" import { getMessages } from 'gt-node'; import { GREETING, WELCOME, NOT_FOUND } from './messages.js'; app.get('/api/status', async (req, res) => { const m = await getMessages(); res.json({ greeting: m(GREETING), welcome: m(WELCOME, { name: 'Alice' }), }); }); app.use(async (req, res) => { const m = await getMessages(); res.status(404).json({ error: m(NOT_FOUND) }); }); ``` Este patrón es útil cuando se usan las mismas cadenas en varios manejadores. *** ## Paso 7: 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 bajo demanda**: tu servidor traduce el contenido en tiempo real mientras desarrollas. Crea un archivo **`.env`**: ```bash title=".env" 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 ejecutando: ```bash npx gt auth ``` Nunca expongas `GT_API_KEY` públicamente ni la subas al control de versiones. Sí. Sin claves de API, `gt-node` funciona como una biblioteca de i18n estándar. No tendrás traducción bajo demanda durante el desarrollo, pero aun así puedes: * Proporcionar manualmente tus propios archivos de traducción * Usar todas las funciones de traducción (`getGT`, `msg`, `getMessages`, etc.) * Ejecutar `npx gt generate` para crear plantillas de archivos de traducción y luego traducirlas tú mismo *** ## Paso 8: Verlo en funcionamiento Inicia tu servidor y pruébalo con distintos encabezados `Accept-Language`: ```bash # Predeterminado (inglés) curl http://localhost:3000/api/greeting # Español curl -H "Accept-Language: es" http://localhost:3000/api/greeting # Francés curl -H "Accept-Language: fr" http://localhost:3000/api/greeting ``` Deberías ver respuestas traducidas para cada idioma. En desarrollo, las traducciones se generan bajo demanda; es posible que notes una breve demora la primera vez que se solicite un idioma nuevo. En producción, las traducciones se generan por adelantado y se cargan al instante. *** ## Paso 9: Ejemplo completo Aquí tienes un servidor Express completo con todas las piezas juntas: ```js title="server.js" import express from 'express'; import { initializeGT, withGT, getGT, msg, getMessages } from 'gt-node'; // Inicializar GT antes que cualquier otra cosa initializeGT({ defaultLocale: 'en', locales: ['en', 'es', 'fr', 'ja'], projectId: process.env.GT_PROJECT_ID, }); // Registrar previamente cadenas constantes const NOT_FOUND = msg('Resource not found.'); const app = express(); // Establecer el contexto de configuración regional para cada solicitud app.use((req, res, next) => { const locale = req.headers['accept-language']?.split(',')[0] || 'en'; withGT(locale, () => next()); }); // Traducción en línea app.get('/api/greeting', async (req, res) => { const gt = await getGT(); res.json({ message: gt('Hello, world!') }); }); // Traducción de mensajes registrados previamente app.use(async (req, res) => { const m = await getMessages(); res.status(404).json({ error: m(NOT_FOUND) }); }); app.listen(3000, () => console.log('Server running on port 3000')); ``` *** ## Paso 10: Despliega a producción En producción, las traducciones se generan de antemano durante la compilació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 tus variables de entorno de **producción** en tu proveedor de alojamiento: ```bash GT_PROJECT_ID=your-project-id GT_API_KEY=gtx-api-your-production-key ``` Nunca expongas públicamente tu `GT_API_KEY`. Eso es todo: tu servidor ya es multilingüe. 🎉 *** ## Solución de problemas Esto es de esperar. En desarrollo, las traducciones se realizan bajo demanda (tu contenido se traduce en tiempo real a través de la API). Esta demora **no existe en producción**: todas las traducciones se generan previamente con `npx gt translate`. Los textos ambiguos pueden dar lugar a traducciones inexactas. Por ejemplo, "apple" podría referirse a la fruta o a la empresa. Añade la opción `$context` para dar más contexto: ```js gt('Apple', { $context: 'the technology company' }); ``` Tanto `getGT()` como `msg()` admiten la opción `$context`. *** ## Siguientes pasos * [**`initializeGT`**](/docs/node/api/initialize-gt) — Opciones de configuración completas * [**`withGT`**](/docs/node/api/with-gt) — Contexto de configuración regional para las solicitudes * [**`getGT`**](/docs/node/api/get-gt) — Traducción de cadenas en línea * [**`msg` & `getMessages`**](/docs/node/api/get-messages) — Traducción de mensajes registrados previamente * [**CLI**](/docs/cli/translate) — Referencia del flujo de trabajo de traducción