2010-06-22 14 views
6

Kiedy Szyny funkcje są prosząc o tłumaczenia (I18n.translate), nie chcę, aby analizować ich kodu w celu uzyskania dokładnych zakresów itdJak wyświetlić wszystkie ciągi tekstowe do zapytania w Railsach?

Jak mogę dodać wyjście debugowania do konsoli dla każdej struny, które został poproszony?

Przykłady:

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

Do tej pory nie mogłem lepszy niż odpowiedź "przeczytaj kod Rails" lub "Użyj własnych ciągów tłumaczeń" (jak w pierwszym przykładzie). – giraff

Odpowiedz

8

To nie jest bardzo eleganckie rozwiązanie, ale on pracował dla mnie. Utworzyliśmy initialiser:

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 

Następnie można uruchomić polecenia jak poniżej:

$ DEBUG_TRANSLATION=true rake cucumber 

... a zobaczysz wszystkie tłumaczenia są próbował dumpingowych na standardowe wyjście. Nie uważam jednak tego kodu produkcyjnego, więc zachowałem go w wersji Gist i na tym etapie nie sprawdzałem go w głównej kontrolce źródła projektu.

Noddy, ale spełnia swoją funkcję.

+0

Zaktualizowałem, aby uwzględnić zmiany z Andrea D'Amico (zobacz inną odpowiedź). Dzięki Andrea - nie jestem pewien, dlaczego tego nie zrobiłem! –

2

Wystarczy mała zmiana umieścić komunikaty debugowania i18n w dzienniku:

zastępczej tej linii:

puts "Translate: #{args.inspect}" 

z

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

Dzięki Andrea; Uwzględniłem tę zmianę w powyższej odpowiedzi. +1. –

Powiązane problemy