Локализация маршрута в ASP.NET Core 2

Я разрабатываю интернет-магазин с использованием ASP.NET Core 2, и я борюсь с тем, как реализовать локализацию маршрута, например. в зависимости от страны, в которой пользователь находится, я хочу, чтобы он видел /en/products или /pl/produkty.

Мне удалось реализовать культуру как часть URL-адреса, например /en/...., и пользователь также может изменить язык по умолчанию, нажав кнопку на веб-сайте. Однако я не знаю, как локализовать целые URL-адреса. Я не хочу ставить сотни URL-адресов в Startup.cs(MapRoute). Мне нужно лучшее решение, которое автоматически работает за кулисами.

Если кто-то напрямую меняет URL-адрес (например, en/products) и ставит pl вместо en, я хочу, чтобы он/она автоматически перенаправлялся на pl/produkty.

Я надеюсь, что вы можете помочь мне!

Ответы

Ответ 1

здесь очень хороший источник: Asp.Net core Локализация глубокого погружения

Именно здесь вы ищете:

 IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
    new CultureInfo("en-US"),
    new CultureInfo("fi-FI"),
};
var localizationOptions = new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en-US"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
};
var requestProvider = new RouteDataRequestCultureProvider();
localizationOptions.RequestCultureProviders.Insert(0, requestProvider);

app.UseRouter(routes =>
{
    routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp =>
    {
        subApp.UseRequestLocalization(localizationOptions);

        subApp.UseMvc(mvcRoutes =>
        {
            mvcRoutes.MapRoute(
                name: "default",
                template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}");
        });
    });
});