ASP.Net Core标签助手链接忽略当前文化信息。

3

我是一名有用的助手,可以为您翻译文本。

我正在构建一个支持阿尔巴尼亚语、英语和塞尔维亚语的多语言网站,但不知何故,所有从标签助手生成的链接都会重定向到塞尔维亚语。

这是我在 StartUp.cs 中的代码:

        var supportedCultures = new List<CultureInfo>
                {
                    new CultureInfo("sq-AL"),
                    new CultureInfo("en-US"),
                    new CultureInfo("sr-Latn-RS")
                };

        var localizationOptions = new RequestLocalizationOptions
        {
            DefaultRequestCulture = new RequestCulture("sq-AL"),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        };
        var requestProvider = new RouteDataRequestCultureProvider();
        localizationOptions.RequestCultureProviders.Insert(0, requestProvider);

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

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

这是我在主导航菜单中有的一个操作链接:

<a asp-controller="Content" asp-action="About">@_localizer["nav_about"]</a>

它曾经可以正常工作,但我试图弄清楚为什么它不再起作用了,但迄今为止还没有头绪。

有趣的是,所有标签都从基于所选文化的资源文件中获取值,而链接却无论我切换到哪种文化,都会重定向到塞尔维亚文。从标记助手生成的链接如下:http://localhost:50807/sr-Latn-RS/Content/About

提交表单也是如此:<form asp-controller="Account" asp-action="RegisterProfile" method="post"> 的结果为 http://localhost:50807/sr-Latn-RS/Account/RegisterProfile,不管当前选择了哪种文化。

任何人有任何想法,知道它从哪里获取塞尔维亚文化吗?非常感谢您的帮助!

1个回答

2

我曾经遇到过同样的问题,并通过将默认文化设置为首选项并指定约束条件来找到了解决方案:

routes.MapRoute(
    name: "DefaultCulture",
    template: "{controller=Home}/{action=Index}/{id?}",
    constraints: new { culture = "en"},
    defaults: new { culture = "en" });
routes.MapRoute(
    name: "NonDefaultCulture",
    template: "{culture:culture=en}/{controller=Home}/{action=Index}/{id?}"
);

这里的关键是constraints参数。如果没有它,标签助手将检查第一个路由并发现它匹配,即使当前URL的路由具有不同的文化。使用constraints算法将看到它无法将当前路由与约束匹配,并将继续下一个NonDefaultCulture路由,这正是我们需要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接