/// <summary> /// Adds Xaki services to the specified <see cref="IMvcBuilder"/>. /// </summary> public static IMvcBuilder AddXaki(this IMvcBuilder mvc, XakiOptions xakiOptions) { mvc.Services.AddXaki(xakiOptions); return(mvc.AddMvcOptions(options => { options.ModelBinderProviders.Insert(0, new LocalizableModelBinderProvider()); })); }
private static IServiceCollection AddXaki(this IServiceCollection services, XakiOptions xakiOptions) { services.AddHttpContextAccessor(); services.Configure <RequestLocalizationOptions>(options => { var supportedCultures = xakiOptions .SupportedLanguages .Select(i => new CultureInfo(i)) .ToList(); options.DefaultRequestCulture = new RequestCulture("en", "en"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; // TODO support RouteDataRequestCultureProvider (https://joonasw.net/view/aspnet-core-localization-deep-dive) }); services.AddScoped <IObjectLocalizer>(provider => new ObjectLocalizer { RequiredLanguages = new HashSet <string>(xakiOptions.RequiredLanguages), OptionalLanguages = new HashSet <string>(xakiOptions.OptionalLanguages), LanguageResolvers = new List <ILanguageResolver> { new RequestLanguageResolver(provider.GetService <IHttpContextAccessor>()), new CultureInfoLanguageResolver(), new DefaultLanguageResolver("en") } }); if (xakiOptions.EnablePerCallLocalizeExtensions) { var provider = services.BuildServiceProvider(); ObjectLocalizerConfig.Set(() => provider.GetService <IObjectLocalizer>()); } return(services); }