我已经在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
是否也缺少使它与链接一起使用的东西?
答案 0 :(得分: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>