rails-localization

<img src=“https://secure.travis-ci.org/kot-begemot/rails-localization.png” />

The gem that allows to localize your Rails app through the Rack middleware in a very easy way.

Usage

  • First install the gem

    With Bundle

    #Gemfile
    gem "rails-localization"
    
    #console
    bundle install
    

    or with Gems

    gem install rails-localization
    
  • Now it should be added into routes

    # config/routes.rb
    TestApp::Application.routes.draw do
      localized({"en" => "English", "ru" => "Russian"}) do
        mount SubApp::Engine => '/sub', :as => :sub_app_engine
    
        get :users, :to => "users#index"
        get "users/with_locale", :to => "users#with_locale"
        get :welcome, :to => 'main#welcome'
    
        root :to => 'main#index'
      end
    
      get "users/without_locale", :to => "users#without_locale"
      get "users/with_defined_locale", :to => "users#with_defined_locale", locale: "en"
    end
    

    And that whould generate you something like that

    $ rake routes
               sub_app_engine     (/:locale)/sub                         SubApp::Engine {:locale=>/en|ru/}
                        users GET (/:locale)/users(.:format)             users#index {:locale=>/en|ru/}
            users_with_locale GET (/:locale)/users/with_locale(.:format) users#with_locale {:locale=>/en|ru/}
                      welcome GET (/:locale)/welcome(.:format)           main#welcome {:locale=>/en|ru/}
                         root     /(:locale)(.:format)                   main#index {:locale=>/en|ru/}
         users_without_locale GET /users/without_locale(.:format)        users#without_locale
    users_with_defined_locale GET /users/with_defined_locale(.:format)   users#with_defined_locale {:locale=>"en"}
    
    Routes for SubApp::Engine {:locale=>/en|ru/}:
    print_redirect GET /print_redirect(.:format) sub_app/main#print_redirect
           welcome GET /welcome(.:format)        sub_app/main#welcome
              root     /                         sub_app/main#index
    
  • Inside your application you can use it like that

    TestApp::Application.routes.url_helpers.users_path # => /users
    TestApp::Application.routes.url_helpers.users_path(:locale => "ru") # => /ru/users
    

    And that should also take into account the fact that you switched ‘I18n.locale`

    I18n.locale = :ru
    TestApp::Application.routes.url_helpers.users_path # => /ru/users
    

    So, the logic is **when ever current locale doesn’t match default one, it is added url**

  • Engines

    So, you can also localize an application, that will be mounted later on onto another one.

    SubApp::Engine.routes.draw do
      localized({"en" => "English", "ru" => "Russian"}) do
        get  :print_redirect, :to => 'main#print_redirect'
        get  :welcome, :to => 'main#welcome'
        root :to => 'main#index'
      end
    end
    
  • Accessing locales

    An easy thing

    I18n.locales[:main_app] # => {"en" => "English", "ru" => "Russian"}
    I18n.locales[:sub_app] # => {"en" => "English", "ru" => "Russian"}
    

**NB!** You can also predefine the default locale like ‘I18n.default_locale = “de”` in the initializers

Contributing to rails-localization

  • Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet

  • Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it

  • Fork the project

  • Start a feature/bugfix branch

  • Commit and push until you are happy with your contribution

  • Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright © 2012 E-Max. See LICENSE.txt for further details.