Countrizable
Countrizable is a gem to use on top of ruby on rails to add model contents depending on country. Inspired in ![Globalize]
Requirements
- ActiveRecord >= 4.2.0 (see below for installation with ActiveRecord 3.x)
- I18n
Installation
To install the ActiveRecord 4.2.x compatible version of Globalize with its default setup, just use:
gem install countrizable
When using bundler put this in your Gemfile:
gem 'countrizable'
Model country attributes
Model translations allow you to translate your models' attribute values. E.g.
class Product < ActiveRecord::Base
country_attribure :price
country_attribure :currency
end
Allows you to translate the attributes :title and :text per locale:
Countrizable.country_code = :uk
product.price # => 3.00
product.currency # => Pound
Countrizable.country_code = :de
product.price # => 3.60
product.currency # => Euro
You can also set translations with mass-assignment by specifying the locale:
product.attributes = { price: 4.5, country_code: :uk }
In order to make this work, you'll need to add the appropriate country attribute tables.
Countrizable comes with a handy helper method to help you do this.
It's called create_country_value_table!. Here's an example:
Note that your migrations can use create_country_value_table! and drop_country_value_table!
only inside the up and down instance methods, respectively. You cannot use create_country_value_table!
and drop_country_value_table! inside the change instance method.
Creating country value tables
Also note that before you can create a translation table, you have to define the translated attributes via country_attribute in your model as shown above.
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.
end
#creating country value tables
reversible do |dir|
dir.up do
Post.create_country_value_table!({
:price => :decimal, default: 0, :precision => 8, :scale => 2,
:currency => :string
})
end
dir.down do
Post.drop_country_value_table!
end
end
#compatible with globalize gem
reversible do |dir|
dir.up do
Post.create_translation_table! :title => :string, :text => :text
end
dir.down do
Post.drop_translation_table!
end
end
end
end