# General Translation Knowledge Base: General Translation vs. i18next, react-intl y next-intl: ¿qué biblioteca de i18n deberías usar?
URL: https://generaltranslation.com/es/kb/general-translation-vs-i18n-libraries.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Las bibliotecas de código abierto como i18next, react-intl y next-intl no traducen nada. Muestran las traducciones que tú proporcionas en un archivo de catálogo para cada idioma, escritas por ti, por tus traductores o por un servicio externo. Las bibliotecas de General Translation también son de código abierto y cumplen la misma función, pero además General Translation se encarga de traducir, usando tu código como contexto.
Category: Internacionalización
Last updated: 2026-10-16
Authors: General Translation Team
Published: 2026-10-16

Una biblioteca de internacionalización (i18n) cumple dos funciones mientras tu aplicación se ejecuta: elige el mensaje correspondiente a la configuración regional del usuario y da formato a los plurales, las fechas y los números según esa configuración regional. Las bibliotecas de código abierto como i18next, react-intl, next-intl, Lingui y vue-i18n se encargan de ambas cosas, pero ninguna traduce tu contenido. Ese trabajo queda en tus manos, antes de que la aplicación se ejecute: llevar cada cadena a un archivo de catálogo, ya sea mediante claves o extrayendo mensajes inline, conseguir que se traduzcan todos los catálogos y mantenerlos actualizados a medida que cambia la UI. Las bibliotecas de General Translation cumplen las mismas funciones en tiempo de ejecución, y además General Translation se encarga de traducir: los textos permanecen inline en tus componentes y las traducciones se generan como un paso más de la compilación.

## Lo que las bibliotecas consolidadas hacen bien

Todas estas bibliotecas son maduras, gratuitas y de uso generalizado, y cada una tiene un punto fuerte distinto:

* **i18next** es la más descargada. Funciona en cualquier entorno de JavaScript, y el `i18next-cli` oficial extrae las claves de tu código y genera tipos de TypeScript para ellas.
* **react-intl** (FormatJS) se basa en el formato de mensajes ICU, la sintaxis estándar para plurales y selecciones. Su documentación recomienda escribir cada `defaultMessage` inline junto con una `description` para los traductores y, después, reunirlos en un catálogo con `formatjs extract`.
* **next-intl** está pensada para el App Router de Next.js. Sus traducciones funcionan en Componentes de servidor, los mensajes que solo usan los Componentes de servidor pueden quedarse fuera del cliente y las claves de los mensajes admiten comprobación de tipos. Su API de mensajes inline, incorporada en la versión 4.5, sigue marcada como experimental.
* **Lingui** mantiene el texto de origen inline mediante macros como `<Trans>`, genera por ti los ID de los mensajes y extrae los mensajes a catálogos PO.
* **vue-i18n** es el plugin de i18n para Vue 3, con mensajes en JSON, YAML o bloques `<i18n>` dentro de componentes de un solo archivo.

Todas ellas guardan las traducciones en formatos de catálogo, como JSON y PO, con los que ya trabajan los traductores y los sistemas de gestión de traducciones (TMS).

## Lo que queda en tus manos

Ninguna de estas bibliotecas traduce nada. Las traducciones las aportas tú, tus traductores o un servicio independiente, como Locize, del equipo de i18next, o un TMS como Crowdin. Aquí tienes un pequeño componente de bandeja de entrada con react-i18next:

```json title="locales/en/translation.json"
{
  "inbox": {
    "title": "Inbox",
    "unread_one": "You have {{count}} unread message.",
    "unread_other": "You have {{count}} unread messages."
  }
}
```

```tsx title="Inbox.tsx"
import { useTranslation } from 'react-i18next';

export function Inbox({ count }: { count: number }) {
  const { t } = useTranslation();
  return (
    <section>
      <h1>{t('inbox.title')}</h1>
      <p>{t('inbox.unread', { count })}</p>
    </section>
  );
}
```

Además, cada uno de los demás idiomas necesita su propio archivo, como `locales/es/translation.json`, escrito a mano o enviado a traducir. Cada archivo debe incluir también las formas plurales de su idioma como claves independientes: el japonés usa una, el polaco cuatro y el árabe seis (`_zero`, `_one`, `_two`, `_few`, `_many` y `_other`). Si se añade una cadena al componente, faltará en todos los demás archivos hasta que alguien la agregue, y quien traduce el catálogo solo ve `inbox.unread_other` y una frase, no la pantalla en la que aparece.

## General Translation hace lo mismo y, además, genera las traducciones

Las bibliotecas de General Translation hacen el mismo trabajo que i18next, react-intl y next-intl. Eligen los mensajes adecuados para cada configuración regional, aplican sus reglas de plural y dan formato a números, monedas y fechas con [`<Num>`](/docs/react/reference/components/num), [`<Currency>`](/docs/react/reference/components/currency) y [`<DateTime>`](/docs/react/reference/components/datetime). Gestionan variables con formato ICU en cadenas de [`useGT`](/docs/react/reference/hooks/use-gt), diccionarios basados en claves mediante [`useTranslations`](/docs/react/reference/hooks/use-translations) para los equipos que prefieren trabajar con claves y, en `gt-next`, una URL para cada configuración regional. Pero General Translation va más allá que las demás bibliotecas: genera las traducciones.

Esta es la misma bandeja de entrada con `gt-react`. El texto se queda en el componente, [`<T>`](/docs/react/reference/components/t) marca el JSX que hay que traducir y [`<Plural>`](/docs/react/reference/components/plural) contiene las formas en inglés:

```tsx title="Inbox.tsx"
import { T, Plural, Num } from 'gt-react';

export function Inbox({ count }: { count: number }) {
  return (
    <T>
      <section>
        <h1>Inbox</h1>
        <Plural
          n={count}
          one={<p>You have <Num>{count}</Num> unread message.</p>}
          other={<p>You have <Num>{count}</Num> unread messages.</p>}
        />
      </section>
    </T>
  );
}
```

Al ejecutar [`npx gt translate`](/docs/cli/reference/commands/translate) antes de la compilación, cada bloque [`<T>`](/docs/react/reference/components/t) se envía, junto con su estructura de elementos, a la API de General Translation, y se genera una traducción para cada configuración regional de destino. Tú escribes las formas plurales que usa el inglés, y la traducción genera las formas que necesita cada idioma de destino, como `few` y `many` en polaco. Después, [`<Plural>`](/docs/react/reference/components/plural) elige una rama traducida según las reglas de plural de la configuración regional del lector. [`<Num>`](/docs/react/reference/components/num) da formato al número según la configuración regional del lector durante el renderizado, y un valor envuelto en [`<Var>`](/docs/react/reference/components/var) nunca se envía a la API. Si editas la oración, la siguiente ejecución la vuelve a traducir; si eliminas el componente, sus traducciones desaparecen con él.

Las bibliotecas de General Translation abarcan Next.js (`gt-next`), React (`gt-react`), Vue 3 (`gt-vue`) y Node.js (`gt-node`), además de bibliotecas experimentales para React Native, TanStack Start y los frameworks de Python Flask y FastAPI. Tienen licencia MIT y funcionan sin una cuenta de General Translation: cargan traducciones desde cualquier origen, y [`gt generate`](/docs/cli/reference/commands/generate) genera archivos de plantilla para los equipos que traducen a mano. `gt-react` y `gt-next` no dependen de ninguna otra biblioteca de i18n, ya que el análisis y el formato de mensajes ICU se realizan con paquetes propios de General Translation. De forma predeterminada, las traducciones se incluyen como archivos en tu compilación, aunque también pueden cargarse desde la CDN de General Translation.

## Comparativa de las bibliotecas

| Biblioteca                                                        | Cómo escribes el texto                                                                                                      | ¿Traduce tu contenido? | De dónde provienen las traducciones                                                                                               | Plurales                                                                                                                            |
| ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| [i18next](/kb/general-translation-vs-i18next) con `react-i18next` | Claves en un archivo JSON por configuración regional                                                                        | No                     | Tú, traductores o un servicio como Locize                                                                                         | Una clave por forma plural                                                                                                          |
| [`react-intl`](/kb/general-translation-vs-react-intl) (FormatJS)  | Texto `defaultMessage` inline, extraído a un catálogo JSON                                                                  | No                     | Tú, traductores o un TMS                                                                                                          | Formato de mensajes ICU                                                                                                             |
| `next-intl`                                                       | Claves en un archivo JSON por configuración regional                                                                        | No                     | Tú, traductores o un TMS como Crowdin                                                                                             | Formato de mensajes ICU                                                                                                             |
| [Lingui](/kb/general-translation-vs-lingui)                       | Macros inline, extraídas a catálogos PO                                                                                     | No                     | Tú, traductores o un TMS como Crowdin                                                                                             | Formato de mensajes ICU                                                                                                             |
| [`vue-i18n`](/kb/general-translation-vs-vue-i18n)                 | Claves en objetos de mensajes por configuración regional                                                                    | No                     | Tú, traductores o un TMS                                                                                                          | Formas separadas por una barra vertical; la versión 11 necesita una regla personalizada para idiomas como el polaco                 |
| General Translation (`gt-react`, `gt-next`, `gt-vue`)             | JSX dentro de [`<T>`](/docs/react/reference/components/t), o cadenas mediante [`useGT`](/docs/react/reference/hooks/use-gt) | Sí                     | Generadas por [`npx gt translate`](/docs/cli/reference/commands/translate) con el contexto de tu código, o escritas por tu equipo | Ramas de [`<Plural>`](/docs/react/reference/components/plural); la traducción genera las formas que necesita cada idioma de destino |

Quédate con i18next, react-intl, next-intl, Lingui o vue-i18n si tus catálogos y tu proceso de traducción ya funcionan, si los traductores o un TMS trabajan con archivos de catálogo, o si tu framework no es compatible con las bibliotecas de General Translation. Usa las bibliotecas de General Translation si quieres que el texto siga siendo legible en tus componentes, que las traducciones se generen con el contexto de tu código y que todos los idiomas estén al día con cada compilación, sin tener que esperar a una ronda de traducción.

## Conserva tu biblioteca o migra ruta por ruta

Cambiar de biblioteca es opcional. La CLI de `gt` detecta `next-intl` o `i18next` en tu `package.json` y traduce sus archivos JSON sin alterar su sintaxis de mensajes. También funciona con proyectos de `react-i18next` y `next-i18next` siempre que `i18next` sea una dependencia directa. Configura `gt.config.json` para que apunte a tus catálogos:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["es", "fr", "ja"],
  "files": {
    "json": {
      "include": ["locales/[locale]/*.json"]
    }
  }
}
```

Para darle a una clave el contexto que su texto no puede transmitir, agrega un archivo complementario, como `locales/en/translation.metadata.json`, con una entrada `context` o `maxChars` para esa clave. (Consulta [Metadatos asociados a claves](/docs/cli/reference/keyed-metadata) y [Generar traducciones](/docs/cli/guides/generating-translations)).

Para migrar a [`<T>`](/docs/react/reference/components/t), sigue la guía [Migrar bibliotecas de i18n](/docs/react/guides/migrating-i18n-libraries). En ella se describen tres opciones: reemplazar las búsquedas por clave con texto inline, conservar tus diccionarios y llamar a [`useTranslations`](/docs/react/reference/hooks/use-translations), o usar ambas bibliotecas a la vez mientras migras una ruta tras otra.

Los mejores equipos de desarrollo del mundo confían en General Translation, como los de Cursor, Ramp, Profound, Cognition, Sierra y ClickHouse. Para probarlo en tu aplicación, empieza por el [Inicio rápido de Next.js](/docs/react/nextjs-quickstart), el [Quickstart de React](/docs/react/react-quickstart) o el [Inicio rápido de Vue](/docs/vue/quickstart).

## Conclusiones clave

* i18next, react-intl, next-intl y otras bibliotecas de i18n de código abierto no traducen nada. Se limitan a renderizar y dar formato a las traducciones que tú mismo generas y mantienes al día.
* Las bibliotecas de General Translation hacen el mismo trabajo de renderizado y formato, y también son de código abierto con licencia MIT; pero, además, General Translation se encarga de la traducción a partir del texto escrito inline en [`<T>`](/docs/react/reference/components/t), así que no hay claves ni catálogos que mantener sincronizados.
* Puedes seguir usando i18next o next-intl y recurrir a la CLI de `gt` para traducir sus archivos JSON, o bien migrar ruta por ruta.

## Related questions

- [¿Por qué usar General Translation en lugar de un TMS (Smartling, Lokalise, Phrase, Crowdin o Transifex)?](https://generaltranslation.com/es/kb/general-translation-vs-tms.mdx): Un sistema de gestión de traducciones (TMS) como Smartling, Lokalise, Phrase, Crowdin o Transifex coordina a los traductores, pero los ingenieros siguen teniendo que extraer las cadenas, enviarlas, esperar las traducciones y volver a integrarlas en el producto. General Translation traduce el contenido de tu código junto con su contexto, incluye todos los idiomas en cada lanzamiento y funciona con bibliotecas de código abierto, sin dependencia de proveedor.
- [Alternativas a Google Translate: General Translation vs. Google Translate](https://generaltranslation.com/es/kb/general-translation-vs-google-translate.mdx): Google Translate es una forma rápida de traducir textos puntuales, pero lanzar un producto en otro idioma también exige traducir cada cadena en su contexto, mantener una terminología coherente, gestionar correctamente las variables y los plurales, revisar las traducciones y contar con un proceso de lanzamiento. General Translation entiende el contexto de cada cadena en tu código y automatiza todo el flujo de trabajo de localización, desde el código hasta la revisión y cada lanzamiento.
- [Alternativas a i18next: General Translation vs. i18next](https://generaltranslation.com/es/kb/general-translation-vs-i18next.mdx): Elige General Translation para mantener los textos inline en los componentes de React y generar traducciones a partir de su estructura JSX y del contexto del producto. También puedes seguir usando i18next y recurrir a General Translation para traducir los catálogos existentes. i18next se encarga de renderizar los mensajes y seleccionar los plurales, pero las traducciones las genera un servicio aparte.
- [Alternativas a react-intl: General Translation vs. react-intl](https://generaltranslation.com/es/kb/general-translation-vs-react-intl.mdx): General Translation permite a los equipos de React conservar la sintaxis de mensajes ICU y, además, añade generación de traducciones, terminología compartida y revisión en el panel de control. react-intl ofrece formato y herramientas de catálogos de FormatJS; General Translation, además, genera las traducciones.
- [General Translation vs. vue-i18n: ¿cuál deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-vue-i18n.mdx): General Translation permite a los equipos de Vue escribir el texto de origen directamente en las plantillas y generar traducciones con la CLI. Su plugin gt-vue renderiza ese contenido con formato de plurales y de números adaptado a la configuración regional. Elígelo si quieres dejar de mantener archivos de origen basados en claves; vue-i18n sigue siendo una buena opción para equipos que usan el módulo i18n de Nuxt y un flujo de trabajo de catálogos ya consolidado.

## Previous and next questions

- Previous question: [General Translation vs. i18n-tasks: ¿cuál deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-i18n-tasks.mdx)
- Next question: [General Translation vs. Intlayer: ¿cuál deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-intlayer.mdx)

## Sitemap

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