Пример #1
0
 public EntityLocalizer(
     ILocalizedPropertyRepository localizedPropertyRepository,
     ILanguageService languageService,
     IEntityLocalizedPropertyInfoResolver localiedPropertiesInfoResolver,
     IOptionsSnapshot <LocalizationOptions> localizationOptions)
 {
     _localizedPropertyRepository    = localizedPropertyRepository;
     _languageService                = languageService;
     _localiedPropertiesInfoResolver = localiedPropertiesInfoResolver;
     _localizationOptions            = localizationOptions.Value;
 }
Пример #2
0
 public ModelLocalizer(
     ILocalizedPropertyRepository localizedPropertyRepository,
     IEntityLocalizer entityLocalizer,
     ILanguageRepository languageRepository,
     ILanguageService languageService,
     IModelLocalizedPropertyResolver modelLocalizedPropertyResolver,
     IMapper mapper,
     IOptionsSnapshot <LocalizationOptions> localizationOptions)
 {
     _localizedPropertyRepository    = localizedPropertyRepository;
     _entityLocalizer                = entityLocalizer;
     _languageRepository             = languageRepository;
     _languageService                = languageService;
     _modelLocalizedPropertyResolver = modelLocalizedPropertyResolver;
     _mapper = mapper;
     _localizationOptions = localizationOptions.Value;
 }
        /// <summary>
        /// Adds Localization services to the <see cref="IServiceCollection"/>. and AddAutoMapper
        /// </summary>
        /// <param name="services"></param>
        /// <param name="options"></param>
        /// <param name="configAction"></param>
        /// <param name="assemblies"></param>
        /// <returns></returns>
        public static IServiceCollection AddNopLocalization(this IServiceCollection services, Action <LocalizationOptions> configureOptions,
                                                            Action <IServiceProvider, IMapperConfigurationExpression> configAction, params Assembly[] assemblies)
        {
            var localizationOptions = new LocalizationOptions();

            configureOptions(localizationOptions);
            services.Configure(configureOptions);

            services.Configure <RequestLocalizationOptions>(options =>
            {
                localizationOptions.DefaultLanguage.NotNull(nameof(localizationOptions.DefaultLanguage));
                localizationOptions.OtherLanguages.NotNull(nameof(localizationOptions.OtherLanguages));

                var supportedCultures = localizationOptions.OtherLanguages.Concat(new[] { localizationOptions.DefaultLanguage })
                                        .Select(i => new CultureInfo(i)).ToList();

                options.DefaultRequestCulture = new RequestCulture(localizationOptions.DefaultLanguage);
                options.SupportedCultures     = supportedCultures;
                options.SupportedUICultures   = supportedCultures;

                //options.RequestCultureProviders.Clear();
                //var requestProvider = new RouteDataRequestCultureProvider() { Options = options };

                var requestProvider = new RouteSegmentRequestCultureProvider()
                {
                    Options = options, CultureSegmentIndex = localizationOptions.CultureSegmentIndex
                };
                options.RequestCultureProviders.Insert(0, requestProvider);

                localizationOptions.ConfigureRequestLocalizationOptions?.Invoke(options);
            });

            services.Configure <RouteOptions>(options =>
            {
                options.ConstraintMap.Add("culture", typeof(CultureRouteConstraint));
            });

            services.AddLocalization(opt => opt.ResourcesPath = "Resources");

            switch (localizationOptions.CacheMode)
            {
            case CacheMode.MemoryCache:
                services.AddMemoryCacheManager();
                break;

            case CacheMode.RedisCacheWithProtoBuf:
                services.AddRedisWithProtoBufCacheManager();
                break;
            }

            TypeConverterRegistrar.RegisterTypeConverters();

            services.AddServices();

            services.AddAutoMapper((serviceProvider, mapperConfigExpression) =>
            {
                mapperConfigExpression.AddProfile(new MappingProfile(assemblies));
                //mapperConfigExpression.ValidateInlineMaps = false;
                //mapperConfigExpression.CreateMissingTypeMaps = true;

                configAction?.Invoke(serviceProvider, mapperConfigExpression);
            }, assemblies);

            return(services);
        }