【问题标题】:The field must be a number. How to change this message to another language?该字段必须是数字。如何将此消息更改为另一种语言?
【发布时间】:2012-08-19 10:21:24
【问题描述】:

如何更改所有 int 字段的消息,而不是说:

The field must be a number英文,显示:

El campo tiene que ser numerico 西班牙语。

有办法吗?

【问题讨论】:

  • 何时显示此消息?
  • 在真正改变英语消息为西班牙语消息将是目标
  • 对不起,我想在 texbox 中显示该消息,因为它是 model.int 有人在上面写字符串,jquery.validate 和 jquery.validate.unobtrusive 用英文显示该消息(我需要那个我所有的 int 字段的消息都是西班牙语)

标签: asp.net-mvc validation localization numbers data-annotations


【解决方案1】:

如果您碰巧使用的是 ASP.NET MVC 4 以上版本,请查看此帖子:

Localizing Default Error Messages in ASP.NET MVC and WebForms

基本上,您必须在Global.asaxApplication_Start() 方法中添加以下代码:

 ClientDataTypeModelValidatorProvider.ResourceClassKey = "Messages";
 DefaultModelBinder.ResourceClassKey = "Messages";

在 Visual Studio 的解决方案资源管理器中右键单击您的 ASP.NET MVC 项目,然后选择Add => Add ASP.NET Folder => App_GlobalResources

现在在名为Messages.resx 的文件夹中添加一个.resx 文件。

最后在.resx文件中添加以下字符串资源:

Name                   Value
====                   =====
FieldMustBeDate        The field {0} must be a date.
FieldMustBeNumeric     The field {0} must be a number.
PropertyValueInvalid   The value '{0}' is not valid for {1}.
PropertyValueRequired  A value is required.

你应该很高兴。

请注意,您感兴趣的值是FieldMustBeNumeric。要将其本地化为西班牙语,您必须添加另一个名为Messages.es.resx 的资源文件。在这个特定的.resx 文件中,将资源值替换为:

Name                Value
====                =====
FieldMustBeNumeric  El campo {0} tiene que ser numerico.

如果你碰巧使用的是 ASP.NET MVC 3 以下,这个解决方案可以帮助你达到同样的效果:https://stackoverflow.com/a/2551481/114029

【讨论】:

  • @ivowiblo: 真的......你遇到了什么问题?也许我可以帮助你。
  • ClientDataTypeModelValidatorProvider 没有 ResourceClassKey 属性。这就是 MVC3 中的问题,它在硬编码资源文件中包含文本,他们在 MVC4 中修复了它。
  • 经过长时间的搜索,这个答案帮助了我。我对 Javascript 验证和使用 data-val-number HTML5 属性的 unobtrusive 验证感到困惑。谢谢。
  • 字段未翻译(通过资源文件或任何内容),但可以通过添加 [Display(Name = "YourText")] 轻松更改。
  • 但是...我可以使用其他库中的其他资源文件(来自其他汇编)吗?我不想在网站项目上创建资源文件。
【解决方案2】:

您可以为验证设置自定义消息。

 [RegularExpression("\d{9}",ErrorMessage="El campo tiene que ser numerico")]
 public decimal UnitPrice { get; set; } 

【讨论】:

  • 是的,我知道那种方式,但我没有办法为我所有的 insteed 为字段做字段设置它?
  • 是的。我认为你这样做了。或者为你的控件创建一个公共掩码,绑定到一个数字类型属性。或者如果你的属性是一个公共属性,则在基类中定义你的属性。
  • 当您尝试在 jquery.validate.js 中更改十进制分隔符时,您将遇到另一个错误。
【解决方案3】:

如果您想为每个 Integer 、 double 和 float 指定自定义消息。您可以将 Range 属性与 String 一起使用,如下所示。

    [Required(ErrorMessageResourceType = typeof(Global), ErrorMessageResourceName = "YearOfEstablishmentRequired")]
    [Range(0, int.MaxValue, ErrorMessageResourceType = typeof(Global), ErrorMessageResourceName = "ValidYearOfEstablishment")]
    [Display(Name = "Year Of Establishment")]
    public string YearOfEstablishment { get; set; }

现在如上所述,您可以为每个属性指定自定义消息。

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 2019-08-17
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多