【问题标题】:ASP.Net Core Tag Helper links ignore current cultureASP.Net Core Tag Helper 链接忽略当前文化
【发布时间】:2018-04-18 23:34:42
【问题描述】:

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

这就是我在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?}");
                });
            });
        });    

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

&lt;a asp-controller="Content" asp-action="About"&gt;@_localizer["nav_about"]&lt;/a&gt;

它曾经运行良好,我试图弄清楚为什么它不再运行但至今不知道。

有趣的是,所有标签都根据所选文化从资源文件中获取值,无论我切换到哪种文化,链接都会不断重定向到塞尔维亚语。从上面的标签助手生成的链接:http://localhost:50807/sr-Latn-RS/Content/About

提交表单也是如此:&lt;form asp-controller="Account" asp-action="RegisterProfile" method="post"&gt; 结果到http://localhost:50807/sr-Latn-RS/Account/RegisterProfile,无论当前选择哪种文化。

有人知道塞尔维亚文化从何而来吗?任何形式的帮助将不胜感激!

【问题讨论】:

    标签: c# asp.net-core culture asp.net-core-tag-helpers


    【解决方案1】:

    我遇到了同样的问题,并通过将默认文化设置为第一个并指定约束找到了解决方案:

    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 路由,这正是我们所需要的。

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2017-11-17
      • 1970-01-01
      • 2017-07-05
      • 2018-05-13
      • 2014-05-07
      • 1970-01-01
      相关资源
      最近更新 更多