在ASP.NET Core 2中路由本地化

时间:2017-11-02 16:01:50

标签: asp.net asp.net-core routes

我正在使用ASP.NET Core 2开发一个在线商店,我正在努力实现如何实现路由本地化,例如。取决于用户所在的国家/地区,我希望他看到/ en / products或/ pl / produkty。

我设法将文化作为网址的一部分实现,例如/ en / ....,用户也可以通过点击网站上的按钮来更改默认语言。但是,我不知道如何本地化整个网址。我不想在Startup.cs(MapRoute)中放入数百个URL。我需要一个更好的解决方案,它在幕后自动运行。

如果有人直接更改了网址(例如en / products)并将pl替换为en,我希望他/她能够自动重定向到pl / produkty。

我希望你能帮助我!

1 个答案:

答案 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?}");
        });
    });
});