2010-06-22 4 views
6

Lorsque les fonctions Rails demandent une traduction (I18n.translate), je ne veux pas analyser leur code afin d'obtenir les champs d'application précis etc.Comment afficher toutes les chaînes de traduction dans Rails demandées?

Comment puis-je ajouter une sortie de débogage dans la console pour chaque chaîne a été demandé?

Exemples:

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

Jusqu'à présent, je ne pouvais pas une meilleure réponse que "lisez le code Rails" ou "Utilisez vos propres chaînes de traduction" (comme dans le premier exemple). – giraff

Répondre

8

Ce n'est pas une solution très élégante, mais il a travaillé pour moi. J'ai créé un initialiseur:

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 

Vous pouvez ensuite exécuter des commandes comme:

$ DEBUG_TRANSLATION=true rake cucumber 

... et vous verrez toutes les traductions tentées stdout. Je ne considère pas ce code de production, donc je l'ai gardé dans un Gist, et je ne l'ai pas vérifié dans mon contrôle de source de projet principal à ce stade.

Noddy, mais il fait le travail.

+0

J'ai mis à jour pour inclure les changements de Andrea D'Amico (voir l'autre réponse). Merci Andrea - je ne sais pas pourquoi je n'ai pas fait ça en premier lieu! –

2

Juste un petit changement pour mettre des messages de débogage I18n dans le journal:

remplaçant cette ligne:

puts "Translate: #{args.inspect}" 

avec

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

Merci Andrea; J'ai inclus ce changement dans la réponse ci-dessus. +1 –

Questions connexes