Project

r18n-rails

0.0
No release in over 3 years
Out-of-box R18n support for Ruby on Rails. It is just a wrapper for R18n Rails API and R18n core libraries. R18n has nice Ruby-style syntax, filters, flexible locales, custom loaders, translation support for any classes, time and number localization, several user language support, agnostic core package with out-of-box support for Rails, Sinatra and desktop applications.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Development

~> 0.5.0
~> 0.7.1
~> 3.10
~> 1.6
~> 0.5.1
~> 0.21.0
~> 1.4
~> 0.11.0

Runtime

>= 5.0, < 7
 Project Readme

R18n for Rails

Cirrus CI - Base Branch Build Status Codecov branch Code Climate Depfu License Gem

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.

Features

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

  • Nice Ruby-style syntax.
  • Filters.
  • Model Translation (or any Ruby object).
  • Auto-detect 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 auto-detect 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):

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

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

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

    user:
      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 'user.name',  name: 'John'
    t 'user.count', count: 5

    or R18n syntax:

    t.user.name(name: 'John') # for Rails I18n named variables
    t.user.name('John')       # for R18n variables
    t.user.count(5)
  6. Print dates and numbers in user's tradition:

    l Date.today, :standard #=> "2009-12-20"
    l Time.now,   :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 svenfuchs/rails-i18n 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|
      translation[user.gender]
    end

    And use in translations:

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

    and application:

    t.log.signup(user)

License

R18n is licensed under the GNU Lesser General Public License version 3. You can read it in LICENSE file or in www.gnu.org/licenses/lgpl-3.0.html.

Author

Andrey “A.I.” Sitnik andrey@sitnik.ru