利用 Resource file 建立多國語系驗證訊息

在建立多國語系網站的時候,我們可以利用 Resource file 來幫助建置。

  • ASP.NET MVC 2 以上

如果有利用到 ValidationAttritube 來幫忙做資料驗證的話,最一般的使用方法是。

[Required(ErrorMessage = "標題為必填欄位")]
public string Title { get; set; }

在一般的狀況下這樣就很夠用了,不過由於需要多國語系,驗證訊息當然也要讓外國人看得懂。這邊的錯誤沒有辦法這樣設定了。

ErrorMessageResourceName

沒想到這些需求都很貼心地已經有相關功能了,我一開始還打算繞一大圈來處理。

[Required(ErrorMessageResourceName = "TitleIsRequired")]
public string Title { get; set; }

利用 ErrorMessageResourceName 的屬性,可以將 ErrorMessage 根據當下語系對應的 Resource file 裡面找出來。

ErrorMessageResourceType

光是只有設定 ErrorMessageResourceName  是不夠的。

[Required(ErrorMessageResourceName = "TitleIsRequired")
,ErrorMessageResourceType = typeof(ErrorMessage)]
public string Title { get; set; }

還需要設定 ErrorMessageResourceType  屬性,這邊的 ErrorMessageResourceType  就是對應 Resource 的類別。

Could not find any resources appropriate for the specified culture or the neutral culture.

在執行的時候或許會遇到這個錯誤,這也就是在輸出驗證訊息的時候找尋不到 Localize 的 Resource 的錯誤。

image

如果有用到自訂的 ValidationAttritube 實作 IClientValidatable

public IEnumerable<ModelClientValidationRule> GetClientValidationRules
(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ValidationType = "required",
ErrorMessage = this.ErrorMessageString
};
}

ErrorMessage = this.ErrorMessageString 才是針對多國語系的輸出。


如何讓 App_GlobalResources 裡的全域資源檔變成公開類別

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *