我正在尝试完成两件事:
- 本地化“FieldMustBeDate”和“FieldMustBeNumeric”的“内置”错误消息。
- 本地化您会遇到的其他一些错误消息,例如“PropertyValueRequired”。
通过使用http://forums.asp.net/t/1862672.aspx/1解决问题 1 和MVC 4 忽略问题 2 的 DefaultModelBinder.ResourceClassKey 我已经设法让两者都在本地工作。
但是,一旦我发布到网站,“内置”错误消息默认恢复为英文,而其他错误消息保持本地化。
我已经阅读了几个应该避免使用 App_GlobalResources 的地方,但是如果不使用它,我将无法完成问题 1。
我创建了一个名为“WebResources.resx”的 .resx 文件,将 Build Action 设置为“Embedded”,将 Copy to Output Directory 设置为“Do no Copy”,将 Custom Tool 设置为“PublicResXFileCodeGenerator”并设置 Custom工具命名空间到“资源”。项目本身设置为仅发布需要的文件。
我的 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";
}
}
}
这是在本地工作,但是有没有人知道如何让“内置”消息在发布后工作?
谢谢您的帮助!
最好的问候, 安德烈亚斯