/// <summary> /// Adds services required for application localization. /// The Asp.Net Core AddLocalization() method will be called. /// </summary> /// <param name="services">The Microsoft.Extensions.DependencyInjection.IServiceCollection to add the services to.</param> /// <param name="setupAction">An System.Action<ForEvolveLocalizationOptions> to configure the ForEvolve.AspNetCore.Localization.ForEvolveLocalizationOptions.</param> /// <returns>The Microsoft.Extensions.DependencyInjection.IServiceCollection so that additional calls can be chained.</returns> public static IServiceCollection AddForEvolveLocalization(this IServiceCollection services, Action <ForEvolveLocalizationOptions> setupAction) { // Localization Options var supportedCultures = new List <CultureInfo>(new[] { new CultureInfo("en"), new CultureInfo("fr"), new CultureInfo("he"), new CultureInfo("pt"), new CultureInfo("pt-BR"), new CultureInfo("es"), new CultureInfo("no"), new CultureInfo("nb"), }); var defaultCulture = supportedCultures.First(); var localizationOptions = new ForEvolveLocalizationOptions { ResourcesPath = DefaultResourcesPath, MvcOptions = new ForEvolveMvcLocalizationOptions { EnableDataAnnotationsLocalization = true, EnableViewLocalization = true, ConfigureValidationMetadataProvider = provider => { }, DefaultAdapterOptions = new ForEvolveMvcDefaultLocalizationAdapterOptions() }, RequestLocalizationOptions = CreateDefaultRequestLocalizationOptions(defaultCulture, supportedCultures) }; setupAction(localizationOptions); // Create and configure the LocalizationValidationMetadataProvider var defaultValidationMetadataProvider = new ForEvolveLocalizationValidationMetadataProvider <DataAnnotationSharedResource>( // Custom multi-messages adapter that duplicate the attribute logic // A better solution is welcome :) new StringLengthLocalizationValidationAttributeAdapter(), // Keep this one last new DefaultLocalizationValidationAttributeAdapter(localizationOptions.MvcOptions.DefaultAdapterOptions) ); localizationOptions.MvcOptions .ConfigureValidationMetadataProvider(defaultValidationMetadataProvider); // Regiter services services .AddSingleton(localizationOptions) //.AddSingleton<ILocalizationValidationMetadataProvider>(defaultValidationMetadataProvider) .AddLocalization(options => { options.ResourcesPath = localizationOptions.ResourcesPath; }); // Keep global references Options = localizationOptions; ValidationMetadataProvider = defaultValidationMetadataProvider; return(services); }
public MvcOptionsInitializer(ILocalizationValidationMetadataProvider defaultValidationMetadataProvider) { _defaultValidationMetadataProvider = defaultValidationMetadataProvider ?? throw new ArgumentNullException(nameof(defaultValidationMetadataProvider)); }