Idioma
Idioma is a Ruby Engine to help manage the flow and editing of translations.
Current Features
- Imports translations into database from the config yaml files.
- Interface for managing translations.
- Duplicate translations from one locale to other locales.
- DB changes will be persisted to Redis I18n backend store if supplied.
- Exports translations from DB into CSV and YAML formats.
Pending Features
- Import translations from CSV into DB.
- Stats on each locale, giving percentage of translated/missing.
- Test persisting to Redis using https://github.com/guilleiguaran/fakeredis
- Improve interface by converting into SPA with Angular.
Starting
Add it to your gemfile.
gem 'idioma'
Mount it in your config/routes.rb.
# config/routes.rb
MyApp::Application.routes.draw do
mount Idioma::Engine => "/idioma"
end
Security
You can secure access to the Idioma interface by using route constraints.
Example 1 by IP address.
# config/routes.rb
idioma_constraint = lambda { |request| request.remote_ip == '127.0.0.1' }
constraints idioma_constraint do
mount Idioma::Engine => "/idioma"
end
Example 2 by using Devise or another warden based authentication system.
# config/routes.rb
idioma_constraint = lambda do |request|
current_user = request.env['warden'].user
current_user.present? && current_user.respond_to?(:is_admin?) && current_user.is_admin?
end
constraints idioma_constraint do
mount Idioma::Engine => "/idioma"
end
Configuration
Setting | Default | Data Type | Description |
---|---|---|---|
default_locale | :en | Symbol or lambda | Used for showing the default translation (for translators to translate from) for a given phrase |
locales | [:en] | Array of symbols or lambda | Idioma will only import translations of locales in this list... ignoring the rest |
ignore_keys | ["ransack", "simple_form"] | Array of strings | Gems sometimes bring their own phrases that you don't actually need translated |
redis_backend | nil | I18n::Backend::KeyValue | Should be an I18n backend of a Redis store. |
Setup
Import the migrations into your application. These should be imported by default.
rake idioma:install:migrations
To populate the idioma_phrases table with translations from your locales/yaml files.
rake idioma:import_from_extraction
To duplicate all translations from a locale to a new locale (as untranslated).
rake idioma:duplicate_for_locales base_locale=en new_locale=es
Examples
$redis = Redis.new(:host => 'localhost', :port => 6379)
I18n.backend = I18n::Backend::KeyValue.new($redis)
Idioma.configure do |configure|
configure.default_locale = :en
configure.locales = [:en, :es, :fr]
configure.redis_backend = I18n.backend
end
You can use procs for default_locale and locales options. If you'd like to query a database for these values.
Idioma.configure do |configure|
configure.default_locale = :en
configure.locales = -> {
[:en, :es, :fr]
}
end
Tasks
Popular your Redis backend with what is inside the database.
rake idioma:prime_backend