【问题标题】:.Net Core Data Annotations - localization with shared resources.Net Core Data Annotations - 使用共享资源进行本地化
【发布时间】:2021-01-01 06:23:34
【问题描述】:
我想使用共享的 resx 文件来指定所有可翻译的字符串(既方便翻译,更重要的是避免有几十个单独的 resx 文件与 DRY 原则相冲突)。我让它与 IStringLocalizer 一起用于控制器和视图,但我只是不知道如何为模型的数据注释实现它。
它通过使用单独的文件(如 Models.AccountViewModels.LoginViewModel.en.resx)来工作,但我将如何去使用共享资源文件而不是特定的数据注释?任何人都可以分享实施示例吗?
附:环境是 .NET Core 1.1,因此验证和显示注释都应该是可用于本地化的版本
【问题讨论】:
标签:
.net-core
localization
annotations
【解决方案1】:
第 1 步:创建一个名为 ValidationMessages.cs 的简单类并将其留空。我假设您的课程位于 /Validation 文件夹中。
第 2 步:在 Startup.cs 文件中修改数据注释本地化程序的提供程序,如下所示:
mvcBuilder.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
{
return factory.Create(typeof(ValidationMessages));
};
});
第 3 步:在 /Resources 中创建文件夹 /Validation(我假设您将所有资源文件都保存在该文件夹中),然后在其中添加 ValidationMessages.fr-FR.resx 文件(即用于法国文化)。
第 4 步:使用您喜欢的键向资源文件添加条目。我假设您将拥有RequiredError、MaxLengthError 等键。
第 5 步:使用 [Required(ErrorMessage="RequiredError")] 装饰模型类的属性。
下次属性验证失败时,将从 ValidationMessages.{culture}.resx 文件中提取验证消息。
但请记住,如果您使用 DisplayAttribute,则不仅会搜索验证消息,还会搜索属性名称。