• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Rails Internationalization
 

Rails Internationalization

on

  • 12,955 views

An overview of the Rails i18n functionality and lessons learned from working to internationalize our application. Official Rails i18n support is still relatively new & continuing to mature. Will also ...

An overview of the Rails i18n functionality and lessons learned from working to internationalize our application. Official Rails i18n support is still relatively new & continuing to mature. Will also cover our Translator plugin we're developing to simplify the process of externalizing strings & testing an internationalized app.

Statistics

Views

Total Views
12,955
Views on SlideShare
12,723
Embed Views
232

Actions

Likes
1
Downloads
40
Comments
1

9 Embeds 232

http://graysky.org 77
http://www.slideshare.net 70
http://bostonrb.org 64
http://dancroak.tumblr.com 9
https://www.linkedin.com 4
http://www.bostonrb.org 3
http://dancroak.com 2
http://www.linkedin.com 2
http://localhost 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • We use phrase (phraseapp.com) to manage the i18n and l10n infrastructure in our rails apps. Definitely worth checking it out!
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • - Turn off Growl / IM / Twitterffic / Gmail notifications <br />
  • <br />
  • <br />
  • - Quick overview of Rails and i18n. <br /> - Long topic -- people write books on this! <br />
  • - “m2e c6n” <br /> - Better at computer languages than human ones <br /> - Not an I18n expert / knowledge welcome <br /> - SML has users from every country <br /> - Talk comes from our work to i18n our Rails app <br />
  • - Ask: how many have had pleasure of internationalizing an application? <br /> - 0: Rails 1.2 added UTF-8 support for string manipulation. Ruby 1.9 adds real UTF-8 support <br /> - 1: DHH (Dane) + Matz (Japanese) == English-only? <br /> - 1: Rails core is now i18n’d, and only localized to English <br />
  • - Can affect data model! Address shouldn’t expect 5-digit ZIP code <br /> - People might not use “first name” “last name” <br /> - A mailbox icon might not register as “email”. Images of red traffic light for “stop”. <br />
  • - Lots of issues to think about <br /> - Sorry for the bad Spanish <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • - The more languages you see, the more Erlang & Haskell look normal <br /> - If you like gory details about diacritic marks, tertiary sorting criteria and standards you’ll love this! <br />
  • <br />
  • - Extraction from what we’ve learned at SML <br /> - End up having some strings in controllers (flash), mailers (subject lines), models (errors) <br /> - Mention scoping backoff for key hierarchy <br />
  • <br />
  • - British English vs. American English <br /> - In Japan, but prefer English <br /> <br />
  • <br />
  • <br />

Rails Internationalization Rails Internationalization Presentation Transcript

  • Rails Internationalization Wednesday, March 11, 2009
  • Slides at: http://graysky.org/public/rails_i18n_talk.pdf Wednesday, March 11, 2009
  • Can Rails Scale? Wednesday, March 11, 2009
  • Can Rails Scale? ... to Multiple Languages? Wednesday, March 11, 2009
  • Agenda • Who is Mike? • Internationalization (i18n) Overview • Rails Support for i18n • Pitfalls • Translator plugin • Further Reading Wednesday, March 11, 2009
  • Mike Champion • Speaks English and Spanish very poorly • Heading to RailsConf - see you in Las Vegas? • The Usual URIs • graysky.org • twitter.com/graysky • github.com/graysky • Developer at SnapMyLife • Mobile photo sharing • Global user base Wednesday, March 11, 2009
  • Iñtërnâtiônàlizætiøn • Level 0: App handles utf-8 data • Database & database.yml configuration • Multi-byte string handling (since Rails 1.2 / Ruby 1.9) • Ruby 1.8: “café”.length => 5 • Rails MB: “café”.mb_chars.length 4 => • Level 1: App is internationalized • Strings extracted, dates, etc. (support in Rails 2.2) • Level 2: App is localized • Strings translated / tested (on your own - good luck!) Wednesday, March 11, 2009
  • I18n Concerns • Strings • Concatenation is evil when used to form sentences • Sorting & Searching • Swedish: z < ö while in German: ö < z • Dates/Times & Timezones • 12/4/09 vs. 4/12/09 • Units, Addresses & Currency • Miles vs. kilometers, 5-digit zip codes • Cultural • Surname & given name • Icons, colors, etc. Wednesday, March 11, 2009
  • ¡Dios mío! (Lo Siento) Wednesday, March 11, 2009
  • I18n Module • I18n library in ActiveSupport for 2.2 • Locale files in config/locale • I18n.load_path += File.join(“more.yml”) • Simple backend uses YAML (and Ruby) files: en: say_hello: 'Hello World' date: short: “%Y-%m-%d” I18n.translate('say_hello') I18n.localize(Time.now, :format => :short) Wednesday, March 11, 2009
  • I18n Module, cont. • Variable interpolation say_hello: 'Hello {{name}} World' I18n.t('say_hello', :name =>'Ruby') • Pluralization (only supports some languages) minutes_ago: one: '1 minute ago' other: '{{count}} minutes ago' I18n.t('minutes_ago', :count => 2) Wednesday, March 11, 2009
  • Rails I18n • Internationalized ActiveSupport for: • Numbers - number_with_delimiter, etc. • Datetime - distance_of_time_in_words, etc. • Currency - number_to_currency • Localized views - index.de.erb.html (Rails 2.3) • Useful if translating to one other language Wednesday, March 11, 2009
  • International Models* • Map model name & attributes to human-readable strings using I18n lookup • User.human_name() => “Customer” • User.human_attribute_name(‘pin’) => “Password” • Useful to easily change user-visible column names • Translate ActiveRecord validation errors • validates_presence_of :pin • activerecord.errors.messages.models.user.attributes.pin.blank: “Password can’t be blank, yo” * Not the Exciting Kind... Wednesday, March 11, 2009
  • Sorting (aka Collation) • Example: Germans, French and Swedes sort the same characters differently • MySQL supports different collation algorithms • utf8_general_ci - faster, less correct • utf8_unicode_ci - slightly slower, better • implements Unicode Collation Algorithm • http://www.unicode.org/reports/tr10/ • Haven’t seen a Ruby implementation Wednesday, March 11, 2009
  • Pitfalls • Gems & plugins may not be i18n’d • Embedded links/markup are painful • “You <span>must</span> out my <%= link_to(“awesome blog”, ‘http://foo’) %> today!” • Prefer label : value when possible • Text verbosity will change layouts. • Duplicate keys shadow each other in yml • MY_ERROR_MSG = t(‘bad_password’) • Careful with fragment/action caching Wednesday, March 11, 2009
  • Translator • I18n integration could be more Rails-y • Automatically determines scoping using a convention • Adds “t” method to views, models, controllers, mailers • t(‘title’) in blog_posts/show.erb will fetch t(‘blog_posts.show.title’) • Test helper to any catch missing translations • Pseudo-translation (ex. “[My Blog]”) to find missing extractions • Useful for testing layouts when text expands in other language • Locale fallback to default_locale if cannot find string • Plugin at: http://github.com/graysky/translator Wednesday, March 11, 2009
  • Translator Key Convention en: # controller blog_posts: # typical actions index: title: quot;My Blog Postsquot; # footer partial (non-shared) footer: copyright: quot;Copyright 2009quot; # Layouts layouts: blog_layout: blog_title: quot;The Blog of Rickyquot; # ActionMailers blog_comment_mailer: comment_notification: subject: quot;New Comment Notificationquot; # ActiveRecord (note singular) blog_posts: byline: quot;Written by {{author}}quot; Wednesday, March 11, 2009
  • Determining Locale • Locale more than just Language • User Preference • Domain name - foo.com vs. foo.de • Path prefix - foo.com/de/blog_posts • HTTP Accept-Language Header • zh-Hans (simplified Chinese) => “zh” • IP Geolocation • GeoIP Lite Country database Wednesday, March 11, 2009
  • Further Reading • Rails I18n Guide • http://guides.rubyonrails.org/i18n.html • i18n_demo_app • http://github.com/clemens/i18n_demo_app • Rails i18n Group • http://groups.google.com/group/rails-i18n • Translate - web ui for yml translatations • http://github.com/newsdesk/translate • Unicode Common Locale Data Repository (CLDR) • http://www.unicode.org/cldr/ • “Survival Guide to i18n” (not Rails specific) • http://www.intertwingly.net/stories/2004/04/14/i18n.html Wednesday, March 11, 2009
  • Questions? Wednesday, March 11, 2009