1

我应该尝试实现的是为每个支持的语言在net-core上设置一个资源(resx)文件。我解释一下这个问题。DataAnnotations本地化的单个资源文件

我有我的每一个实体的DataAnnotations,我需要本地化错误的情况下返回的消息。看来,通过净芯所需的默认惯例是对我们每一个实体的不同的RESX文件。

此文件据此命名与文化indentifier和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其他资源文件和另一entitity,我当然

StringLength(50, ErrorMessage="The {0} should not be longer than {1} characters") 
public string SupplierName {get;set;} 

现在我需要在Suppliers实体的适当文件中再次写入相同的翻译。这也适用于其他常见属性,如[必需]。

所以我希望能有很好地解释了我的问题,我的queston是:没有指定我的所有实体验证消息的单个资源文件,然后写一个时间的消息共同文本的方法吗?

回答

1

docs,你可以告诉框架使用共享资源为您的数据注解的本地化:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc() 
     .AddDataAnnotationsLocalization(options => { 
      options.DataAnnotationLocalizerProvider = (type, factory) => 
       factory.Create(typeof(SharedResource)); 
     }); 
} 

在前述代码,SharedResource是对应于RESX类在您的验证消息被存储。采用这种方法,DataAnnotations将只使用SharedResource,而不是每个类的资源。

+1

哎哟,我已阅读,文档的开头(当我有其他问题),现在这种完全逃脱了我。让我试试 – Steve

+0

就是这样。谢谢。 – Steve