Skip to content
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib Remove Ruby 1.8 support Dec 4, 2014
r18n-rails.gemspec Clean up gemspec files Dec 4, 2014

R18n for Rails

R18n-rails is a gem to add out-of-box R18n support to Rails I18n.

It is a wrapper for R18n Rails API and R18n core libraries. See R18n core documentation for more information.


R18n for Rails is fully compatibile with Rails I18n, and add extra features:

  • Nice Ruby-style syntax.
  • Filters.
  • Model Translation (or any Ruby object).
  • Autodetect user locales.
  • Flexible locales.
  • Total flexibility.

See full features in main README.

How To

  1. Add r18n-rails gem to your Gemfile:

    gem 'r18n-rails'

    Now R18n will autodetect user locales.

  2. Define your way to set locale manually. R18n will find it in params[:locale] or session[:locale]. Best way is a put optional locale prefix to URLs:

    match ':controller/:action'
    match ':locale/:controller/:action'
  3. Print available translations, to choose from them manually (and to help search engines):

        - r18n.available_locales.each do |locale|
            %a( href="/#{locale.code}/" )= locale.title
  4. Translations in I18n format are stored in config/locales/locale.yml:

        name: "User name is %{name}"
          zero: "No users"
          one:  "One user"
          many: "%{count} users"

    Translations in R18n format go to app/i18n/locale.yml:

      name: User name is %1
      count: !!pl
        0: No users
        1: 1 user
        n: %1 users
  5. Use translated messages in views. You can use Rails I18n syntax:

    t '',  name: 'John'
    t 'user.count', count: 5

    or R18n syntax: 'John') # for Rails I18n named variables'John')       # for R18n variables
  6. Print dates and numbers in user’s tradition:

    l, :standard #=> "20/12/2009"
    l,   :full     #=> "20th of December, 2009 12:00"
    l 1234.5                #=> "1,234.5"
  7. Translate models. You can use R18n::Translated mixin for any Ruby class, not only for ActiveRecord models

    1. Add to migration columns for each of the supported locales, named as name_locale:

        t.string :title_en
        t.string :title_ru
        t.string :text_en
        t.string :text_ru
    2. Add R18n::Translated mixin to model:

      class Post < ActiveRecord::Base
        include R18n::Translated
    3. Call translations method in model with all columns to be translated:

      translations :title, :text

      Now model will have virtual methods title, text, title= and text=, which will call title_ru or title_en and etc based on current user locales.

  8. Download translations for Rails system messages (validation, etc) from and put them to config/locales/ (because them use Rails I18n format).

  9. Add your own translations filters to app/i18n/filters.rb:

    R18n::Filters.add('gender') do |translation, config, user|

    And use in translations:

      signup: !!gender
        male: Он зарегистрировался
        female: Она зарегистрировалась

    and application:



R18n is licensed under the GNU Lesser General Public License version 3. You can read it in LICENSE file or in


Andrey “A.I.” Sitnik

Something went wrong with that request. Please try again.