我应该尝试实现的是为 net-core 中的每种受支持语言提供单个资源(resx)文件。我稍微解释了一下这个问题。
我在每个实体上都有DataAnnotations,我需要本地化在发生错误时返回的消息。似乎 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;}
现在,我需要在供应商实体的适当文件中再次编写相同的翻译。这也适用于[必需]等其他常见属性。
所以我希望能够很好地解释我的问题,我的问题是:有一种方法可以为我的所有实体验证消息指定一个资源文件,然后一次性写入常用文本的消息吗?
答案 0 :(得分:1)
从docs,您可以告诉框架使用共享资源进行数据注释本地化:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddDataAnnotationsLocalization(options => {
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedResource));
});
}
在前面的代码中,
SharedResource
是与存储验证消息的resx相对应的类。使用此方法,DataAnnotations
将仅使用SharedResource
,而不是每个类的资源。