I18n nombre de acciones en controladores

Hola a todos:

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.

Muchas gracias (espero haberme explicado),

Serabe

On 8/29/07, Serabe [email protected] wrote:

poder pasárselo a _() para traducirlo.

Muchas gracias (espero haberme explicado),

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.

Suerte y contanos como lo resolviste,

Saludos!

Hola, Emilio:

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.

Muchas gracias de nuevo,

Serabe

On Aug 29, 2007, at 2:35 PM, Serabe wrote:

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:

  1. 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).

  2. 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.

  1. Generador estatico de codigo (la que menos me gusta).