2010-09-03 31 views
5

我想使用數據註釋來處理我的Silverlight應用程序中的驗證。內置的驗證屬性(主要是StringLength和Required)非常棒,讓生活變得非常簡單。但是,他們似乎有一個關鍵缺陷。例如,如果我的語言環境設置爲fr-CA,則驗證例外仍爲英語 - 「名稱字段是必需的」,「字段名稱必須是最大長度爲20的字符串」等。Silverlight 4:內置數據註釋驗證異常的本地化

這是一個主要的問題。這意味着如果我想要內置驗證屬性的本地化錯誤消息,我必須在業務層的每個validatable屬性中手動添加ErrorMessage/ErrorMessageResourceType到的每個驗證屬性,併爲每個錯誤消息手動添加翻譯後的字符串。

所以......我錯過了什麼嗎?有沒有辦法自動將內置的驗證屬性本地化?還是其他更簡單的方法呢?還是我完全不幸運,並堅持手動路線?

任何意見或想法,將不勝感激。

回答

6

好吧,我通過簡單的子類化內置的驗證屬性來解決這個問題。問題解決了!

internal class LocalizedStringLengthAttribute : StringLengthAttribute 
{ 
    public LocalizedStringLengthAttribute(int maximumLength) 
     : base(maximumLength) 
    { 

    } 

    public override string FormatErrorMessage(string name) 
    { 
     return String.Format(CultureInfo.CurrentUICulture, LanguageResources.Resource.Error_StringLength, name, MaximumLength); 
    } 
} 
+0

我把你的解決方案與修改WCF RIA生成代碼的能力結合起來(http://www.scip.be/index.php?Page=ArticlesNET36)。現在我可以用我的實現來替換生成的[Required]屬性。感謝您分享這一點! – Nasser 2012-08-14 13:12:11