2013-07-28 47 views
1

我有一個國際化的文件爲:軌道4 - 從自定義驗證傳遞變量本地化

 
en: 
    activemodel: 
    errors: 
     messages: 
     email_address: "%{email} is not a valid email" 

而且我對電子郵件中的自定義的驗證:

 
class EmailFormatValidator < ActiveModel::EachValidator 
    def validate_each record, attribute, value 
    record.errors.add attribute, (options[:message] || :email_address) unless 
    value =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/ 
    end 
end 

如何傳遞%{email}從驗證器到i18n yml文件的值?我不斷收到此錯誤:

missing interpolation argument :email in "%{email} is not a valid email" ({:model=>"Signup", :attribute=>"Email", :value=>"sdsdfsdf"} given) 

回答

2

在錯誤消息的翻譯model名字,翻譯attribute名稱,value隨時爲您提供插值。

正如你還可以看到異常消息:

missing interpolation argument :email in "%{email} is not a valid email" ({:model=>"Signup", :attribute=>"Email", :value=>"sdsdfsdf"} given)

所以你需要使用%{value}得到錯誤消息的實際值"sdsdfsdf"

email_address: "%{value} is not a valid email" 

這將顯示:Email sdsdfsdf is not a valid email 。但是,如果你想改變如何所有消息格式錯誤,你可以在本地化errors.format項下做到這一點:

en: 
    errors: 
    # The default format to use in full error messages. "%{attribute} %{message}" 
    format: "%{message}" 
+0

感謝。發佈這個問題後,我很快就明白了這一點。但我得到這個字符串'電子郵件sdsdfsdf不是一個有效的電子郵件',你可以看到這個字符串以'Email'開頭,我不想要這個字符串,這甚至不是yml中字符串的一部分。我想字符串應該是'sdsdfsdf不是一個有效的電子郵件' – JVK

+0

@JVK我已經更新了我的答案,以一種方式如何更改整個應用程序的錯誤消息格式。你不能在[source](https://github.com/rails/rails/blob/master/activemodel/lib/active_model/errors.rb#L370-L379)中查看一個屬性。 – nemesv

+0

謝謝@nemesv我明白了,並選擇了你的答案。不幸的是,這將影響驗證中的所有錯誤消息,所以我可能不得不妥協,並讓我的錯誤消息看起來像只有:( – JVK