Как локализовать URL в .NET Core 2.x? - PullRequest
0 голосов
/ 13 апреля 2019

Я уже настроил и у меня работает локализация, настроенная как в ConfigureServices(), так и в Configure(), например:

var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
        app.UseRequestLocalization(locOptions.Value);
        app.UseRouter(routes =>
        {
            routes.MapMiddlewareRoute("{culture=en}/{*mvcRoute}", subApp =>
            {
                subApp.UseRequestLocalization(locOptions.Value);

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

и работает как /fr/Home/Register, но когда дело доходит до ссылок типа <a asp-action="Register">Register</a>, они по-прежнему создают культуру запросов по умолчанию, en.

Таким образом, сгенерированные ссылки имеют вид /en/Home/Register вместо /fr/Home/Register

Есть что-то, чего мне не хватает, чтобы заставить работать и со ссылками?

1 Ответ

1 голос
/ 13 апреля 2019

Вам не хватает culture значения маршрута для ссылки, поэтому по умолчанию установлена ​​культура.Его можно добавить, используя атрибут asp-route-[data]

<a asp-action="Register" asp-route-culture="fr">Register</a>

. Для получения текущей культуры запросов вы можете использовать IRequestCultureFeature.Получить функцию в представлении

@{
    var cultureFeature = Context.Features.Get<Microsoft.AspNetCore.Localization.IRequestCultureFeature>();
}

Использование IRequestCultureFeature.RequestCulture.Culture для извлечения текущей культуры

<a asp-action="Register" asp-route-culture="@(feature.RequestCulture.Culture)">Register</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...