Маршрутизация ASP.NET Core 8 с параметрами культуры, а также областями

1
6

Я работаю над проектом ASP.NET Core 8, где у меня есть

Также у меня есть локализация для запуска приложения на английском и арабском языках (en, ar).

Для локализации у меня есть этот code в program.cs:

В то время как для маршрутизации у меня есть

Общедоступные URL-адреса работают нормально с маршрутизацией на основе культуры:

В то время как когда я добавляю область в URL-адрес, она не открывается, страница не открывается, как это:

или

Я пробовал разные вещи для маршрутизации, но не смог получить рабочий результат для достижения маршрутизации на основе культуры вместе с областью

builder.Services.AddLocalization(options =>
{
    options.ResourcesPath = "Resources";
});
const string defaultCulture = "en";

var supportedCultures = new[]
{
    new CultureInfo(defaultCulture),
    new CultureInfo("ar")
};

builder.Services.Configure<RequestLocalizationOptions>(options => {
    options.DefaultRequestCulture = new RequestCulture(defaultCulture);
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;

    options.RequestCultureProviders.Insert(0, new UrlRequestCultureProvider()
    {
        Options = options
    });
});

var app = builder.Build();
app.UseRequestLocalization();
app.UseMiddleware<RedirectToDefaultCultureMiddleware>("en");
app.MapControllerRoute(
   name: "areas",
   pattern: "{culture:length(2)}/{area:exists}/{controller=Home}/{action=Index}/{id?}");
localhost:1234/en/controller/action
localhost:1234/en/Identity/Account/Login
localhost:1234/en/Admin/Home/Index
Никифор
Вопрос задан17 июля 2024 г.

1 Ответ

2

Маршрутизация 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).
  • В вашем проекте должны быть установлены необходимые пакеты локализаций.

 

Севастьян
Ответ получен18 сентября 2024 г.

Ваш ответ

Загрузить файл.