Если вы хотите поместить файлы ресурсов в корневой каталог проекта, вы должны установить ResourcesPath
следующим образом
services.AddLocalization(a => a.ResourcesPath = ""); //empty string
С этими настройками SearchedLocation
даст вам Web.Controllers.MemberController
, что указывает на Controllers.MemberController.resx
файл в корне проекта.
Чтобы использовать локализацию, вы должны следовать шаблону Views.{ControllerName}.{ViewName}.resx
.Например, если у вас есть представление HomeController
и About
, вам необходим файл Views.Home.About.resx
, чтобы использовать локализацию.
Другой читатель ресурса конвенции следует при поиске файлов локализации ищет файлы в соответствующих папкаха не через разделенные точками имена.Например, если ResourcesPath
установлено на "Resources"
, следующие варианты равны
Resources.Views.Home.About.resx
Resources\Views.Home.About.resx
Resources\Views\Home.About.resx
Resources\Views\Home\About.resx
Таким образом, можно структурировать файлы локализации по папкам.
И вы не указали свойдобавлено app.UseRequestLocalization()
в вашем Startup.cs
.Если вы этого не сделаете, ваше приложение не сможет определить культуру запроса, и оно всегда будет указывать на файл ресурсов по умолчанию.Подробнее в документах .
Примечание
Существует 2 способа настройки RequestLocalizationOptions
для локализации запроса через services.Configure<RequestLocalizationOptions>
или передачусконструированные параметры объекта (или делегата) для app.UseRequestLocalization
.По сути, между этими подходами нет никакой разницы, они полностью равны с точки зрения промежуточного программного обеспечения для локализации.Но если в любой точке приложения вам нужно получить RequestLocalizationOptions
, вы не сможете получить значение, переданное app.UseRequestLocalization
.Но это легко сделать с помощью services.Configure<RequestLocalizationOptions>
(общий подход описан в документации )
public class HomeController : Controller
{
private readonly RequestLocalizationOptions _requestLocalizationOptions;
public HomeController(IOptions<RequestLocalizationOptions> options)
{
_requestLocalizationOptions = options.Value;
}
//..
}