我試圖完成兩兩件事:本地化ASP.NET MVC 4使用App_GlobalResources文件
- 本地化「內置的」錯誤消息「FieldMustBeDate」和「FieldMustBeNumeric」。
- 本地化您可能遇到的其他一些錯誤消息,例如「PropertyValueRequired」。
通過使用問題1的http://forums.asp.net/t/1862672.aspx/1和問題2的MVC 4 ignores DefaultModelBinder.ResourceClassKey我設法讓本地工作。
但是,只要我發佈到網站,「內置」錯誤消息默認返回英語,而其他錯誤消息保持本地化。
我已經讀了幾個地方,應該避免使用App_GlobalResources,但是我無法完成問題1而不使用它。
我已經創建了名爲「WebResources.resx」的.resx文件,將生成操作設置爲「嵌入」,將複製到輸出目錄設置爲「不要複製」,將自定義工具設置爲「PublicResXFileCodeGenerator」並將自定義工具名稱空間設置爲「資源」。 項目本身被設置爲只發布需要的文件。
我的Global.asax.cs包含以下(相關)代碼:
ClientDataTypeModelValidatorProvider.ResourceClassKey = "WebResources";
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(RequiredAttribute),
typeof(MyRequiredAttributeAdapter));
和類MyRequiredAttributeAdapter包含以下代碼:
public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
public MyRequiredAttributeAdapter(
ModelMetadata metadata,
ControllerContext context,
RequiredAttribute attribute
)
: base(metadata, context, attribute)
{
if (attribute.ErrorMessageResourceType == null)
{
attribute.ErrorMessageResourceType = typeof(Resources.WebResources);
}
if (attribute.ErrorMessageResourceName == null)
{
attribute.ErrorMessageResourceName = "PropertyValueRequired";
}
}
}
這是在本地工作但沒有任何人有任何關於如何在發佈之後讓「內置」信息起作用的想法?
謝謝你的幫助!
最好的問候, 安德烈亞斯
謝謝!這個問題一直讓我瘋狂! – KTW