Прежде всего:
Путь к ресурсам определяется по следующему шаблону: {RootNamespace}.{ResourceLocation}.{FullTypeName - AssemblyName}
, где
{RootNamespace}
- это, в большинстве случаев, имя сборкитип, для которого ищется ресурс,
{ResourceLocation}
- обычно это "Resources"
,
{FullTypeName - AssemblyName}
- остаток от типа FullName.
Вы можете проверить это, введя тип IStringLocalazer<TestModel>
в свой контроллер и получив доступ к индексатору с помощью ключа существующего ресурса (например, Value в вашем случае).
Свойство ResourceNotFound
будетзначение true
и SearchedLocation
будут отражать путь, используемый для поиска ресурса.
Следовательно, файлы ресурсов модели должны быть размещены в той же сборке, где модель описывается тем же шаблоном пути:
LocalizedAspNetCoreApp.DomainModels/Resources/TestModel.resx
Если пространство имен типа будетдлиннее, чем имя сборки, оставшаяся часть должна быть добавлена к имени файла ресурса.Например:
LocalizedAspNetCoreApp.DomainModels/Resources/Models.TestModel.resx
Во-вторых:
{ResourceLocation} по умолчанию инициализируется пустой строкой.Чтобы инициализировать это значение, установите пакет Microsoft.Extensions.Localization
:
install-package Microsoft.Extensions.Localization
и измените метод ConfigureServices в Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services
.AddLocalization(opts => opts.ResourcesPath = "Resources")
.AddMvc()
.AddDataAnnotationsLocalization();
}