Por estos dias estuve revizando una manera efectiva de organizar las traducciones de unas vistas en una aplicación en Rails. Despues de buscar un rato, encontré un articulo donde explican cómo hacerlo, lo encuentras en las referencias de este post. Aquí les hago un resumen luego de utilizar ese conocimiento adquirido allí. 😁
En mis años de experiencia con esta tecnología siempre vi que manejaban todo en un archivo o en varios, luciendo algo similar a esto:
es:
users:
form:
name:
label: "Nombre"
lastname:
label: "Apellido"
porters:
form:
name:
label: "Nombre"
lastname:
label: "Apellido"
devise:
errors:
messages:
expired: "ha expirado, por favor pide una nueva"
not_found: "no encontrado"
already_confirmed: "ya fue confirmada. Intenta ingresar."
not_locked: "no ha sido bloqueada"
not_saved:
one: "Ha habido 1 error:"
other: "Han habido %{count} errores:"
registrations:
signed_up: 'Bienvenido! Te has registrado correctamente.'
signed_up_but_unconfirmed: 'Te hemos enviado un email con instrucciones para que confirmes tu cuenta.'
signed_up_but_inactive: 'Te has registrado correctamente, pero tu cuenta aun no ha sido activada.'
signed_up_but_locked: 'Te has registrado correctamente, pero tu cuenta está bloqueada.'
updated: 'Actualizaste tu cuenta correctamente.'
update_needs_confirmation: "Actualizaste tu cuenta correctamente, pero tenemos que revalidar tu email. Revisa tu correo para confirmar la dirección."
destroyed: 'Adiós, tu cuenta ha sido eliminada. Esperamos verte de vuelta pronto!'
unlocks:
send_instructions: 'Recibirás un email con instrucciones para desbloquear tu cuenta en unos minutos'
unlocked: 'Tu cuenta ha sido desbloqueada. Inicia sesión para continuar.'
send_paranoid_instructions: 'Si tu cuenta existe, recibirás instrucciones para desbloquear tu cuenta en unos minutos'
#.....
# asi sucesivamente con todas las traducciones de nuestra app.
El punto es que estos archivos podian llegar a tener miles de lineas, volviendose un dolor de cabeza y dificil de mantener.
Por esta razón me dije a mi mismo, “Debe haber una manera de hacer esto mejor, que sea mantenible y fácil de entender”…
Resulta que podemos hacer una estructura muy parecida a las convenciones que Rails maneja para la organización de vistas entre controladores.
Supongamos que tenemos la siguiente vista:
/views/devise/users/sessions/new.html.erb
En nuestro código tenemos un titulo como el siguiente:
<h1 class="title">Login</h1>
Para crear nuestro archivo de traducción para nuestra vista, debemos seguir la misma estructura. Es decir que esto quedaría:
/config/locales/views/devise/users/sessions/new.es.yml
La estructura de nuestro archivo es la siguiente:
es:
devise:
users:
sessions:
new:
title: "Iniciar sesión"
Aqui debemos tener en cuenta que NO ponemos la key views dentro de la estructura, de alli en adelante si ponemos las keys correspondientes al scope de nuestra vista (Esto es convención sobre configuración, rails se basa en esto). Y de esta manera estructuramos nuestras traducciones de una manera más controlada y estructurada.
Ahora para llamar nuestra local en la vista lo hacemos de una manera muy sencilla:
<h1 class="title"><%= t(".title") %></h1>
Como puedes observar, ponemos t(“.form.title”) y no todo el scope definido en el archivo de nuestra traducción, es decir que no debemos hacer lo siguiente en la llamada de nuestro helper:
t("devise.users.sessions.new.form.title")
Ya Rails sabe que nuestra vista tiene esa ruta y que se llama view. De alli en adelante si debemos especificar el scope de las traducciones, y como nuestra traducción title esta despues de view, solo ponemos “.” (punto).
¡Y eso es todo! 🎉✨ La verdad, hacerlo de esta manera me parece increíblemente genial. 🚀💡🙌