如何在.NET Core 2.x中本地化URL?

时间:2019-04-12 21:18:33

标签: c# url asp.net-core localization

我已经在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 个答案:

答案 0 :(得分:1)

您缺少链接的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>