在路由中使用 culture 参数改变文化
Use culture parameter in route to change culture
在 Asp.Net 3.1 应用程序上,我在启动时进行了以下本地化:
application.UseRequestLocalization(new RequestLocalizationOptions {
DefaultRequestCulture = new RequestCulture("pt"),
SupportedCultures = new[] { new CultureInfo("en"), new CultureInfo("pt") },
SupportedUICultures = new[] { new CultureInfo("en"), new CultureInfo("pt") }
});
application.UseEndpoints(x => {
x.MapDefaultControllerRoute();
});
我在控制器上使用属性路由:
[HttpGet("about")]
public IActionResult Index() => View();
我能够使用正确的文化查看内容:
/about?culture=pt
/about?culture=en
但我想将文化作为路由参数,所以我将其更新为:
[HttpGet("{culture?}/about")]
public IActionResult Index() => View();
但是,当我访问时文化没有改变:
/pt/about
/en/about
我该怎么做?
开箱即用,UseRequestLocalization
支持以下 ordered RequestCultureProviders
:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
通过将 "{culture?}"
添加到 HttpGet
约束,您已将其变成路由参数。这是受支持的,但必须进行配置。这是一个例子:
var requestLocalizationOptions = new RequestLocalizationOptions {
DefaultRequestCulture = new RequestCulture("pt"),
SupportedCultures = new[] { new CultureInfo("en"), new CultureInfo("pt") },
SupportedUICultures = new[] { new CultureInfo("en"), new CultureInfo("pt") }
};
requestLocalizationOptions.RequestCultureProviders.Add(
new RouteDataRequestCultureProvider());
application.UseRequestLocalization(requestLocalizationOptions);
如果您希望首先检查 RouteDataRequestCultureProvider
,请将其添加为 第一个 提供商:
requestLocalizationOptions.RequestCultureProviders.Insert(
0, new RouteDataRequestCultureProvider());
内置扩展方法AddInitialRequestCultureProvider
使用与上述相同的实现。使用它看起来像这样:
requestLocalizationOptions.AddInitialRequestCultureProvider(
new RouteDataRequestCultureProvider());
在 Asp.Net 3.1 应用程序上,我在启动时进行了以下本地化:
application.UseRequestLocalization(new RequestLocalizationOptions {
DefaultRequestCulture = new RequestCulture("pt"),
SupportedCultures = new[] { new CultureInfo("en"), new CultureInfo("pt") },
SupportedUICultures = new[] { new CultureInfo("en"), new CultureInfo("pt") }
});
application.UseEndpoints(x => {
x.MapDefaultControllerRoute();
});
我在控制器上使用属性路由:
[HttpGet("about")]
public IActionResult Index() => View();
我能够使用正确的文化查看内容:
/about?culture=pt
/about?culture=en
但我想将文化作为路由参数,所以我将其更新为:
[HttpGet("{culture?}/about")]
public IActionResult Index() => View();
但是,当我访问时文化没有改变:
/pt/about
/en/about
我该怎么做?
开箱即用,UseRequestLocalization
支持以下 ordered RequestCultureProviders
:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
通过将 "{culture?}"
添加到 HttpGet
约束,您已将其变成路由参数。这是受支持的,但必须进行配置。这是一个例子:
var requestLocalizationOptions = new RequestLocalizationOptions {
DefaultRequestCulture = new RequestCulture("pt"),
SupportedCultures = new[] { new CultureInfo("en"), new CultureInfo("pt") },
SupportedUICultures = new[] { new CultureInfo("en"), new CultureInfo("pt") }
};
requestLocalizationOptions.RequestCultureProviders.Add(
new RouteDataRequestCultureProvider());
application.UseRequestLocalization(requestLocalizationOptions);
如果您希望首先检查 RouteDataRequestCultureProvider
,请将其添加为 第一个 提供商:
requestLocalizationOptions.RequestCultureProviders.Insert(
0, new RouteDataRequestCultureProvider());
内置扩展方法AddInitialRequestCultureProvider
使用与上述相同的实现。使用它看起来像这样:
requestLocalizationOptions.AddInitialRequestCultureProvider(
new RouteDataRequestCultureProvider());