Asp.net core 用于DataAnnotations本地化的单个资源文件

Asp.net core 用于DataAnnotations本地化的单个资源文件,asp.net-core,localization,asp.net-core-mvc,data-annotations,Asp.net Core,Localization,Asp.net Core Mvc,Data Annotations,我应该尝试实现的是在netcore中为每种受支持的语言提供一个单一资源(resx)文件。我稍微解释一下这个问题 我的每个实体上都有DataAnnotation,如果出现错误,我需要本地化返回的消息。看来,net core要求的默认约定是为我们的每个实体都有一个不同的resx文件 此文件根据实体的名称空间命名,并带有区域性标识符和resx扩展名。因此,如果名称空间Data.Entities中有一个名为Customers的实体,我应该添加一个名为Data.Entities.Customers.it.

我应该尝试实现的是在netcore中为每种受支持的语言提供一个单一资源(resx)文件。我稍微解释一下这个问题

我的每个实体上都有DataAnnotation,如果出现错误,我需要本地化返回的消息。看来,net core要求的默认约定是为我们的每个实体都有一个不同的resx文件

此文件根据实体的名称空间命名,并带有区域性标识符和resx扩展名。因此,如果名称空间Data.Entities中有一个名为Customers的实体,我应该添加一个名为Data.Entities.Customers.it.resx的文件,并将意大利语的所有翻译放在其中。所以,如果我有一个属性

StringLength(50, ErrorMessage="The {0} should not be longer than {1} characters") 
public string Name {get;set;}
然后,我将正确的翻译添加到Data.Entities.Customers.it.resx文件中

但是,如果我使用另一个实体,比如供应商,我将被迫编写另一个名为Data.Entities.Suppliers.it.resx的资源文件,当然我有

StringLength(50, ErrorMessage="The {0} should not be longer than {1} characters") 
public string SupplierName {get;set;}
现在,我需要在供应商实体的适当文件中再次编写相同的翻译。对于其他常见属性(如[Required]),也是如此

因此,我希望能够很好地解释我的问题,我的问题是:有一种方法可以为我的所有实体验证消息指定单个资源文件,然后一次性为公共文本写入消息?

从中,您可以告诉框架使用共享资源进行数据注释本地化:

public void配置服务(IServiceCollection服务)
{
services.AddMvc()
.AddDataAnnotationsLocalization(选项=>{
options.DataAnnotationLocalizerProvider=(类型,工厂)=>
创建(typeof(SharedResource));
});
}
在前面的代码中,
SharedResource
是与存储验证消息的resx相对应的类。使用这种方法,
DataAnnotations
将只使用
SharedResource
,而不是每个类的资源


哎哟,我一开始读过那个医生(当时我还有其他顾虑),现在我完全明白了。让我试试,就是这样。谢谢。resx文件是否需要使用特定的生成操作?我是否必须声明具有相同命名空间的空SharedResource类型?我无法使它正常工作(ASP.NET Core 2.1)。不确定2.1有什么问题,我用1.1实现了这一功能。在名称空间的某个位置添加一个空的公共类,并在上面的typeof中使用它。resx文件具有嵌入的资源,如BuildAction。resx文件的名称由类的名称空间组成。例如,如果该类在名称空间Dto内命名为SharedResources。然后您的资源文件名为Dto.SharedResource.it.resx。我想是约定。@Steve我相信如果使用不同的重载,可以手动指定名称。