I18n::Backend::ActiveRecord

This repository contains the I18n ActiveRecord backend and support code that has been extracted from the I18n. It is fully compatible with Rails 3, 4 and 5

Installation

For Bundler put the following in your Gemfile:


  gem 'i18n-active_record', :require => 'i18n/active_record'

Next create a active record model named Translation with the Rails Generator. Your migration should look like this:


  class CreateTranslations < ActiveRecord::Migration
    def self.up
      create_table :translations do |t|
        t.string :locale
        t.string :key
        t.text   :value
        t.text   :interpolations
        t.boolean :is_proc, :default => false

        t.timestamps
      end
    end

    def self.down
      drop_table :translations
    end
  end

With this translation model you will be able to manage your translation, and add new translations or languages through it.

To load I18n::Backend::ActiveRecord into your Rails application, create a new file in config/initializers named locale.rb.

A simple configuration for your locale.rb could look like this:


  require 'i18n/backend/active_record'
  I18n.backend = I18n::Backend::ActiveRecord.new

A more advanced example (Thanks Moritz), which uses YAML files and ActiveRecord for lookups:


  require 'i18n/backend/active_record'

  Translation  = I18n::Backend::ActiveRecord::Translation

  if Translation.table_exists?
    I18n.backend = I18n::Backend::ActiveRecord.new

    I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Memoize)
    I18n::Backend::Simple.send(:include, I18n::Backend::Memoize)
    I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)

    I18n.backend = I18n::Backend::Chain.new(I18n::Backend::Simple.new, I18n.backend)
  end

You may also configure whether the ActiveRecord backend should use destroy or delete when cleaning up internally.


I18n::Backend::ActiveRecord.configure do |config|
  config.cleanup_with_destroy = true # defaults to false
end

Usage

You can now use I18n.t('Your String') to lookup translations in the database.

Examples

  • http://collectiveidea.com/blog/archives/2016/05/31/beyond-yml-files-dynamic-translations/

Maintainers

  • Sven Fuchs
  • Tim Maslyuchenko