Localize is a small library for internationalization. Example:
puts t.hello # => Hola puts t.hello.world # => Hola, mundo puts t.hello('world', 'space') # => Hello world and space puts f 380441234567 # => +380 (44) 123-45-67 puts l Time.utc(2000, "jan"), :short # => Sat 01-Jan-00 puts l 1200.05 # => 1.200,05
gem install localize gem install xml-simple # if your localization file will be xml format require 'localize'
Set the store, yaml or plain for now, xml and others planned (default yaml):
Localize.store = :plain
Specify location of the translation files:
Localize.location = 'lib/translations'
if store set to plain, location must be a ruby hash:
Localize.location = {'text' => { 'hello' => {'world' => 'mundo' } }
Set locale:
Localize.locale = :esp
and default locale (optional, en by default):
Localize.default_locale = :ru
Now, load the translation:
t = Localize.translate f = Localize.f l = Localize.l
sinatra.rb contains predefined helpers t
, l
and f
and set locale from session['locale']
require 'localize/sinatra' Localize.default_locale = :ru Localize.location = 'locales' # Change to your path
Translation file must contain two sections: ‘text’ and ‘formats’.
Text section contains translations and can have an unlimited nesting:
text: hello: 'hola' # t.hello foo: bar: 'baz' # t.foo.bar
You may interpolate you translations:
text: hello: 'Hello ${1} and ${2}!' foo: 'Foo ${2}, ${1} or ${1}, ${3}'
…in translation, and…
t.hello('world', 'space') t.foo('bar', 'baz', 'fee')
…in view produce ‘Hello world and space!’ and ‘Foo baz, bar or bar, fee’
Formats section contains different localization rules and formats:
formats: phone: full: '+### (##) ###-##-##' short: '###-##-##' number: separator: ',' dec_point: '.'
Phone subsection must have format named ‘full’, and may have arbitrary names which can called by second parameter in f method:
f(78977654) # Full format f(12345678, :short) f(32145687, :other)
Date subsection must contains translations for months and days of the week. Also set formats in strftime format:
formats: date: format: full: '%a %b %d %H:%M:%S %Z %Y' short: '%a %d-%B-%y' day_names: short: - Sun - Mon - Tue - Wed - Thu - Fri - Sat full: - Sunday - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday mon_names: short: - Jan - Feb - Mar - Apr - May - Jun - Jul - Aug - Sep - Oct - Nov - Dec full: - January - February - March - April - May - June - July - August - September - October - November - December