Guía Completa sobre Locales e Internacionalización (I18n) en Rails

Introducción

En el desarrollo de aplicaciones modernas, es común que el software se utilice en distintos países, lenguajes y contextos culturales. La internacionalización (I18n) y localización (L10n) son las técnicas que permiten que una aplicación pueda adaptar sus textos, formatos de fecha, números, monedas y mensajes al idioma y cultura del usuario final.

En Ruby on Rails, esto se implementa con el sistema de locales, que usa archivos de traducción (.yml o .rb) para centralizar los textos y otros elementos culturales.


Conceptos clave

  • Internacionalización (I18n): el proceso de preparar la aplicación para soportar múltiples lenguajes y culturas. (Ej: usar t('buttons.save') en lugar de texto fijo).
  • Localización (L10n): la adaptación concreta de la aplicación a un idioma y cultura específicos (ej: español de México, inglés de EE.UU.).
  • Locale: el código que representa el idioma y la región, por ejemplo:
    • es → Español (genérico)
    • es-MX → Español de México
    • en → Inglés (genérico)
    • en-US → Inglés de EE.UU.

Archivos de locales en Rails

Rails busca los archivos en config/locales/ de manera predeterminada. Generalmente son archivos YAML con la siguiente estructura:

es:
  hello: "Hola mundo"
en:
  hello: "Hello world"

Uso en vistas:

<%= t('hello') %>

Configuración básica en Rails

En config/application.rb:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.available_locales = %i[es en]
config.i18n.default_locale = 
config.i18n.fallbacks = []

Explicación:

  • available_locales: define los idiomas que tu aplicación soporta.
  • default_locale: el idioma por defecto si el usuario no especifica otro.
  • fallbacks: indica a qué idioma recurrir si falta una traducción.

Uso en la aplicación

1. Vistas

<%= t('buttons.save') %>
<%= f.submit t('buttons.save') %>

2. Controladores

redirect_to users_path, t('flash.actions.create.success', User.model_name.human)

3. Validaciones y ActiveRecord

es:
  activerecord:
    models:
      user: "Usuario"
    attributes:
      user:
        email: "Correo electrónico"
    errors:
      messages:
        blank: "no puede estar en blanco"

Rails usará estas traducciones en formularios y validaciones.


Opciones avanzadas

Pluralización

Rails soporta pluralización automática con count:

es:
  notifications:
    items:
      one: "Tienes 1 artículo."
      other: "Tienes %{count} artículos."

Uso:

<%= t('notifications.items', count: @articulos.count) %>

Formatos de fechas y números

es:
  date:
    formats:
      default: "%d/%m/%Y"
  time:
    formats:
      long: "%d de %B de %Y %H:%M"

Uso en vistas:

<%= l(Time.current, format: :long) %>
<%= number_to_currency(1234.56) %>

Lazy lookup en vistas

Cuando usas t('.title') dentro de una vista users/index.html.erb, Rails busca automáticamente:

views.users.index.title

Esto simplifica el mantenimiento.


Organización de locales

Se recomienda dividir los locales en múltiples archivos por dominio:

config/locales/
  es/
    buttons.yml
    flash.yml
    activerecord.yml
    views/
      users.yml
      recibos.yml

Esto facilita la traducción, corrección ortográfica y mantenimiento.


Herramientas útiles

  • i18n-tasks: gema para detectar claves faltantes, duplicadas o no utilizadas.
  • i18n-js: permite exportar traducciones a JavaScript para usarlas en el frontend.
  • fallbacks: útil si un idioma está incompleto y quieres mostrar textos de otro idioma como respaldo.

Buenas prácticas

  1. Nunca uses texto fijo en vistas/controladores, siempre t('...').

  2. Usa interpolación (%{name}) en lugar de concatenación de cadenas.

  3. Reutiliza claves semánticas (buttons.save) en lugar de frases completas como claves.

  4. Divide los archivos por contexto (botones, modelos, vistas).

  5. En desarrollo, activa errores de traducción:

    config.action_view.raise_on_missing_translations = true

Conclusión

El sistema de locales en Rails permite que tu aplicación sea flexible, escalable y lista para múltiples idiomas y culturas. Con una buena organización de los archivos, podrás gestionar fácilmente traducciones, correcciones ortográficas y expansión a nuevos mercados.

Leave a Reply

Your email address will not be published. Required fields are marked *