2014-01-17 74 views
0

我有一個叫Presentation的模型。它具有在我的i18n語言環境文件中的activerecord.attributes.presentation下命名的所有屬性。助手爲i18n翻譯form_for以外的模型屬性?

我想以表格概述的形式爲此模型創建一個索引視圖。該代碼,目前看起來是這樣的:

<table class="table"> 
    <thead> 
    <tr> 
     <th><%= t('activerecord.attributes.presentation.title') %></th> 
     <th><%= t('activerecord.attributes.presentation.default_duration') %></th> 
     <th><%= t('activerecord.attributes.presentation.bg_color') %></th> 
    </tr> 
    </thead> 

    <tbody> 
    <%= render @presentations %> 
    </tbody> 
</table> 

這工作好,但有寫出來的全鍵並沒有真正似乎Rails的方式給我。如果翻譯缺失,或者模型的這種屬性不存在,它也不會以任何明顯的方式失敗。

<%= f.label :title %>?在form_for塊內自動輸出翻譯後的屬性名稱作爲基於符號的標籤。是否有任何形式的視圖助手以相同的方式工作,但在表單之外?像這樣的東西(這是不是最好的代碼示例中,我知道):

<%= attributes_of User do |attr| %> 
    <th><%= attr.t :title %></th> 
    <th><%= attr.t :default_duration %></th> 
    <th><%= attr.t :bg_color %></th> 
<% end %> 

回答

4

你能做的最好的是:

<% I18n.with_options(scope: 'activerecord.attributes.presentation') do |i18n| %> 
    <table class="table"> 
    <thead> 
     <tr> 
     <th><%= i18n.t :title %></th> 
     <th><%= i18n.t :default_duration %></th> 
     <th><%= i18n.t :bg_color %></th> 
     </tr> 
    </thead> 

    <tbody> 
     <%= render @presentations %> 
    </tbody> 
    </table> 
<% end %> 

非常小心:你必須使用國際化不是I18n,i18n由with_options塊產生。
對於其他鍵你只是使用I18n這是不是強制範圍。

+0

感謝@yerforkferchips的編輯,我沒看出錯誤。 –

+0

這很好,謝謝。當我使用像'i18n.t:titl'這樣的東西時,它也失敗了「不真實地」(實際上在視圖中打印'翻譯缺失'),這正是我想要的。 – yerforkferchips

+1

很高興在這裏。我不那麼喜歡這種語法,但你可以創建一個像attributes_for或類似的東西。 –

4

可以使用human_attribute_for方法

Presentation.human_attribute_for :title