Skip to content
Latest commit f8faa6c Oct 29, 2015 @ai Add tests for empty params
Failed to load latest commit information.
sinatra-r18n.gemspec Clean up gemspec files Dec 4, 2014

Sinatra R18n Plugin

Sinatra extension which provides i18n support to translate your web application.

It is a wrapper for R18n core library. See R18n documentation for more information.


  • Nice Ruby-style syntax.
  • Filters.
  • Flexible locales.
  • Custom translations loaders.
  • Translation support for any classes.
  • Time and number localization.
  • Several user language support.

How To

  1. Create translations dir ./i18n/.
  2. Add file with translation to ./i18n/ with language code in file name (for example, en.yml for English or en-us.yml USA English dialect). For example, ./i18n/en.yml:

      friends: Post only for friends
      tags: Post tags are %1
    comments: !!pl
      0: No comments
      1: One comment
      n: %1 comments
    html: !!html
      <b>Don't escape HTML</b>
  3. Add R18n to your Sinatra application:

    require 'sinatra/r18n'

    If your application inherits from Sinatra::Base also add:

    class YourApp < Sinatra::Base
      register Sinatra::R18n
      set :root, File.dirname(__FILE__)
  4. Add locale to your URLs. For example:

    get '/:locale/posts/:id' do
      @post = Post.find(params[:id])
      haml :post

    Or save locale in session, when user change it:

    before do
      session[:locale] = params[:locale] if params[:locale]
  5. Use translation messages in views. For example in HAML:

    %p=', '))
    %h2= t.comments(@post.comments.size)
  6. Print localized time and numbers. For example:

    l @post.created_at, :human
  7. Print available translations. For example in HAML:

        - r18n.available_locales.each do |locale|
            %a( href="/#{locale.code}/" )= locale.title


You can change default locale and translations dir:

R18n::I18n.default = 'ru'
R18n.default_places { './translations' }


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.