我想使用共享resx文件来指定所有可翻译的字符串(两者都是为了方便翻译,更重要的是避免使用与DRY原理冲突的数十个单独的resx文件)。我使用IStringLocalizer来处理控制器和视图,但我无法弄清楚如何为模型的数据注释实现它。
它通过使用像Models.AccountViewModels.LoginViewModel.en.resx这样的单独文件来工作,但是我如何使用共享资源文件进行数据注释而不是特定注释呢?任何人都可以分享实施的例子吗?
提前致谢!
P.S。环境是.Net Core 1.1,因此验证和显示注释都应该在该版本中可用于本地化
答案 0 :(得分:8)
步骤1:创建一个名为ValidationMessages.cs的简单类,并将其留空。我将假设您的班级位于/ Validation文件夹中。
步骤2:修改Startup.cs文件中数据注释localizer的提供程序,如下所示:
mvcBuilder.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
{
return factory.Create(typeof(ValidationMessages));
};
});
步骤3:在/ Resources中创建文件夹/验证(我假设您将所有资源文件保存在该文件夹中),然后在那里添加ValidationMessages.fr-FR.resx文件(对于法国文化,即。)。
步骤4:使用您喜欢的密钥向资源文件添加条目。我假设您将拥有RequiredError,MaxLengthError等键
步骤5:使用[Required(ErrorMessage =" RequiredError")]装饰模型类的属性。
下次属性验证失败时,验证消息将从ValidationMessages。{culture} .resx文件中提取。
请记住,不仅会在那里搜索验证消息,还会在使用DisplayAttribute时搜索属性名称。