Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rails I18n 20081125

3,313 views

Published on

  • Be the first to comment

Rails I18n 20081125

  1. 1. Rails 2.2 i18nihower@handlino.com
  2. 2. The history of Rails I18n
  3. 3. Chaos & Painful
  4. 4. we have... • Ruby Gettext • DHH’s Localization • Globalize • Simple Localization • Gibberish
  5. 5. Problems • 一升級 Rails 就爛了 • 乏人維護,缺少支援 • 可恨的 Monkeypatches
  6. 6. Rails i18n project • 共通的 API • 可抽換 backend • 盡量簡單
  7. 7. Rails 2.2 • Powerful I18n API • Simple Backend
  8. 8. I18n API 簡單、一致
  9. 9. API methods • I18n.translate :hello • I18n.t :hello • t :hello • I18n.localize Time.now • I18n.l Time.now • l Time.now
  10. 10. Features • Flexible keys I18n.t :hello I18n.t "hello" • Scopes (aka namespaces) hello: 哈囉 account: hello: 你好 I18n.t “hello” # 哈囉 I18n.t "account.hello” # 你好
  11. 11. Features (cont.) • Interpolation message: "Thanks {{name}}!" I18n.t :message, :name => "ihower" # => "Thanks ihower!" • Pluralization # en-US :days => { :one => "one day" :other => "{{count}} days" } I18n.t :days, :count => 1 # => "one day" I18n.t :days, :count => 2 # => "2 days"
  12. 12. Backend 100% 可抽換
  13. 13. Simple Backend • Shipped asYAML files • You can also use plain Ruby files
  14. 14. Simple Backend • 使用YAML 或 plain Ruby file • 預設只有 en-US,請下載 http://github.com/svenfuchs/rails-i18n/ 感謝 Tsechingho 提供中文版本
  15. 15. YAML sample# Chinese (Taiwan) translations for Ruby on Rails # by tsechingho (http://github.com/tsechingho) "zh-TW": date: formats: default: "%Y-%m-%d" short: "%b%d日" long: "%Y年%b%d日" day_names: [星期天, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六] abbr_day_names: [日, 一, 二, 三, 四, 五, 六] month_names: [~, 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月] abbr_month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月] order: [ :year, :month, :day ] activerecord: errors: template: header: one: "有 1 個錯誤發生使得「{{model}}」無法被儲存。" other: "有 {{count}} 個錯誤發生使得「{{model}}」無法被儲存。" body: "下面欄位有問題:" messages: inclusion: "沒有包含在列表中" exclusion: "是被保留的" invalid: "是無效的" confirmation: "不符合確認值" accepted: "必须是可被接受的" empty: "不能留空" blank: "不能是空白字元" too_long: "過長(最長是 {{count}} 個字)" too_short: "過短(最短是 {{count}} 個字)" wrong_length: "字數錯誤(必須是 {{count}} 個字)" taken: "已經被使用" not_a_number: "不是數字" greater_than: "必須大於 {{count}}" greater_than_or_equal_to: "必須大於或等於 {{count}}" equal_to: "必須等於 {{count}}" less_than: "必須小於 {{count}}" less_than_or_equal_to: "必須小於或等於 {{count}}" odd: "必須是奇數" even: "必須是偶數"
  16. 16. Setup i18n 超簡單
  17. 17. environment.rb # 所有 config/locales/*.rb,yml 將被載入 config.i18n.load_path << Dir[File.join(RAILS_ROOT, 'config', 'locales', '*.{rb,yml}')] config.i18n.default_locale = :en
  18. 18. application.rb class ApplicationController < ActionController::Base before_filter :set_locale def set_locale session[:locale] = params[:locale] if params[:locale] I18n.locale = session[:locale] || I18n.default_locale end end
  19. 19. view 提供切換連結 • http://localhost:3000/?locale=en • http://localhost:3000/?locale=ja • http://localhost:3000/?locale=zh-TW • ....
  20. 20. 可抽換 Backend?
  21. 21. Google translate backend http://github.com/ihower/i18n_google_translate/ by ihower
  22. 22. environment.rb I18n.backend = I18n::Backend::GoogleTranslate.new I18n.default_locale = 'en'
  23. 23. Live demo!

×