Rails I18n 20081125

2,465 views
2,404 views

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,465
On SlideShare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
82
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

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!

×