我正在使用ASP.NET Core 2开发一个在线商店,我正在努力实现如何实现路由本地化,例如。取决于用户所在的国家/地区,我希望他看到/ en / products或/ pl / produkty。
我设法将文化作为网址的一部分实现,例如/ en / ....,用户也可以通过点击网站上的按钮来更改默认语言。但是,我不知道如何本地化整个网址。我不想在Startup.cs(MapRoute)中放入数百个URL。我需要一个更好的解决方案,它在幕后自动运行。
如果有人直接更改了网址(例如en / products)并将pl替换为en,我希望他/她能够自动重定向到pl / produkty。
我希望你能帮助我!
答案 0 :(得分:1)
这里有一个非常好的资源: Asp.Net core Localization deep dive
准确地说,这就是你要找的东西:
IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en-US"),
new CultureInfo("fi-FI"),
};
var localizationOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
};
var requestProvider = new RouteDataRequestCultureProvider();
localizationOptions.RequestCultureProviders.Insert(0, requestProvider);
app.UseRouter(routes =>
{
routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp =>
{
subApp.UseRequestLocalization(localizationOptions);
subApp.UseMvc(mvcRoutes =>
{
mvcRoutes.MapRoute(
name: "default",
template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}");
});
});
});