Quisiera tener traducidos los nombres de los controladores y de sus
acciones. Se me había ocurrido tener una acción protegida en el que se
tradujesen dichas frases, pero me preguntaba si gettext trae alguna
facilidad.
Como no sé si me he explicado, allá va un ejemplo. Imaginemos que
tenemos un controlador llamado Products con las acciones index y new.
Quiero que al llamar al nombre del controlador y/o el de sus acciones,
poder pasárselo a _() para traducirlo.
No he visto esa funcionalidad en gettext pero lo que si se me ocurre
es que podrias utilizar gettext en tu routes.rb y realizar la
redireccion de las rutas en cualquier idioma a cada controlador
correspondiente.
Muchas gracias pero, como sospechaba, no he conseguido explicarme. La
idea es poder traducir el action_name y el controller.name. El segundo
es medianamente fácil (de momento) pues suele coincidir con el nombre
del modelo (en mi caso) por lo que ya estaría traducido. El problema
viene con la lista de métodos.
La solución que se me ha ocurrido es la siguiente:
Supongamos un controlador llamado ProductsController con los métodos
index y new. Entonces se añade un método privado de la siguiente
forma:
private
def translate_method_names
_(‘ProductsController’)
_(‘ProductsController|Index’)
_(‘ProductsController|New’)
end
Ya sería la leche si me curro una task de rake que haga precisamente
eso, pero primero quería saber si alguien habia necesitado lo mismo y
lo había solucionado de alguna manera elegante.
Supongamos un controlador llamado ProductsController con los métodos
index y new. Entonces se añade un método privado de la siguiente
forma:
private
def translate_method_names
_(‘ProductsController’)
_(‘ProductsController|Index’)
_(‘ProductsController|New’)
end
Yo veo tres aproximaciones:
Una solucion basada en method_missing, que dinamicamente mira si
el metodo corresponde con una traduccion y en tal caso lo define
(para que no salte mas que una vez por traduccion en produccion).
Un generador estatico de aliases basado en algo como (escrito
sobre la marcha, pero se ve la idea)
class ApplicationController < …
def self.translate_actions
public_instance_methods(false).each do |m|
t = _(m)
alias_method m.to_sym, t.to_sym if t # no recuerdo si esto
funciona tal cual
end
end
end
class MyController < …
todas las acciones van aqui y al final pones
translate_actions
end
Eso iria al final para que public_instance_methods conociese los
metodos, si se pone al principio aun no se han ejecutado los defs y
no constan.
Generador estatico de codigo (la que menos me gusta).
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.