missing_i18n
This is a rails 3 mountable engine.
It allows you to see which locales have missing entries. You probably want to use it in your development/staging environment.
Installation
On your Gemfile:
gem 'missing_i18n'
On your config/routes.rb
:
unless Rails.env.production? # optional, but recommended
mount MissingI18n::Engine, :path => '/missing_i18n'
end
After that, you can go to http://localhost:3000/missing_i18n to get a list of all the locales and their missing keys.
Customization & scope filtering
You can override MissingI18n' only view by creating any of the following files:
app/views/missing_i18n/locales/index.html.erb
app/views/missing_i18n/locales/show.html.erb
You can similarly override MissingI18n controller by defining app/views/missing_i18n/locales_controller.rb
.
Finally, you will probably want to add "ignored paths" to missing_i18n
, for example for avoiding certain groups of prefixes.
To ignore (for example) the entries inserted by the Faker, create an initializer file with this text:
# config/initializers/missing_i18n.rb
if defined? MissingI18n
MissingI18n.ignored_scopes += ['faker']
end
You can add more than one scope on that array. Also, you can add dot-separated scopes ('foo.bar.baz'
) to filter more precisely.
Notice that missing_i18n
ignores some scopes by default. These are scopes missing in some
locales of rails-i18n, and in general it is safe to ignore those. If you need to include them in the list, you can; just
set MissingI18n.ignored_scopes
to whatever you want; just use =
instead of +=
:
# config/initializers/missing_i18n.rb
if defined? MissingI18n
MissingI18n.ignored_scopes = ['my.scopes', 'which.dont.include', 'the.default.ones']
end
Everything will work as long as MissingI18n.ignored_scopes
is an array of strings.
Tests
This engine has no tests. I'm basically using non-public methods from the i18n gem, so it's extremely brittle and coupled with the implementation details of i18n.
However, you can try the dummy app by executing:
cd test/dummy
rails s
If you then go to http://localhost:3000, you should see some differences between the es and en locales. Try modifying the files inside test/dummy/config/locales
and
refreshing the page.
Feel free to send me pull requests with tests if you want!