19
I18n feature in Rails2.2 Overview of recent Rails support for localization

I18n in Rails2.2

Embed Size (px)

DESCRIPTION

English slide introducing the i18n gem in Rails2.2

Citation preview

Page 1: I18n in Rails2.2

I18n feature in Rails2.2Overview of recent Rails support for localization

Page 2: I18n in Rails2.2

Who am I?

• Renaud Morvan (http://twitter.com/neleanth)

• 3 years of professional Rails Dev at http://feedback20.com

• App localized in 6 languages

• Used Ruby-Gettext-Package then switched to custom implementation

Page 4: I18n in Rails2.2

late ‘07: Turning Point

• Sep ‘07: Change in Rails patch policy delegating more power to the community

• Major I18n plugin dev regroup around a common patch: Get rid of monkey patch + common API

• Then lots of debate and no consensus

• Early ‘08: patch stalled

Page 5: I18n in Rails2.2

Eventually...

• Jul ’07 Sven Fuchs (Globalize plugin dev) get back to work, rewrite the patch

• Rails edge is patched and I18n gem is bundled with it.

• Released in Rails2.2

Page 6: I18n in Rails2.2

What is I18n Gem?

• A Common Api:module I18n# Sets the current locale pseudo-globally (threadsafe) def locale=(locale); end # Translates, pluralizes and interpolates a given key def translate(key, options = {}); end alias :t :translate # Localizes time, dates and numbers to local formatting. def localize(object, options = {}); end alias :l :localize ...end

Page 7: I18n in Rails2.2

What is I18n Gem?

• A backend implementing it (you can use your own)

class I18n::Backend:: Simple def load_translations(*filenames); end def store_translations(locale, data); end def translate(locale, key, options = {}); end def localize(locale, object, format = :default); endend

Page 8: I18n in Rails2.2

I18n.t basics 1/2

• Key: I18n.t 'date.formats.short' I18n.t :'date.formats.short'

• Scope: I18n.t 'date.formats.short' I18n.t 'formats.short', :scope => 'date' I18n.t 'short', :scope => 'date.formats' I18n.t 'short', :scope => ['date','formats']

• Pluralization: I18n.t :foo, :count => 0 # => 'Foos' I18n.t :foo, :count => 1 # => 'Foo' I18n.t :foo, :count => 2 # => 'Foos'

• Interpolation: given :foo => "foo {{bar}}"I18n.t :foo, :bar => 'toto' # => 'foo toto'

Page 9: I18n in Rails2.2

I18n.t Basics 2/2

• Missing translation: I18n.t :missing # raise I18n::MissingTranslationData

• Default (can be translation if :sym): I18n.t :missing, :default => 'default' # => 'default'

• Bulk: I18n.t :missing, :default => [:missing_too, 'default'] I18n.t [:'baz.foo', :'baz.bar']

• AllinOne:I18n.t ['attr1.blank', :'attr2.blank'], :count => 2, :scope => [:activerecord, :attributes], :default => [:'model.blank'], :attribute_name => 'attr1'# yuk !

Page 10: I18n in Rails2.2

I18n.l

• Time, TimeZone, DateTime I18n.l Time.zone.now, :format => 'long'# => "dimanche 30 novembre 2008 11:29:49 UTC"

• Date I18n.l Date.today, :format => 'long' # => "30 novembre 2008"

Page 11: I18n in Rails2.2

I18n API

• Simple and efficient for I18n in model code

• Minimal impact on Rails core code

• Provide I18n for any Rails plugin !

• Not that simple to implement backend: those features are MANDATORY for rails

• One method to Translate them all! => difficult to parse, optimize

Page 12: I18n in Rails2.2

I18n::SimpleBackend

• Implement the API and the features

• Storage YML (nested hash) or ruby

• Yet a bit slow:

Benchmark.realtime { 10000.times do I18n.t [:date, :format, :short]; end; }# => 1.50350284576416Benchmark.realtime {10000.times do _('date.formats.short') end; }# => 0.023993968963623

Page 13: I18n in Rails2.2

I18n::YourBackend ?

• You have to implement at least the exact same features and behavior for Rails I18n

• All extra features won’t be supported in other backend and should be implemented externaly

• Will make your 118n/L10n plugin work with all rails app and plugin

• No more monkey patching !

Page 14: I18n in Rails2.2

I18n in Rails

• Currently (Rails2.2):

• AR Validation errors

• Form errors

• Float Number / Currency (output only)

• Time/Date Format (on demand with I18n.l)

• Time/Date related helpers

Page 15: I18n in Rails2.2

I18n in Rails

• Rails in only bundled with :en locale but since Rails2.2rc2 it comes with a config/locale folder

• To bootstrap localization of you own rails app go to http://github.com/svenfuchs/rails-i18n/tree/master

• Would need a reference page where all keys used in rails are displayed, currently you have

Page 16: I18n in Rails2.2

I18n in Rails: niceties

• Time of custom AR validation message in class is over: class User < ActiveRecord::Base validates_presence_of :name end# will look at the different keys in this order'activerecord.errors.messages.models.user.attributes.name.blank''activerecord.errors.messages.models.user.blank''activerecord.errors.messages.blank'

It makes it possible to handle special case per langage and not in models

Page 17: I18n in Rails2.2

I18n in Rails: views

• In views you have the “t” helper:<%= t "my.message.here" %><%= t "my.plural.message.here", :count => 2 %>...

Its just an alias to I18n.t

Page 18: I18n in Rails2.2

Resources

• The I18n gem: http://github.com/svenfuchs/i18n/tree

• Rails translation for SimpleBackend: http://github.com/svenfuchs/rails-i18n/tree/master

• Example rails App: http://github.com/clemens/i18n_demo_app/tree/master

• Live: http://i18n-demo.phusion.nl/

Page 19: I18n in Rails2.2

Thank you

• Big big big thanks to Sven Fuchs and all the I18n team (matt, ...)

• Any question ?