Recently our team got frustrated with all the phrases gettext would not find.
- words in if blocks
- word produced by helpers
- words used in arrays that get translated at runtime
Here is a simple solution: collect all phrases that were used during testing. Since the testsuite often has 100% C0 coverage and any phrase that is not found will signals missing tests.
Install
#spec/spec_helper.rb or test/test_helper.rb
if ENV['LOG_GETTEXT']
def _(word)
File.open(ENV['LOG_GETTEXT'], File::WRONLY|File::APPEND|File::CREAT) do |f|
f.puts word
end
gettext(word)
end
end
#lib/taskts/gettext_test_log.rb
task :gettext_test_log do
tmpfile = 'locale/tmp_gettext_test_log.txt'
outfile = "app/testlog_phrases.rb"
# system "rake test LOG_GETTEXT=#{tmpfile}"
system "rake spec LOG_GETTEXT=#{tmpfile}"
process_log(tmpfile,outfile)
end
def process_log(tmpfile,outfile)
found = {}
File.readlines(tmpfile).each do |line|
line.strip!
next if line.empty?
next if line =~ /%s of /
next if %w[nil Sun Mon Tue Wed Thu Fri Sat Sunday Monday Tuesday Wednesday Thursday Friday Saturday Jan Feb Mar Apr Jun Jul Aug Sep Oct Nov Dec January February March April May June July August September October November December].include? line
found[line]=true
end
File.open(outfile,'w') do |f|
found.each do |k,v|
f.puts "_('#{k}')"
end
end
end
Usage
The generated testlog_phrases.rb should be placed in a folder that is search by your updatepo task(it is not meant to be executed).