Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Rails: Logs translations during tests so that dynamic translations can be found through Gettext

branch: master

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 tasks
Octocat-spinner-32 .gitignore
Octocat-spinner-32 Gemfile
Octocat-spinner-32 Gemfile.lock
Octocat-spinner-32 Rakefile
Octocat-spinner-32 VERSION
Octocat-spinner-32 gettext_test_log.gemspec
Octocat-spinner-32 init.rb


  • Finding all translations by parsing is impossible for dynamic calls
  • often even static calls are not found
  • some file formats do not have a gettext parser


  • log all translations during test execution
  • write them to an parseable temp file
  • use gettext:find / gettext:pack as usual
  • missing translation = missing test, write tests!

This will only work with FastGettext and RSpec for now!


  • rails plugin install git://
  • Gem: gem install gettext_test_log


rake gettext:test_log

Optionally copy+modify task with options: :exclude_msgids_in_po_files=>[ 'some_po_file_that_contains_translations_you_do_not_need.po' ]

Add to your spec_helper: #spec/spec_helper.rb GettextTestLog::activate_test_logging

Run: rake gettext:test_log rake gettext:find #find new translations #fill newly found translations rake gettext:pack #write translations

Examples output

_("Add to favorites")
_("Added a subtitle to %{name}")
_("Additional Information")

Unwanted translations

When using gettext_i18n_rails, most of the columns of a model will be translated during model tests this can be annoying since normally no user will see them. To disable this, add to spec/spec_helper.rb : class ActiveRecord::Base def self.human_attribute_name(attr) attr.to_s end end


  • needs tests... :(
  • make compatible with GetText and FastGettext at the same time ?


Michael Grosser
Hereby placed under public domain, do what you want, just do not hold me accountable...

Something went wrong with that request. Please try again.