2010-06-22 11 views
6

Cuando rieles funciones para solicitar una traducción (I18n.translate), que no quieren analizar su código con el fin de conseguir los alcances exactos etc.¿Cómo mostrar todas las cadenas de traducción solicitadas en Rails?

¿Cómo puedo añadir una salida de depuración en la consola para cada cadena que fue preguntado?

Ejemplos:

I18n.t 'errors.messages.invalid', :scope => :active_record 
# Translation for 'activerecord.errors.messages.invalid' (not) found 

label(:post, :title) 
# Translation for 'activerecord.attributes.post.title' not found 
# Translation for 'views.labels.post.title' not found 
+0

Hasta ahora, no podría una respuesta mejor que "lea el código de Rails" o "use sus propias cadenas de traducción" (como en el primer ejemplo). – giraff

Respuesta

8

Esto no es una solución muy elegante, pero ha trabajado para mí. He creado un inicializador:

require 'i18n' 

if (Rails.env.development? || Rails.env.test?) && ENV['DEBUG_TRANSLATION'] 
    module I18n 
    class << self 
     def translate_with_debug(*args) 
     Rails.logger.debug "Translate : #{args.inspect}" 
     translate_without_debug(*args) 
     end 
     alias_method_chain :translate, :debug 
    end 
    end 
end 

continuación, puede ejecutar comandos como el siguiente:

$ DEBUG_TRANSLATION=true rake cucumber 

... y podrás ver todos los vertidos traducciones que se trataron en STDOUT. Sin embargo, no considero este código de producción, así que lo mantuve en un Gist, y no lo compré en mi control de fuente principal del proyecto en esta etapa.

Noddy, pero cumple su función.

+0

He actualizado para incluir cambios de Andrea D'Amico (ver otra respuesta). Gracias Andrea: ¡no estoy seguro de por qué no hice eso en primer lugar! –

2

Sólo un pequeño cambio para poner mensajes de depuración en el registro de I18n:

sustituto de esta línea:

puts "Translate: #{args.inspect}" 

con

Rails.logger.debug "Translate : #{args.inspect}" 
+0

Gracias Andrea; He incluido este cambio en la respuesta anterior. +1. –

Cuestiones relacionadas