Localization of data annotations in separate class

2019-07-07 04:27发布

问题:

We are trying to implement localization for our domain models which are existing in a separate class library project within our solution. However, we are not able to get it working as our models data annotation attributes doesn't get translated at all.

Project structure

  • Solution
    • Web project
      • Resource folder (Contains .resx files. Ex. App.en.resx) Works fine
    • Class library
      • Domain models
      • Resource folder (Contains .resx files. Ex. App.en.resx) Doesn't work

Startup.cs

services.AddMvc()
     .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
     .AddDataAnnotationsLocalization();

Note

Localization works within the Web project, e.g it translates views, controllers. However, it doesn't work when we try to translate models which exists in a separate project.

// Regards

回答1:

There is no support to translate data annotations, views, controller etc that exists in a separate project for now without implementing it by yourself.

The solution is to write your own custom implementation using IStringLocalizer, IStringLocalizerFactory and register it in Startup.cs. See how StringLocalizer/Factory works.

FYI: The aspnet team that is working on Localizer is aware of this and is working on a solution to support this in the future. See aspnet/Localization