Rails I18n library for ActiveRecord model/data translation using PostgreSQL's hstore datatype. It provides an interface inspired by Globalize3 but removes the need to maintain separate translation tables.
- ActiveRecord > 3.1.0
- I18n
gem install hstore_translate
When using bundler, put it in your Gemfile:
source 'https://rubygems.org'
gem 'pg'
gem 'activerecord'
gem 'activerecord-postgres-hstore', '~> 0.4.0' # only required for ActiveRecord 3.x
gem 'hstore_translate'
Model translations allow you to translate your models' attribute values. E.g.
class Post < ActiveRecord::Base
translates :title, :text
end
Allows you to translate the attributes :title and :text per locale:
I18n.locale = :en
post.title # => This database rocks!
I18n.locale = :he
post.title # => אתר זה טוב
You also have locale-specific convenience methods from easy_globalize3_accessors:
I18n.locale = :en
post.title # => This database rocks!
post.title_he # => אתר זה טוב
In order to make this work, you'll need to define an hstore column for each of your translated attributes, using the suffix "_translations":
class CreatePosts < ActiveRecord::Migration
def up
create_table :posts do |t|
t.column :title_translations, 'hstore'
t.column :text_translations, 'hstore'
t.timestamps
end
end
def down
drop_table :posts
end
end
It is possible to enable fallbacks for missing translations. It will depend on the configuration setting you have set for I18n translations in your Rails config.
You can enable them by adding the next line to config/application.rb
(or
only config/environments/production.rb
if you only want them in production)
config.i18n.fallbacks = true
Sven Fuchs wrote a detailed explanation of the fallback mechanism.