Use "Configure<RequestLocalizationOptions>" and / or "UseRequestLocalization(options)"?

1.2k Views Asked by At

I am using Request Localization in a NET Core 7 and Razor Pages application:

builder.Services.AddRazorPages();

builder.Services.Configure<RequestLocalizationOptions>(options => {
  options.DefaultRequestCulture = new RequestCulture("pt");
  options.SupportedCultures = new List<CultureInfo> { new CultureInfo("en"), new CultureInfo("pt") };
  options.SupportedUICultures = new List<CultureInfo> { new CultureInfo("en"), new CultureInfo("pt") };
  options.RequestCultureProviders.Insert(0, new RouteDataRequestCultureProvider { 
    RouteDataStringKey = "culture",
    UIRouteDataStringKey = "culture",
    Options = options
  }); 
});

WebApplication application = builder.Build();

application.UseRouting();

application.MapRazorPages();

application.UseRequestLocalization();

The method UseRequestLocalization also accepts RequestLocalizationOptions.

Do I need to pass RequestLocalizationOptions to this method and also use:

builder.Services.Configure<RequestLocalizationOptions>

Or just one of those? And which one?

1

There are 1 best solutions below

2
On

You can use AddRequestLocalization/UseRequestLocalization, first one accepts action allowing to configure RequestLocalizationOptions via options pattern, second one setups RequestLocalizationMiddleware (enables automatic setting of the culture for HttpRequests based on information sent by the client in headers and logic provided by the application, consumes IOptions<RequestLocalizationOptions>).

Or you can pass the instance of RequestLocalizationOptions directly to as done in the docs:

var supportedCultures = new[] { "en-US", "fr" };
var localizationOptions = new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
    .AddSupportedCultures(supportedCultures)
    .AddSupportedUICultures(supportedCultures);

app.UseRequestLocalization(localizationOptions);

The only difference how IOptions<RequestLocalizationOptions> created and handled - in first case they would be handled via DI.