Internacionalizar un plugin


#1

Amigxs, estoy internacionalizando un sitio y estoy tengiendo problemas
con la internacionalización del Open_id_authentication.
el tema es así:
todos los mensajes que envía este plugin por flash están en el archivo:
/vendor/
plugins/open_id_authentification/lib/open_id_authentication.rb
y a los mismos los reemplazo por el llamado al método de la clase I18n:

class Result
ERROR_MESSAGES = {
:missing => I18n.t(“openid.missing”),
:invalid => I18n.t(“openid.invalid”),
:canceled => I18n.t(“openid.canceled”),
:failed => I18n.t(“openid.failed”),
:setup_needed => I18n.t(“openid.setup_needed”)
}
por supuesto cargo los mensajes en /config/locale/es.rb
las otras traducciones me funcionan bien, pero las del openid me da como
que no la encuentra.

que puede ser?

saludos y gracias


#2

2009/4/29 Marcos V. removed_email_address@domain.invalid

Ese hash se rellena de valores en tiempo de carga, por lo que cuando se
ejecuta el valor de ERROR_MESSAGES[:missing] por ejemplo ya tiene un
valor
asignado.
Se me ocurren dos opciones:
a) Establecer el locale antes de cargar el plugin.
b) Modificar el plugin para que sea en el momento de llamar a
ERROR_MESSAGES
cuando se hace la traducción, es decir:



I18n.t(ERROR_MESSAGES[:missing])

y el hash lo dejas con texto normal

class Result
ERROR_MESSAGES = {
:missing => “openid.missing”,

Es lo único que se me ocurre ahora mismo.


#3

Guillermo wrote:

Se me ocurren dos opciones:
a) Establecer el locale antes de cargar el plugin.

cómo se puede hacer eso?

b) Modificar el plugin para que sea en el momento de llamar a
ERROR_MESSAGES

ERROR_MESSAGES es como un hash global que se carga cuando?

saludos y gracias


#4

Aplica este parche, o cámbialo a mano.

From 167880c04797c9e9678a1471dc556b3a1043df96 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Guillermo=20=C3=81lvarez?= removed_email_address@domain.invalid
Date: Wed, 29 Apr 2009 22:38:29 +0200
Subject: [PATCH] add I18n


lib/open_id_authentication.rb | 12 +++++±-----
1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/lib/open_id_authentication.rb
b/lib/open_id_authentication.rb
index 6a05ea0…3d90f18 100644
— a/lib/open_id_authentication.rb
+++ b/lib/open_id_authentication.rb
@@ -39,11 +39,11 @@ module OpenIdAuthentication

class Result
ERROR_MESSAGES = {

  •  :missing      => "Sorry, the OpenID server couldn't be found",
    
  •  :invalid      => "Sorry, but this does not appear to be a valid
    

OpenID",

  •  :canceled     => "OpenID verification was canceled",
    
  •  :failed       => "OpenID verification failed",
    
  •  :setup_needed => "OpenID verification needs setup"
    
  •  :missing      => "openid.missing",
    
  •  :invalid      => "openid.invalid",
    
  •  :canceled     => "openid.canceled",
    
  •  :failed       => "openid.failed",
    
  •  :setup_needed => "openid.setup_needed"
    

    }

    def self.
    @@ -69,7 +69,7 @@ module OpenIdAuthentication
    end

    def message

  •  ERROR_MESSAGES[@code]
    
  •  I18n.t(ERROR_MESSAGES[@code])
    
    end
    end


1.6.0.2

La única diferencia es que he cambiado el lugar donde se realiza la
traducción en la linea 72 de lib/open_id_authentication.rb de git://
github.com/rails/open_id_authentication.git

Debería romper los tests, ya que estás añadiendo la dependencia de una
clase
externa a la librería. I18n.Una forma más correcta, sería que leyeses la
constante a mano y esa la tradujeses en algún lado de tu aplicación.