ASP.NET MVC Core 如何获取应用程序支持的文化列表

Nik*_*ias 7 c# asp.net asp.net-mvc localization

在我的 Startup.cs 中,我添加了两种文化:

       var cultureLt = new CultureInfo("LT");
       var cultureEn = new CultureInfo("EN");
       var supportedCultures = new List<CultureInfo> {cultureEn, cultureLt};

       var requestLocalizationOptions = new RequestLocalizationOptions();
       requestLocalizationOptions.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider());
       requestLocalizationOptions.SupportedCultures = supportedCultures;
       requestLocalizationOptions.SupportedUICultures = supportedCultures;

       app.UseRequestLocalization(requestLocalizationOptions);
Run Code Online (Sandbox Code Playgroud)

我需要在构造函数中获取这个列表,现在在构造函数控制器中我初始化了变量

private readonly IOptions<RequestLocalizationOptions> _locOptions;
Run Code Online (Sandbox Code Playgroud)

在行动中,我试图得到这样的列表:

var cultureItems = _locOptions.Value.SupportedUICultures
            .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
            .ToList();
Run Code Online (Sandbox Code Playgroud)

但问题是这一行只返回当前在应用程序中设置的文化......如何同时获得 EN 和 LT 文化?

tmg*_*tmg 7

您必须配置 RequestLocalizationOptions。

public void ConfigureServices(IServiceCollection services)
{         
     // ... enter code here

     // RequestLocalizationOptions must to be configured 
     var cultureLt = new CultureInfo("LT");
     var cultureEn = new CultureInfo("EN");
     var supportedCultures = new[] { cultureEn, cultureLt };

     services.Configure<RequestLocalizationOptions>(options =>
     {
         options.SupportedCultures = supportedCultures;
         options.SupportedUICultures = supportedCultures;
     });

     // Add them to IServiceCollection
     services.AddLocalization();

     // ... enter code here
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    // ... enter code here

    // add RequestLocalizationMiddleware to pipeline
    app.UseRequestLocalization();

    app.UseMvc...
}
Run Code Online (Sandbox Code Playgroud)

  • .net 5.解决了。将配置从配置移动到配置服务,它的工作方式就像一个魅力。 (2认同)