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.
-
Create translations dir
./i18n/
. -
Add file with translation to
./i18n/
with language code in file name (for example,en.yml
for English oren-us.yml
USA English dialect). For example,./i18n/en.yml
:post: 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>
-
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, __dir__
-
Add locale to your URLs. For example:
get '/:locale/posts/:id' do @post = Post.find(params[:id]) haml :post end
Or save locale in session, when user change it:
before do session[:locale] = params[:locale] if params[:locale] end
Warning: such hooks have to be before
register Sinatra::R18n
since R18n version 5 has no more lazy evaluation and initializes immediately. See #3 or specs / test application. -
Use translation messages in views. For example in HAML:
%p= t.post.friends %p= t.post.tags(@post.tags.join(', ')) %h2= t.comments(@post.comments.size)
-
Print localized time and numbers. For example:
l @post.created_at, :human
-
Print available translations. For example in HAML:
%ul - r18n.available_locales.each do |locale| %li %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 www.gnu.org/licenses/lgpl-3.0.html.
Andrey “A.I.” Sitnik andrey@sitnik.ru