Маршрутизация ASP.NET Core 8 с параметрами культуры и областями
В ASP.NET Core 8 вы можете использовать параметр культуры, чтобы настроить язык и региональные настройки вашего приложения, а также область, чтобы сегментировать ваше приложение на различные части.
1. Настройка культуры
1.1 Регистрация IRequestCultureProvider
в Startup.cs
или Program.cs
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddControllersWithViews();
// Регистрация ``RequestCultureProvider`` с параметром культуры в URL
services.Configure<RequestLocalizationOptions>(options =>
{
options.DefaultRequestCulture = new RequestCulture("en-US");
options.SupportedCultures = new[] { "en-US", "ru-RU", "fr-FR" };
options.SupportedUICultures = new[] { "en-US", "ru-RU", "fr-FR" };
options.RequestCultureProviders = new[] {
new QueryStringRequestCultureProvider()
};
});
}
1.2 Добавление параметра культуры в URL:
// Например, /ru-RU/Home/Index для русского языка
2. Настройка областей
2.1 Регистрация AreaRouteModelConvention
в Startup.cs
или Program.cs
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddControllersWithViews();
services.AddMvc().AddRazorPagesOptions(options =>
{
options.Conventions.AddAreaPageRoute("Admin", "/Admin/{controller=Home}/{action=Index}", "Admin");
});
}
2.2 Создание папки Areas
и создание папки Admin
внутри.
2.3 Добавление _ViewImports.cshtml
в Areas/Admin
с отменой основной области в @namespace
:
@using Admin.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@removeTagHelper *, Microsoft.AspNetCore.Mvc.RazorPages
@namespace Admin
2.4 Создание HomeController.cs
и Index.cshtml
в Areas/Admin
// Admin/HomeController.cs
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
// Admin/Index.cshtml
@{
ViewData["Title"] = "Admin Home Page";
}
3. Комбинирование культуры и областей
3.1 Создание Admin/Home/Index.cshtml
с переводом содержимого в зависимости от культуры.
@{
ViewData["Title"] = "Admin Home Page";
}
<h1>@Localizer["Welcome to Admin Area"]</h1>
3.2 Добавление Resources/Admin/Home/Index.resx
и Resources/Admin/Home/Index.ru-RU.resx
3.3 Использование [Route("Admin")]
на HomeController
// Admin/HomeController.cs
[Area("Admin")]
public class HomeController : Controller
{
// ...
}
4. Дополнительные возможности
- Используйте
IStringLocalizer
для перевода содержимого в зависимости от культуры. - Используйте
IViewLocalizer
для перевода содержимого в зависимости от культуры и области. - Используйте
CultureInfo.CurrentUICulture
и CultureInfo.CurrentCulture
для получения текущей культуры и языковых настроек.
5. Примеры маршрутов
/en-US/Admin/Home/Index
: Admin область, английский язык/ru-RU/Admin/Home/Index
: Admin область, русский язык/en-US/Home/Index
: Основная область, английский язык/ru-RU/Home/Index
: Основная область, русский язык
6. Важные примечания
- Убедитесь, что в вашем проекте настроены необходимые ресурсные файлы для всех поддерживаемых культур.
- Используйте программу ASP.NET Core для создания файлов ресурсов (
.resx
). - В вашем проекте должны быть установлены необходимые пакеты локализаций.