我的 ASP.NET Core 8 项目引用包含以下控制器的外部项目:
public class AccountController
{
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> Login(string returnUrl = null)
{
// ...
}
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> ChangePassword(string returnUrl = null)
{
// ...
}
}
地点:
AccountController.Login
映射到路线 /Login
AccountController.ChangePassword
映射到路线 /ChangePassword
我想在我的 ASP.NET Core 8 项目的
Startup.cs
中替换这些路由,以便路由支持多种文化,如下所示:
AccountController.Login -> /en/login, /it/login
AccountController.ChangePassword -> /en/change-password, /it/cambia-password
有人可以提供有关如何在
Startup.cs
文件中进行配置的指导或示例吗?
要通过更改路由来支持多种文化,您可以阅读此文档:应用 RouteDataRequest CultureProvider
以下是示例演示:
在asp.net core mvc测试项目中:
1.先创建资源文件,参考资源文件
资源文件的名称必须与视图页面匹配(我的测试视图:Views\Home\Index.cshtml)
2.在程序.cs中配置:
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
builder.Services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("it")
// Add more cultures as needed
};
options.DefaultRequestCulture = new RequestCulture("it");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders = new List<IRequestCultureProvider>
{
new RouteDataRequestCultureProvider()
{
RouteDataStringKey = "culture",
Options = options // This line ensures options.DefaultRequestCulture is used
}
};
});
app.UseRequestLocalization();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "localized-login",
pattern: "{culture}/{action=Index}",
defaults: new { controller = "Home", action = "Index" }, // In your code, you should change to `controller = "Account" `
constraints: new { culture = new RegexRouteConstraint(@"^[a-zA-Z]{2}(-[a-zA-Z]{2})?$") }
);
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
在外部项目中:
3.在控制器中注入
IStringLocalizer
:
private readonly IStringLocalizer<HomeController> _localizer;
public HomeController(IStringLocalizer<HomeController> localizer)
{
_localizer = localizer;
}
public IActionResult Login()
{
ViewData["Title"] = _localizer["LoginPageTitle"];
ViewData["ButtonText"] = _localizer["LoginButtonText"];
return View();
}
4.在登录视图页面中插入
IViewLocalizer
:
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
<h1>@Localizer["LoginPageTitle"]</h1>
<button>@Localizer["LoginButtonText"]</button>
测试结果: