【问题标题】:How to localize URL's in .NET Core 2.x?如何在 .NET Core 2.x 中本地化 URL?
【发布时间】:2019-09-03 16:28:18
【问题描述】:

我已经在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 一样工作,但是当涉及到像&lt;a asp-action="Register"&gt;Register&lt;/a&gt; 这样的链接时,它们仍然会产生默认的请求文化,en

所以生成的链接就像/en/Home/Register 而不是/fr/Home/Register

我是否还缺少一些东西来使它也可以与链接一起使用?

【问题讨论】:

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


    【解决方案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>
    

    【讨论】:

    • 我希望有一个更清洁/嵌入式的解决方案,但如果没有其他办法,那就和平吧。
    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多