淺談Ruby on Rails的國際化_ruby專題

來源:互聯網
上載者:User

視圖、模型與控制器裡不應使用語言相關設定與字串。這些文字應搬到在 config/locales 下的語言檔案裡。

當 ActiveRecord 模型的標籤需要被翻譯時,使用activerecord 範圍:

en: activerecord:  models:   user: Member  attributes:   user:    name: "Full name"

然後 User.model_name.human 會返回 "Member" ,而 User.human_attribute_name("name") 會返回 "Full name"。這些屬性的翻譯會被視圖作為標籤使用。

把在視圖使用的文字與 ActiveRecord 的屬性翻譯分開。 把給模型使用的語言檔案放在名為 models 的檔案夾,給視圖使用的文字放在名為 views 的檔案夾。

    當使用額外目錄的語言檔案組織完成時,為了要載入這些目錄,要在 application.rb 檔案裡描述這些目錄。

  # config/application.rb  config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]

把共用的本土化選項,像是日期或貨幣格式,放在 locales 的根目錄下。

使用精簡形式的 I18n 方法: I18n.t 來取代 I18n.translate 以及使用 I18n.l 取代 I18n.localize。

使用 "懶惰" 查詢檢視中使用的文字。假設我們有以下結構:

en: users:  show:   title: "User details page"

users.show.title 的數值能這樣被 app/views/users/show.html.haml 查詢:

= t '.title'

在控制器與模型使用點分隔的鍵,來取代指定 :scope 選項。點分隔的調用更容易閱讀及追蹤層級。

# 這樣子調用I18n.t 'activerecord.errors.messages.record_invalid'# 而不是這樣I18n.t :record_invalid, :scope => [:activerecord, :errors, :messages]


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.