2012-02-01 134 views
2

在我的應用程序中,我想翻譯驗證錯誤行:「3個錯誤已禁止保存此訂單」。帶翻譯模型名稱的Rails i18n

顯然,這可以使通用的,以適應所以在我de.yml場所模板我activerecord.errors.template.header這樣使用這個翻譯所有型號:

activerecord: 
    errors: 
     template: 
     header: 
      one: "Konnte %{model} nicht speichern: ein Fehler." 
      other: "Konnte %{model} nicht speichern: %{count} Fehler." 

現在的問題是如何稱這種驗證而不重複自己很多。很明顯,你可以簡單地通過調用這個:

t('activerecord.errors.template.header', :count => @order.count, :model => Order) 

但這不會翻譯下訂單(訂單被稱爲Bestellung德國)

我可以繼續,並通過調用轉換調用內部再次翻譯解決這個問題:

t('activerecord.errors.template.header', :count => @order.count, :model => t('activerecord.models.#{Order}')) 

但這真的感覺就像一個非常糟糕的解決方案,我敢肯定,必須有一個在辦法做到這一點(因爲通常是做在Rails的髒東西清潔方式)建成。

任何關於如何處理這種翻譯的建議方式的指針將不勝感激。

+0

我還沒有真正看到問題,這... – sevenseacat 2012-02-01 10:13:35

+0

我想知道是否有應該在這裏使用一個輔助(否則我會寫我自己的).. 由於通常的嫌疑犯(形式助手等)都默認使用I18n,在這種情況下,它似乎非常醜陋.. – Tigraine 2012-02-01 10:23:54

回答

6

您是否試過以下方法,使用:model => Order.model_name.human而不是:model => Order

+0

沒有方法human_name on ActiveRecord :: Base(在rails c中試過) – Tigraine 2012-02-02 08:33:32

+0

對不起,它是Order.model_name.human 。我剛剛編輯了我的答案。 – Florent2 2012-02-09 10:39:57