“ {0}字段是必需的”消息本地化

时间:2018-10-10 16:21:05

标签: asp.net-core asp.net-core-2.0

在ASP.NET Core 2.0中,我使用的是自定义IStringLocalizer服务,配置后,除默认的必填字段消息外,翻译了我的大多数网站,即使我设置了ModelBindingMessageProvider和{{1} }

模型

DataAnnotationLocalizerProvider

Startup.css(ConfigureServices方法)

public class EmailModel
{

    [Required]
    [EmailAddress()]
    public string Email { get; set; }
    [Required]
    [Display(Name = "Name")]
    public string Name { get; set; }
    [Required]
    [Phone]
    [Display(Name = "Phone")]
    public string Phone { get; set; }

    [Required]
    [Display(Name = "Subject")]
    public string Subject { get; set; }
    [Required]
    [Display(Name="Message")]
    public string Text { get; set; }
}

在我的xml本地化文件中(我的服务未使用资源文件),我有以下字符串:

“ {0}字段不是有效的电话号码。” -工作正常

“ {0}字段为必填字段”-无法正常工作,因为服务从未收到过任何如下所示的必需消息。

所以我知道我想念的是什么吗?

我知道很少有诸如 1)设置ErrorMessage 2)创建继承了RequiredArtibbute类的新类,并在类构造函数中设置默认消息

但是我的目标是更改RequierdAtrribute的DEFAULT消息

1 个答案:

答案 0 :(得分:1)

对于DataAnnotation错误消息的本地化/自定义,必须在属性属性中提供它,否则将触发默认消息。

如果您已在策略中完成.AddDataAnnotationLocalization(...),请按以下方式使用它:

[Required(ErrorMessage ="The field '{0}' is required")]
[Display(Name = "Name")]
public string Name { get; set; }

或者,如果您不想使用启动设置并从特定的共享资源中指定错误消息(假设您具有名为“ MyResources”的资源文件):

[Required(
    ErrorMessageResourceName = nameof(MyResources.Required),
    ErrorMessageResourceType = typeof(MyResources))]
[Display(
    Name = nameof(MyResources.Name),
    ResourceType = typeof(MyResources))]
public string Name { get; set; }