# General Translation Knowledge Base: General Translation vs. Rails I18n: ¿necesitas ambos?
URL: https://generaltranslation.com/es/kb/general-translation-vs-rails-i18n.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Rails I18n busca mensajes y da formato a fechas y números. General Translation genera las traducciones, las mantiene al día a medida que cambia tu texto en inglés y ofrece a tu equipo un panel de control para revisarlas. Usa ambos para publicar catálogos de Rails traducidos en cada lanzamiento.
Category: Internacionalización
Last updated: 2026-10-16
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-16

Rails I18n es la API de internacionalización incluida en Ruby on Rails: llamas a `t` y `l` en vistas y controladores, y Rails busca el mensaje correspondiente a la configuración regional actual en archivos YAML dentro de `config/locales`. Se encarga de renderizar las traducciones, pero deja su creación en tus manos, en las de tus traductores o en las de un servicio. General Translation escribe esas traducciones a partir de tu texto de origen en inglés, con la terminología de tu producto. Tus vistas, controladores y llamadas a Rails I18n no cambian.

## Lo que Rails I18n hace bien

* **Integrado.** Rails [carga automáticamente todos los archivos `.yml` y `.rb` dentro de `config/locales`](https://guides.rubyonrails.org/i18n.html#configuring-the-load-paths-and-default-locale). Cada archivo YAML tiene como raíz su clave de configuración regional (`en:`, `es:`), así que una misma aplicación puede repartir las traducciones en muchos archivos.
* **Búsqueda diferida.** En `app/views/inbox/show.html.erb`, [`t(".title")` se resuelve como `inbox.show.title`](https://guides.rubyonrails.org/i18n.html#lazy-lookup), y en una acción de un controlador, `t(".success")` se resuelve a partir del nombre del controlador y de la acción, de modo que las claves siguen la estructura de tus archivos.
* **Interpolación y HTML seguro.** Los mensajes aceptan valores con nombre como `%{name}`, y [las claves que terminan en `_html` se renderizan sin escapar](https://guides.rubyonrails.org/i18n.html#using-safe-html-translations), aunque los valores interpolados en ellas se siguen escapando.
* **Alternativas de respaldo y límites de configuraciones regionales.** Las aplicaciones nuevas de Rails establecen `config.i18n.fallbacks = true` en producción, de modo que una clave que falta se renderiza en el idioma predeterminado, y [`config.i18n.available_locales` limita las configuraciones regionales que acepta la aplicación](https://guides.rubyonrails.org/configuring.html#config-i18n-available-locales).
* **Datos de configuración regional aportados por la comunidad.** La gema [rails-i18n](https://github.com/svenfuchs/rails-i18n) (8.1.0, MIT) añade formatos de fecha, hora y número, mensajes de error de Active Record y reglas de plural de CLDR para más de 100 configuraciones regionales.
* **Sin necesidad de registrarse.** Es Ruby y YAML puros, y la [guía de Rails](https://guides.rubyonrails.org/i18n.html) lo explica de principio a fin.

## Lo que Rails I18n deja en tus manos

Rails I18n solo conoce los mensajes que le proporcionas. Aquí tienes una vista de bandeja de entrada con sus mensajes en inglés:

```yaml title="config/locales/en.yml"
en:
  inbox:
    show:
      title: "Inbox"
      unread:
        one: "You have %{count} unread message."
        other: "You have %{count} unread messages."
```

```erb title="app/views/inbox/show.html.erb"
<h1><%= t(".title") %></h1>
<p><%= t(".unread", count: @count) %></p>
```

Seleccionar español no traduce este archivo. Con las alternativas de respaldo en inglés activadas, los lectores en español siguen viendo &quot;Inbox&quot; y &quot;You have 3 unread messages&quot;. Rails necesita un catálogo en español para poder mostrar textos en español. Cada mensaje en inglés que se añade o se edita genera el mismo trabajo en cada idioma.

La gema [rails-i18n](https://github.com/svenfuchs/rails-i18n) proporciona los formatos de cada configuración regional y las reglas de plural. [i18n-tasks](/kb/general-translation-vs-i18n-tasks) detecta las claves y formas plurales que faltan. General Translation proporciona los mensajes traducidos que usan esas herramientas.

## Traducir archivos de configuración regional de Rails con General Translation

Sigue usando Rails I18n para las búsquedas y deja que General Translation genere los demás archivos de configuración regional. La CLI `gt` se ejecuta en Node.js, traduce YAML y conserva tus claves. En este ejemplo de inglés a español, guarda los mensajes en `translations/en.yml` sin la clave externa `en:`:

```yaml title="translations/en.yml"
inbox:
  show:
    title: "Inbox"
    unread:
      one: "You have %{count} unread message."
      other: "You have %{count} unread messages."
```

Configura `gt.config.json` para que apunte a estos archivos de trabajo. Un breve paso de exportación añade las claves de configuración regional de Rails y genera los catálogos que carga la aplicación:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": [
    "es"
  ],
  "files": {
    "yaml": {
      "include": [
        "translations/[locale].yml"
      ]
    }
  }
}
```

Configura `GT_PROJECT_ID` y `GT_API_KEY` como se describe en [Generar traducciones](/docs/cli/guides/generating-translations). Si ya tienes traducciones para este catálogo, guárdalas en `translations/es.yml` sin la clave raíz `es:` y ejecuta [`npx gt upload`](/docs/cli/reference/commands/upload) antes de generar traducciones nuevas.

```ruby title="script/export_rails_locales.rb"
require "json"
require "yaml"
require "fileutils"

config = JSON.parse(File.read("gt.config.json"))
locales = ([config.fetch("defaultLocale")] + config.fetch("locales")).uniq
catalogs = locales.to_h do |locale|
  messages = YAML.safe_load_file("translations/#{locale}.yml", aliases: true)
  raise "Expected a message map for #{locale}" unless messages.is_a?(Hash)
  [locale, { locale => messages }.to_yaml]
end

FileUtils.mkdir_p("config/locales")
catalogs.each do |locale, catalog|
  File.write("config/locales/#{locale}.yml", catalog)
end
```

```bash
npx gt translate && ruby script/export_rails_locales.rb
```

La exportación genera los archivos `config/locales/en.yml` y `config/locales/es.yml` de este catálogo. Sigue editando los archivos de trabajo en `translations/`; la aplicación carga las copias exportadas. Sincroniza las ediciones de la traducción local con [`npx gt save-local`](/docs/cli/reference/commands/save-local) antes de la siguiente ejecución de traducción.

General Translation traduce cada archivo con el [glosario y los prompts personalizados](/docs/platform/dashboard/guides/defining-context-for-translations) de tu proyecto, de modo que el nombre de un producto o un tono formal se mantienen en todos los archivos de configuración regional, y tu equipo puede [revisar y editar las traducciones](/docs/platform/dashboard/guides/reviewing-translations) en el panel de control. Las entradas sin cambios reutilizan las traducciones anteriores, así que, si ejecutas la CLI en CI con cada fusión, solo se traduce lo que ha cambiado.

Ejecuta `i18n-tasks missing` e `i18n-tasks check-consistent-interpolations` antes del lanzamiento para comprobar las claves, las formas plurales y los marcadores de posición `%{count}` de los catálogos exportados.

## Rails I18n frente a General Translation de un vistazo

| Característica                                 | Rails I18n                                                               | General Translation                                                                               |
| ---------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| Qué es                                         | Biblioteca de Ruby para buscar traducciones y darles formato             | Plataforma de traducción con una CLI, bibliotecas para JavaScript y Python, y un panel de control |
| Renderiza traducciones en una aplicación Rails | Sí, en vistas, controladores y mailers                                   | Proporciona catálogos para las mismas llamadas de Rails I18n                                      |
| Escribe traducciones                           | No                                                                       | Sí, archivos YAML con [`npx gt translate`](/docs/cli/reference/commands/translate)                |
| Reglas de plural                               | Reglas del inglés de forma predeterminada; reglas de CLDR con rails-i18n | Traduce las formas de origen configuradas; Rails elige la adecuada en tiempo de ejecución         |
| Coherencia entre archivos                      | Depende de tus traductores                                               | Glosario y prompts personalizados aplicados a todos los archivos                                  |
| Revisión                                       | Tu proceso de pull requests                                              | Panel de control, además de tu proceso de pull requests                                           |
| Costo                                          | Gratis, MIT                                                              | [Según el uso](https://generaltranslation.com/pricing)                                            |

Usa solo Rails I18n si tus traductores o un proveedor ya te entregan los archivos de configuración regional, o si das soporte a uno o dos idiomas y los editas a mano. Añade General Translation si el texto en inglés cambia con frecuencia y quieres que todos los archivos de configuración regional se regeneren en CI, con una terminología coherente, en lugar de esperar a que se complete un ciclo de traducción.

## Puntos clave

* Rails I18n renderiza traducciones desde `config/locales` y da formato a fechas y números; rails-i18n añade reglas de plural y datos de configuración regional. Ninguno de los dos genera traducciones.
* General Translation traduce archivos YAML con tu glosario y tus prompts personalizados, y mantiene las traducciones al día a medida que cambia el texto en inglés.
* Mantén los catálogos editables en `translations/` y, después de ejecutar [`npx gt translate`](/docs/cli/reference/commands/translate), expórtalos a las raíces de configuración regional de Rails.

## Related questions

- [General Translation vs. i18n-tasks: ¿cuál deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-i18n-tasks.mdx): i18n-tasks es una gema de Ruby que detecta claves de Rails I18n faltantes y sin usar, ordena los archivos de configuración regional y puede completar las claves faltantes mediante Google Translate, DeepL, OpenAI, Yandex o watsonx. General Translation traduce archivos de configuración regional completos con tu glosario, tus prompts personalizados y la revisión en el panel de control. Cumplen funciones distintas, y muchos equipos pueden usar ambas.
- [General Translation vs. Mobility: ¿cuál deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-mobility.mdx): Mobility almacena los atributos traducidos de los modelos en tu base de datos. General Translation genera esas traducciones a través de su API, usando tu glosario y tus prompts personalizados. Usa ambos para traducir fichas de productos, publicaciones y otro contenido de la base de datos sin renunciar a tus modelos de Rails.
- [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.
- [¿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.
- [¿Cuál es el mejor software de localización para desarrolladores?](https://generaltranslation.com/es/kb/best-localization-software.mdx): Busca un único sistema que cubra todo el flujo, desde la biblioteca de i18n en tu código hasta la traducción y la entrega, en lugar de ir uniendo por separado una biblioteca, un sistema de gestión de traducciones y un proveedor de traducción.

## Previous and next questions

- Previous question: [General Translation vs. Paraglide JS: ¿cuál deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-paraglide.mdx)
- Next question: [General Translation vs. Symfony Translation: ¿cuál deberías usar?](https://generaltranslation.com/es/kb/general-translation-vs-symfony-translation.mdx)

## Sitemap

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