Localization Asp.Net核心2.1本地化
我是asp.net核心的新手,尝试实现本地化以支持多种语言,我的配置如下Localization Asp.Net核心2.1本地化,localization,asp.net-core-2.0,asp.net-core-webapi,Localization,Asp.net Core 2.0,Asp.net Core Webapi,我是asp.net核心的新手,尝试实现本地化以支持多种语言,我的配置如下 services.AddLocalization(options => options.ResourcesPath = "Resources"); services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[]
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("fr-FR")
};
options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
services.AddMvc().AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix,opts=> {opts.ResourcesPath="Resources"; })
.AddDataAnnotationsLocalization(o=> {
o.DataAnnotationLocalizerProvider = (type, factory) =>
{
return factory.Create(typeof(SharedResource));
};
});
当我用邮递员这样测试时:我得到了一个正确的结果,但当我试图在请求体内传递文化时,它不起作用,有人能帮我吗?非常感谢默认情况下,
webapi
参数将从查询字符串中获取值,如果使用like(字符串文化)
如果您想从Body
中获取值,可以添加[FromBody]
,如下所示:
public IActionResult SetLanguage([FromBody]string culture)
然后按如下方式发布您的请求:
public IActionResult SetLanguage([FromBody]string culture)
显然,如果您添加[FromBody]
,它将不适用于查询字符串
请求。要使此工作正常,我只需要添加
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
强制我的currentThread.CurrentCulture/UICulture获取我从身体传递的文化值
public IActionResult SetLanguage([FromBody] string culture)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
_localizer.WithCulture(new CultureInfo(culture));
}
是的,但是定位器没有使用我从body传递参数的区域性字符串,有没有办法自定义定位器以使用我的body请求?对于内置的本地化中间件[,它不会在请求body
中检索区域性设置,我想可以通过获取“culture”来实现您自己的区域性prvoider从Body我发现了这个问题,我只需要像您前面提到的那样传递区域性,然后我应该使用如下线程强制更改:System.Threading.Thread.CurrentThread.CurrentUICulture=new CultureInfo(区域性);System.Threading.Thread.CurrentThread.CurrentCulture=new CultureInfo(区域性)
我认为您可以与我们分享完整的解决方案,并接受它作为答案。