我已经设置并且本地化工作,在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
是否有一些我缺少的东西也可以用链接工作?
您缺少链接的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>