.Net核心数据注释 - 使用共享资源进行本地化

时间:2017-05-11 07:53:25

标签: .net localization annotations core

我想使用共享resx文件来指定所有可翻译的字符串(两者都是为了方便翻译,更重要的是避免使用与DRY原理冲突的数十个单独的resx文件)。我使用IStringLocalizer来处理控制器和视图,但我无法弄清楚如何为模型的数据注释实现它。

它通过使用像Models.AccountViewModels.LoginViewModel.en.resx这样的单独文件来工作,但是我如何使用共享资源文件进行数据注释而不是特定注释呢?任何人都可以分享实施的例子吗?

提前致谢!

P.S。环境是.Net Core 1.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时搜索属性名称。