Simple generation of JSON i18n data for a frontend from Rails-style YAML locales.
The gem provides the following:
- Asset file for the asset pipeline, to be used in production.
- View helper, to assist with locale updates in development.
The reason we need both an asset file and a view helper is that changes in dynamic assets derived from other resources are not being detected and picked up by sprockets properly, and they require a full server restart AND cache wipe to force the asset cache to be recompiled, and the change to get applied.
To provide better development experience, an action view helper allows to override the asset file, and inject the correct JSON data into the page directly. Of course, due to the increased size of HTML pages, it is not a recommended technique for production use.
The current version is built to support i18next, and
produces JSON data in the format expected by this tool. If you want to have
support for other i18n engines - open an issue with a feature request, or
(even better) - take a look at styles/i18next.rb
file and send me a pull
request.
Add this line to your application's Gemfile:
gem 'yaml_locales_jsonizer'
And then execute:
$ bundle
Or install it yourself as:
$ gem install yaml_locales_jsonizer
Add to your asset manifest file, for production:
//= require yaml_locales_jsonizer
For effortless locale updates in dev environment, add a helper call to your view (e.g. layout file). Make sure to add it AFTER your regular assets, to let it override cached asset data!
= javascript_include_tag 'application' # application assets
= yaml_locales_jsonizer if Rails.env.development?
JSON data is exposed via yaml_locales_jsonised
variable, so initialize
i18next with this variable as the resource storage:
i18n.init({resStore: yaml_locales_jsonized});
Gem should be usable out of the box, loading all YAML locales available in
Rails. Additionally, it can be configured with an initializer, e.g.
config/initializers/yaml_locales_jsonizer.rb
. Example:
YamlLocalesJsonizer.configure do
# Add to or overwrite load path. By default the load path uses Rails' i18n
# settings available in Rails.configuration.i18n[:load_path]
load_path << "/some/other/path"
# Filter out files discovered via load_path, and jsonize only the ones
# matching the list. List could contain either file names, or shell-like
# glob patterns (matched with [File#fnmatch](http://www.ruby-doc.org/core-2.1.0/File.html#method-c-fnmatch))
only_files %w(ru.yml en.yml)
end
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request