Localization Asp.Net核心2.1本地化

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[]

我是asp.net核心的新手,尝试实现本地化以支持多种语言,我的配置如下

 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(区域性)
我认为您可以与我们分享完整的解决方案,并接受它作为答案。