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

问题描述 投票:0回答:1

我已经设置并且本地化工作,在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

是否有一些我缺少的东西也可以用链接工作?

c# url asp.net-core localization
1个回答
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>
© www.soinside.com 2019 - 2024. All rights reserved.