我目前正在开发一个ASP.NET MVC Core的Web应用程序,用户需要注册。这是一个本地化的Web应用程序,应该能够运行多种语言。为了友好的SEO,我选择了路由本地化,所以我的URL看起来像这样:https://localhost:5001/en/Catalogue或https://localhost:5001/fr/catalogue。
为了实现这一点,在Startup.cs中的ConfigureServices方法中添加了以下代码:
在我的Configure方法中,我添加了以下内容:
这个方法非常有效。我可以将我的MVC页面翻译成任何语言。但是我的问题在于身份验证页面。我将这些页面添加为脚手架项。它们的URL指向https://localhost:5001/Identity/Account/Register。尝试使用https://localhost:44339/en/Identity/Account/Register访问它们无法正常工作。我该如何实现身份验证页面的路由本地化?
为了实现这一点,在Startup.cs中的ConfigureServices方法中添加了以下代码:
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization()
.AddDataAnnotationsLocalization();
在我的Configure方法中,我添加了以下内容:
IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("fr"),
};
var localizationOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
};
var requestProvider = new RouteDataRequestCultureProvider();
localizationOptions.RequestCultureProviders.Insert(0, requestProvider);
app.UseRouter(routes =>
{
routes.MapMiddlewareRoute("{culture=en}/{*mvcRoute}", subApp =>
{
subApp.UseRequestLocalization(localizationOptions);
subApp.UseMvc(mvcRoutes =>
{
mvcRoutes.MapRoute(
name: "areaRoute",
template: "{culture=en}/{area:exists}/{controller=Home}/{action=Index}/{id?}");
mvcRoutes.MapRoute(
name: "default",
template: "{culture=en}/{controller=Home}/{action=Index}/{id?}");
});
});
});
这个方法非常有效。我可以将我的MVC页面翻译成任何语言。但是我的问题在于身份验证页面。我将这些页面添加为脚手架项。它们的URL指向https://localhost:5001/Identity/Account/Register。尝试使用https://localhost:44339/en/Identity/Account/Register访问它们无法正常工作。我该如何实现身份验证页面的路由本地化?