Локализация ASP.Net: не находит файл локализации

Всем привет. Я работаю над проектом ASP.NET Core и мне нужно реализовать локализацию сообщений на бэке. Я хочу использовать два файла ресурсов (один для английского и один для русского), которые будут общими для всех классов в решении, а также использовать локализатор в моих контроллерах следующим образом: localizer["message"]. Я настроил Startup.cs:

public void ConfigureServices(IServiceCollection services)
...
// Localization
services.AddControllers().AddDataAnnotationsLocalization();

services.AddLocalization(options => options.ResourcesPath = "Resources");

services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[] { "ru", "en" };

    options.SetDefaultCulture(supportedCultures[0])
        .AddSupportedCultures(supportedCultures);
});
...

Также создал отдельный класс SharedResource соответственно в контроллере выглядит это так IStringLocalizer<SharedResource> localizer. У меня есть два файла SharedResources.ru.resx и SharedResource.en.resx. которые находятся в папке Resources.

Примитивная структура:

Solution
│
├── Web
│   ├── Startup.cs
│   ├── Program.cs
│   ├── SharedResource.cs
│   │   Controllers
│   │   └── ...
│   ├── Resources
│   │   ├── SharedResource.en.resx
│   │   ├── SharedResource.ru.resx
│   └── ...
└── Other projects

И вся проблема в том, что когда я шлю запрос на api, мне возвращает не сообщение, а ключ, который указан в localizer["message"], то есть message. Как я понял, что такое возникает в случае когда не найден файл ресурсов.

И я не понимаю почему такое происходит. Заранее спасибо!

Обновлено: проблема кроется в namespace'ах. У SharedResource.cs он <App Name>.<Name Service>.Web, а вот ресурсы ищет в Web.Resources.<App Name>.<Name Service>.Web.SharedResource. Но незадача в том, что последний зависит от SharedResource.cs и как решить эту проблему я не понимаю.


Ответы (1 шт):

Автор решения: Miclell

Вся проблема кроется не в том, что что-то не так настроено, а в том, что мое решение имеет кастомный namespace (см. обновление вопроса).

Ввиду этого в классе SharedResource.cs нужно было указать корневое пространство имен сборки [assembly: RootNamespace("Namespace")], после чего все заработало.

→ Ссылка