我正在建立一个支持阿尔巴尼亚语,英语和塞尔维亚语的多语言网站,但不知何故,标签帮助者生成的所有链接都会重定向到塞尔维亚语。
这就是我在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
生成localStorage.stuff = JSON.stringify(['a', 'b', 2]);
console.log(JSON.parse(localStorage.stuff));
。
任何人都知道从哪里获取塞尔维亚文化?任何形式的帮助将不胜感激!
答案 0 :(得分: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
路线。