Cat*_*ICU 3 c# validation internationalization asp.net-mvc-4
例如,我想要这个默认的ASP.NET MVC 4验证消息:The value 'qsdqsdqs' is not valid for Montant用法语显示.
我找到了这个软件包http://nuget.org/packages/Microsoft.AspNet.Mvc.fr/并安装了它,但我该如何让它工作?
我添加<globalization culture="fr-FR" uiCulture="auto:fr" />到web.config并引用了dll,但消息仍然是英文
首先,您应该将您的消息保存在Resources文件中:
Resources/ErrorMessages.resx // default messages
Resources/ErrorMessages.fr.resx // for french
Run Code Online (Sandbox Code Playgroud)
在服务器端,它变得很容易,您可以通过向模型添加属性来实现.这样做:
[Required(ErrorMessageResourceType = typeof(Resources.ErrorMessages), ErrorMessageResourceName = "FieldRequired")]
Run Code Online (Sandbox Code Playgroud)
其中"FieldRequired"是Resources.ErrorMessages中的一个字段
棘手的部分是当您希望客户端验证也能正常工作时.您必须创建自己的属性类,该属性类扩展其中一个属性并实现IClientValidatable.
你是这样的:
public class CustomRequiredAttribute : RequiredAttribute, IClientValidatable
{
public override string FormatErrorMessage(string name)
{
return String.Format(ErrorMessages.FieldRequired, name);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRequiredRule(String.Format(ErrorMessages.FieldRequired, metadata.DisplayName));
return new[] { rule };
}
}
Run Code Online (Sandbox Code Playgroud)
从现在开始,您在模型中使用CustomRequired而不是Required.您也不必每次都指定消息.
编辑
现在我看到你对SynerCoder答案的评论 - 你不想自己翻译消息.嗯,我不认为这是正确的方法.即使您找到了可以为您翻译标准消息的内容,它也不会翻译任何自定义消息,因此您最终可能会混合两种方法.这通常会导致您不知道如何咬人的魔法错误.我强烈建议你自己做翻译(这不是很多 - 大约20个左右?).这样做的好处是灵活的解决方案,没有意外错误.
| 归档时间: |
|
| 查看次数: |
11106 次 |
| 最近记录: |