# General Translation Knowledge Base: Alternativas a i18next: General Translation vs. i18next
URL: https://generaltranslation.com/es/kb/general-translation-vs-i18next.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 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.
Category: Internacionalización
Last updated: 2026-10-16
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-16

i18next carga archivos de traducción, elige el mensaje correspondiente al idioma del usuario, resuelve las formas plurales, interpola valores y da formato a números y fechas con `Intl`. Está en npm desde 2012 y, junto con `react-i18next` y `next-i18next`, es una opción habitual para aplicaciones de React y Next.js. Lo que i18next no hace es traducir: cada mensaje en cada idioma lo aportas tú, tus traductores o un servicio como Locize, que [gestionan los creadores de i18next](https://www.i18next.com/). Las bibliotecas de General Translation se encargan del mismo renderizado y, además, General Translation genera las traducciones a partir de los textos de tus componentes.

## Lo que i18next hace bien

* **Adopción.** Es uno de los frameworks de i18n para JavaScript más utilizados.
* **Amplitud.** [Sus bindings abarcan React, Vue, Angular, Svelte y más](https://www.i18next.com/overview/supported-frameworks), y sus plugins cargan archivos por HTTP, detectan el idioma del usuario y permiten pasar los mensajes al formato de mensajes ICU con `i18next-icu`.
* **Compatibilidad completa con plurales y contexto.** Las claves llevan [sufijos de plural de CLDR](https://www.i18next.com/translation-function/plurals) como `_one`, `_few` y `_many`, que se resuelven con `Intl.PluralRules`, además de variantes de contexto como `friend_male`.
* **Herramientas.** La [`i18next-cli`](https://github.com/i18next/i18next-cli) oficial extrae claves, genera tipos de TypeScript y escribe las claves de plural de cada configuración regional. Además, su comando `status` termina con un error cuando una configuración regional tiene claves sin traducir, lo que permite a la CI detectar traducciones pendientes.
* **Componentes de servidor.** [`next-i18next` 16](https://github.com/i18next/next-i18next) añade una función de traducción server-side para el App Router de Next.js.
* **Sin servicio obligatorio.** Los catálogos son archivos JSON simples que te pertenecen, e i18next funciona con cualquier servicio de traducción o sin ninguno.

## Lo que i18next deja en tus manos

Aquí tienes una pequeña bandeja de entrada hecha con react-i18next. Cada cadena tiene una clave, y cada forma plural tiene su propia clave:

```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>
  );
}
```

Todos los demás idiomas necesitan las mismas claves de mensaje, con las formas plurales propias de cada idioma: el polaco necesita `unread_one`, `unread_few`, `unread_many` y `unread_other`. Si un archivo en polaco solo tiene las formas `_one` y `_other`, calcadas del inglés, y tu [idioma de respaldo](https://www.i18next.com/principles/fallback) es el inglés, cantidades como 2 y 5 se mostrarán en inglés:

```text title="Output"
pl, count 1:  Masz 1 nieprzeczytaną wiadomość.
pl, count 2:  You have 2 unread messages.
pl, count 5:  You have 5 unread messages.
pl, count 22: You have 22 unread messages.
```

Al ejecutar `i18next-cli status` en CI, se detectan las formas que faltan. Los servicios de traducción pueden generar el contenido de los catálogos; tu aplicación sigue haciendo referencia a claves como `inbox.unread`, y el flujo de trabajo de extracción y traducción mantiene esos catálogos al día.

## General Translation mantiene el texto inline y genera las traducciones

Las bibliotecas de General Translation hacen el mismo trabajo que i18next: seleccionan los mensajes de cada configuración regional, aplican sus reglas de plural, interpolan variables 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). Además, los equipos que prefieren trabajar con claves pueden seguir usando diccionarios con [`useTranslations`](/docs/react/reference/hooks/use-translations). Pero General Translation va más allá de i18next: genera las traducciones. Esta es la misma bandeja de entrada con `gt-react`:

```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}
          singular={<p>You have <Num>{count}</Num> unread message.</p>}
          plural={<p>You have <Num>{count}</Num> unread messages.</p>}
        />
      </section>
    </T>
  );
}
```

[`npx gt translate`](/docs/cli/reference/commands/translate) envía cada bloque [`<T>`](/docs/react/reference/components/t), junto con su estructura de elementos, a la API de General Translation antes de la compilación y genera una traducción para cada configuración regional de destino. Las ramas de origen genéricas `singular` y `plural` aportan la redacción de las formas que necesita cada idioma de destino. Después, [`<Plural>`](/docs/react/reference/components/plural) selecciona una rama traducida según las reglas de esa configuración regional. Los valores envueltos en [`<Var>`](/docs/react/reference/components/var) nunca se envían a la API.

Cuando editas una frase dentro de [`<T>`](/docs/react/reference/components/t), la siguiente ejecución de traducción la actualiza en cada idioma y reutiliza las traducciones del contenido que no ha cambiado. Los revisores trabajan en el [Editor de Traducciones del panel de control](/docs/platform/dashboard/guides/reviewing-translations), así que editar traducciones no requiere modificar componentes.

Las bibliotecas de JavaScript tienen licencia MIT y funcionan sin cuenta si proporcionas tú las traducciones. Una app configurada para cargar todas las traducciones desde su paquete no hace ninguna llamada a General Translation en tiempo de ejecución. `gt-react` y `gt-next` no dependen de ninguna otra biblioteca de i18n.

Cursor publica su web y su documentación en más de 14 configuraciones regionales con General Translation. (Consulta los [despliegues en producción](https://generaltranslation.com/enterprise)).

## i18next vs. General Translation de un vistazo

| Característica                      | i18next                                                                    | General Translation                                                                                                                                 |
| ----------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cómo escribes el texto              | Claves en archivos JSON por idioma y espacio de nombres                    | JSX dentro de [`<T>`](/docs/react/reference/components/t), cadenas mediante [`useGT`](/docs/react/reference/hooks/use-gt) o diccionarios con claves |
| Traduce tu contenido                | No                                                                         | Sí, con [`npx gt translate`](/docs/cli/reference/commands/translate)                                                                                |
| De dónde provienen las traducciones | De ti, de traductores o de un servicio como Locize                         | Se generan con el contexto de tu código o las escribe tu equipo                                                                                     |
| Formas plurales                     | Una clave por cada forma de CLDR, escrita para cada idioma                 | Ramas de [`<Plural>`](/docs/react/reference/components/plural), traducidas junto con el resto del bloque                                            |
| Contexto de traducción              | Mensajes de origen y contexto que aporta tu flujo de trabajo de traducción | La estructura de los bloques JSX marcados, notas de contexto, y el glosario y los prompts personalizados compartidos                                |
| Frameworks                          | React, Next.js y bindings para Vue, Angular, Svelte y más                  | React, Next.js, Vue, Node.js y [otros SDKs](/docs/overview/get-started)                                                                             |
| Requiere cuenta                     | No                                                                         | No para las bibliotecas; la traducción se realiza a través de un proyecto de General Translation                                                    |

Quédate con i18next si tus catálogos y tu proceso de traducción ya funcionan, si desarrollas sobre un framework que las bibliotecas de General Translation no admiten o si prefieres claves que se mantengan estables aunque cambie el texto. Elige General Translation si quieres el texto inline en tus componentes, traducciones generadas con el contexto de tu código y todos los idiomas al día en cada compilación.

## Conserva i18next y deja que General Translation se encargue de traducir

No tienes que cambiar de biblioteca. La CLI de `gt` detecta `i18next` en tu `package.json` y conserva su sintaxis de interpolación. A continuación se muestra una configuración para traducir al alemán el catálogo de la bandeja de entrada anterior:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["de"],
  "files": {
    "json": {
      "include": ["locales/[locale]/translation.json"]
    }
  }
}
```

El inglés y el alemán usan la misma estructura de claves de plural `_one` y `_other`. Esta configuración genera `locales/de/translation.json` a partir de `locales/en/translation.json`. Agrega contexto por clave, como dónde aparece una cadena, con [metadatos asociados a claves](/docs/cli/reference/keyed-metadata). Ejecuta [`npx gt upload`](/docs/cli/reference/commands/upload) para importar tus textos de origen y las traducciones existentes antes de ejecutar [`npx gt translate`](/docs/cli/reference/commands/translate) para el contenido nuevo.

Si prefieres pasarte a [`<T>`](/docs/react/reference/components/t), sigue la guía [Migrar desde bibliotecas de i18n](/docs/react/guides/migrating-i18n-libraries). Allí se explica cómo reemplazar las búsquedas por clave con texto inline, cómo conservar tus diccionarios con [`useTranslations`](/docs/react/reference/hooks/use-translations) y cómo ejecutar ambas bibliotecas a la vez mientras migras ruta por ruta. (Consulta [General Translation vs. i18next, react-intl y next-intl](/kb/general-translation-vs-i18n-libraries) para ver cómo se compara i18next con las demás).

## ¿Cómo gestiono el polaco y otros idiomas con muchas formas plurales en i18next?

Cada idioma necesita una clave por cada forma plural de CLDR que utilice, como `_one`, `_few`, `_many` y `_other` en el caso del polaco. Ejecuta `i18next-cli status` en CI para detectar las formas que falten. Con la redacción inline de General Translation, basta con escribir las ramas `singular` y `plural` que se muestran arriba, y el servicio de traducción genera las formas del idioma de destino. [`<Plural>`](/docs/react/reference/components/plural) selecciona la adecuada en tiempo de ejecución.

## Otras alternativas a i18next

Los equipos que abandonan i18next también comparan estas bibliotecas:

* **react-intl:** da formato a mensajes ICU y ofrece las herramientas de catálogos de FormatJS. (Consulta [General Translation vs. react-intl](/kb/general-translation-vs-react-intl)).
* **Lingui:** mantiene el texto inline y compila los mensajes en catálogos con un tiempo de ejecución ligero. (Consulta [General Translation vs. Lingui](/kb/general-translation-vs-lingui)).
* **next-intl:** renderiza mensajes de catálogo en aplicaciones que usan el App Router de Next.js, incluidos los Componentes de servidor. (Consulta [next-intl vs. gt-next](/kb/next-intl-vs-gt-next)).
* **Paraglide JS:** compila catálogos en funciones de mensajes tipadas y tree-shakable. (Consulta [General Translation vs. Paraglide JS](/kb/general-translation-vs-paraglide)).
* **Intlayer:** guarda el contenido de cada componente en un archivo de declaración tipado, con todos los idiomas en paralelo. (Consulta [General Translation vs. Intlayer](/kb/general-translation-vs-intlayer)).

## Conclusiones clave

* i18next renderiza catálogos basados en claves y gestiona la selección de plurales; las traducciones las generan personas o un servicio conectado.
* Las bibliotecas de General Translation renderizan las traducciones de la misma forma, pero además General Translation se encarga de traducir, a partir de textos escritos inline en [`<T>`](/docs/react/reference/components/t).
* Puedes mantener i18next y dejar que la CLI de `gt` traduzca sus archivos JSON, o migrar a [`<T>`](/docs/react/reference/components/t) ruta por ruta.

## Related questions

- [General Translation vs. i18next, react-intl y next-intl: ¿qué biblioteca de i18n deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-i18n-libraries.mdx): 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.
- [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. Lingui: ¿cuál deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-lingui.mdx): Elige General Translation para mantener el texto inline como en Lingui y generar las traducciones usando tu estructura JSX como contexto. Lingui extrae los mensajes inline a catálogos para que tus traductores o un servicio conectado los traduzcan. La CLI de General Translation actualiza las traducciones a medida que cambia tu código, y tu equipo las revisa en el panel de control.
- [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.
- [¿Cómo gestiono los plurales en React?](https://generaltranslation.com/es/kb/how-to-handle-plurals-in-react.mdx): No codifiques la lógica de pluralización a mano con comprobaciones como n === 1. Para aplicaciones solo en inglés basta con una pequeña función auxiliar, pero las aplicaciones multilingües necesitan reglas de pluralización adaptadas a la configuración regional, y un componente de i18n como `<Plural>` de gt-react o gt-next se encarga de ellas en todos los idiomas.

## Previous and next questions

- Previous question: [Alternativas a Google Translate: General Translation vs. Google Translate](https://generaltranslation.com/es/kb/general-translation-vs-google-translate.mdx)
- Next question: [Alternativas a Lokalise: General Translation vs. Lokalise](https://generaltranslation.com/es/kb/general-translation-vs-lokalise.mdx)

## Sitemap

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