private RequestLocalizationOptions GetRequestLocalizationOptions(string defaultLang) { var arSACulture = new CultureInfo("ar") { DateTimeFormat = new CultureInfo("en").DateTimeFormat }; var supportedCultures = new[] { new CultureInfo("en"), arSACulture }; var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture(defaultLang), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); options.RequestCultureProviders.Insert(0, requestProvider); return(options); }
public static void ConfigureCustomMvcRouting(this IApplicationBuilder app) { app.UseRouter(routes => { //api/{culture=en}/{*mvcRoute} routes.MapMiddlewareRoute("api/{culture=en}/{*mvcRoute}", subApp => { var supportedCultures = new[] { new CultureInfo("en"), new CultureInfo("ru"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); subApp.UseRequestLocalization(localizationOptions); subApp.UseMvcWithDefaultRoute(); }); }); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostEnvironment env) { if (env.EnvironmentName == "Development") { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseCookiePolicy(); app.UseRequestLocalization(); app.UseStaticFiles(); app.UseRouting(); IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("en"), new CultureInfo("fr"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); //app.UseEndpoints(endpoints => //{ // //endpoints.MapRazorPages(); // endpoints.MapControllerRoute("default", "{culture=en}/{controller=Home}/{action=Index}/{id?}"); //}); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=en}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseRouting(); subApp.UseEndpoints(mvcRoutes => { mvcRoutes.MapControllerRoute("default", "{culture=en}/{controller=Home}/{action=Index}/{id?}"); }); }); }); //https://forums.asp.net/t/2159027.aspx?How+can+I+use+globalization+and+localization+in+net+core+3+0+preview8+ }
public RedirectUnsupportedCultures(IOptions <RequestLocalizationOptions> options) { RouteDataRequestCultureProvider provider = options.Value.RequestCultureProviders .OfType <RouteDataRequestCultureProvider>() .First(); _cultureItems = options.Value.SupportedUICultures; _cultureRouteKey = provider.RouteDataStringKey; }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } //-------------------------------------------------------------------------- //RequestLocationOptions, especificando as culturas suportadas IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("pt-BR"), new CultureInfo("en-US") }; var opcoesDeCulturas = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("pt-BR"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); opcoesDeCulturas.RequestCultureProviders.Insert(0, requestProvider); //-------------------------------------------------------------------------- app.UseRequestLocalization(opcoesDeCulturas); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=pt-BR}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(opcoesDeCulturas); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=pt-BR}/{controller=Home}/{action=Index}/{id?}"); }); }); }); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { // get the current directory to store the logs var path = Directory.GetCurrentDirectory(); // get the file name from configuration file loggerFactory.AddFile($"{path}\\Logs\\{Configuration.GetValue<string>("LogFileName")}"); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // use the swagger middleware app.UseSwagger(); app.UseSwaggerUI(options => options.SwaggerEndpoint("/swagger/v1/swagger.json", "Hahn Services")); // include the routing middleware app.UseRouting(); // include the cors middleware app.UseCors(); // include the authentication middleware app.UseAuthorization(); // use for routing end points app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); //Add our new middleware to the pipeline app.UseMiddleware <RequestResponseLoggingMiddleware>(); // Add the middleware the handle the exception at global level app.UseGlobalExceptionMiddleware(); #region Localization // define the supported cultures IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("en-US"), new CultureInfo("de-DE") }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture(culture: Configuration.GetValue <string>("DefaultCulture"), uiCulture: Configuration.GetValue <string>("DefaultCulture")), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; // app.UseRequestLocalization(localizationOptions); var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); var locOptions = app.ApplicationServices.GetService <IOptions <RequestLocalizationOptions> >(); // use the localization middleware app.UseRequestLocalization(locOptions.Value); #endregion }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseBrowserLink(); app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseHsts(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthentication(); IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("en-US"), new CultureInfo("pl-PL"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("pl-PL"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=pl-PL}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=pl-PL}/{controller=Home}/{action=Index}/{id?}"); }); }); }); if (!CurrentEnvironment.IsEnvironment("Testing") && !CurrentEnvironment.IsEnvironment("SingleTest")) { RolesData.SeedRoles(app.ApplicationServices, Configuration).Wait(); } }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("vi-VD"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en-US"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=en-US}/{controller=RegisterViews}/{action=Create}/{id?}"); }); }); }); //app.UseMvc(routes => //{ // routes.MapRoute( // name: "default", // template: "{controller=RegisterViews}/{action=Create}/{id?}"); //}); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { var locOptions = app.ApplicationServices.GetService <IOptions <RequestLocalizationOptions> >(); app.UseRequestLocalization(locOptions.Value); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("en"), new CultureInfo("fr"), new CultureInfo("es"), new CultureInfo("cs"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=en}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=en}/{controller=Home}/{action=Index}/{id?}"); }); }); }); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseCookiePolicy(); app.UseRequestLocalization(); app.UseStaticFiles(); app.UseRouting(); IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("en"), new CultureInfo("fr"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=en}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseRouting(); subApp.UseEndpoints(mvcRoutes => { mvcRoutes.MapControllerRoute("default", "{culture=en}/{controller=Home}/{action=Index}/{id?}"); }); }); }); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseStatusCodePagesWithReExecute("/Error/{0}"); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseAuthentication(); var supportedCultures = Languages.SupportedCultures; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=en}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=en}/{controller=Home}/{action=Index}/{id?}"); }); }); }); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("en"), new CultureInfo("ar"), }; var localizationOptions = new RequestLocalizationOptions { // This is the fallback that is used if we can't figure out which one should be used DefaultRequestCulture = new RequestCulture("en"), SupportedCultures = supportedCultures, // used for number and date formats etc SupportedUICultures = supportedCultures // used for looking up translations from resource files. }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { // below will add support to lang in URL (/ar-SA/..) routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp => { //The middleware adds 3 providers for the request culture by default: // QueryStringRequestCultureProvider: Gets the culture from query string values // CookieRequestCultureProvider: Gets the culture from a cookie // AcceptLanguageHeaderRequestCultureProvider: Gets the culture from the Accept-Language request header subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}"); }); }); }); app.UseMvc(); }
public static void UseCustomRouteRequestLocalizationProvider( this IApplicationBuilder applicationBuilder, IOptionsMonitor <LocalizationSettings> localizationConfiguration) { const int First = 0; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture(localizationConfiguration.CurrentValue.DefaultCulture), SupportedCultures = GetSupportedCultures(localizationConfiguration.CurrentValue.SupportedCultures), SupportedUICultures = GetSupportedCultures(localizationConfiguration.CurrentValue.SupportedCultures) }; var routeRequestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(First, routeRequestProvider); applicationBuilder.UseRequestLocalization(localizationOptions); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddJsonFileLocalization(); services.Configure <JsonLocalizationOptions>(opt => { opt.CultureSuffixStrategy = CultureSuffixStrategy.TwoLetterISO6391; opt.ResourceRelativePath = "CustomResourcesFolder"; opt.WatchForChanges = true; }); services.Configure <RequestLocalizationOptions>(opts => { var supportedCultures = new List <CultureInfo> { new CultureInfo("en"), new CultureInfo("ru") }; opts.FallBackToParentCultures = false; opts.FallBackToParentUICultures = false; opts.DefaultRequestCulture = new RequestCulture("en"); // Formatting numbers, dates, etc. opts.SupportedCultures = supportedCultures; // UI strings that we have localized. opts.SupportedUICultures = supportedCultures; var routeDataProvider = new RouteDataRequestCultureProvider() { Options = opts, RouteDataStringKey = "lang", UIRouteDataStringKey = "lang" }; opts.RequestCultureProviders.Clear(); opts.RequestCultureProviders.Insert(0, routeDataProvider); }); services.Configure <RouteOptions>(options => { options.ConstraintMap.Add("lang", typeof(LanguageRouteConstraint)); }); services.AddRouting(x => x.LowercaseUrls = true); services .AddMvc(opts => opts.Filters.Add(new MiddlewareFilterAttribute(typeof(LocalizationPipeline)))) .AddDataAnnotationsLocalization(); services.AddSingleton <IValidationAttributeAdapterProvider, LocalizedValidationAttributeAdapterProvider>(); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext <OnlineTicketingSystemCoreContext>(options => options.UseSqlServer(Configuration.GetConnectionString("OnlineTicketingSystemCore"))); //services.AddControllersWithViews(); services.AddLocalization(options => options.ResourcesPath = "Resources"); services.AddMvc().AddDataAnnotationsLocalization(options => { options.DataAnnotationLocalizerProvider = (type, factory) => factory.Create(typeof(Language)); }); services.Configure <RequestLocalizationOptions>(options => { var supportedCultures = new[] { new CultureInfo("en"), new CultureInfo("fr") }; options.DefaultRequestCulture = new RequestCulture("en"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; var provider = new RouteDataRequestCultureProvider(); provider.RouteDataStringKey = "lang"; provider.UIRouteDataStringKey = "lang"; provider.Options = options; options.RequestCultureProviders = new[] { provider }; }); services.Configure <RouteOptions>(options => { options.ConstraintMap.Add("lang", typeof(LanguageRouteConstraint)); }); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // --> localization and route translation services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Latest); services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; }); services.AddMvc() .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, opts => { opts.ResourcesPath = "Resources"; }) .AddDataAnnotationsLocalization(); services.Configure <RequestLocalizationOptions>(options => { var supportedCultures = new List <CultureInfo>(); var defaultRequestCulture = Configuration.GetSection("AppSettings:DefaultRequestCulture").Value; var cultureSettings = Configuration.GetSection("AppSettings:SupportedCultures").Value?.Split(new[] { ',' }).ToList(); cultureSettings.ForEach(delegate(string culture) { supportedCultures.Add(new CultureInfo(culture)); }); options.DefaultRequestCulture = new RequestCulture(culture: defaultRequestCulture, uiCulture: defaultRequestCulture); // en options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; var requestProvider = new RouteDataRequestCultureProvider() { Options = options }; options.RequestCultureProviders.Insert(0, requestProvider); }); services.AddSingleton <IActionContextAccessor, ActionContextAccessor>(); services.AddTransient <TranslationRoute>(); services.AddSingleton <TranslationTransformer>(); // <-- services.AddControllersWithViews(); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseResponseCaching(); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseAuthentication(); var supportedCultures = new List <CultureInfo> { new CultureInfo("tr-TR"), new CultureInfo("en-US"), }; var localizationOptions = new RequestLocalizationOptions { SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures, DefaultRequestCulture = new RequestCulture("tr-TR"), }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=tr-TR}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=tr-TR}/{controller=Home}/{action=Index}/{id?}"); mvcRoutes.MapRoute( name: "default2", template: "{culture=tr-TR}/homepage", defaults: new { controller = "Home", action = "Index" }); mvcRoutes.MapRoute( name: "videoDefault", template: "{culture=tr-TR}/videos", defaults: new { controller = "Videos", action = "Index" }); mvcRoutes.MapRoute( name: "episodeDefault", template: "{culture=tr-TR}/videos/{id}/{title}", defaults: new { controller = "Videos", action = "Episode" }); //mvcRoutes.MapRoute( // name: "episodeDefault", // template: "{culture=tr-TR}/episode/{id}", // defaults: new { controller = "Videos", action = "Episode" }); mvcRoutes.MapRoute( name: "allEpisodeDefault", template: "{culture=tr-TR}/videos/all", defaults: new { controller = "Videos", action = "AllVideos" }); }); }); }); //app.UseMvc(); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { try { _services = services; _services.AddScoped <IEmailSender, AuthMessageSender>(); _services.AddScoped <ISmsSender, AuthMessageSender>(); _services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); _services.AddSingleton <IActionContextAccessor, ActionContextAccessor>(); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); _services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true)); _services.AddOptions(); _services.AddSingleton(typeof(IStringLocalizer), typeof(NccStringLocalizer <SharedResource>)); _services.AddLocalization(); _mvcBuilder = _services.AddMvc(config => { var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build(); config.Filters.Add(new AuthorizeFilter(policy)); config.CacheProfiles.Add(NccCacheProfile.Default, new CacheProfile() { VaryByHeader = "User-Agent", Duration = 300, VaryByQueryKeys = new string[] { "id", "name", "pageNumber", "page", "pageSize", "model", "lang", "status", "sessionId", "requestId", "start", "slug", } }); }); _mvcBuilder.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix); _mvcBuilder.AddDataAnnotationsLocalization(options => { options.DataAnnotationLocalizerProvider = (type, factory) => new NccStringLocalizer <SharedResource>(factory, new HttpContextAccessor()); }); _services.AddMaintenance(() => _setupConfig.IsMaintenanceMode, Encoding.UTF8.GetBytes("<div style='width:100%;text-align:center; padding-top:10px;'><h1>" + _setupConfig.MaintenanceMessage + "</h1></div>"), "text/html", _setupConfig.MaintenanceDownTime * 60); _services.AddSession(options => { options.Cookie.Name = ".DamaCoreCMS.Cookie.Session"; options.IdleTimeout = TimeSpan.FromMinutes(20); options.Cookie.HttpOnly = true; }); _services.AddResponseCacheingAndCompression(_serviceProvider); _services.AddSingleton(Configuration); _services.AddNccCoreModuleServices(); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); _services.SetGlobalCache(_serviceProvider); var themeFolder = Path.Combine(_hostingEnvironment.ContentRootPath, NccInfo.ThemeFolder); var moduleFolder = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.ModuleFolder); var coreModuleFolder = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.CoreModuleFolder); var themesDirectoryContents = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.ThemeFolder); _themeManager.ScanThemeDirectory(themeFolder); _themeManager.RegisterThemes(_mvcBuilder, _services, _serviceProvider, themesDirectoryContents); var loggerFactory = _serviceProvider.GetService <ILoggerFactory>(); var logger = loggerFactory.CreateLogger <Startup>(); _moduleManager.LoadModules(coreModuleFolder, logger); _moduleManager.LoadModules(moduleFolder, logger); _services.AddModuleDependencies(_mvcBuilder); if (SetupHelper.IsDbCreateComplete) { _startup.SelectDatabase(_services); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); _moduleManager.AddModulesAsApplicationPart(_mvcBuilder, _services, _serviceProvider, logger); _moduleManager.AddModuleServices(_services, logger); _moduleManager.AddModuleFilters(_services, logger); _moduleManager.AddShortcodes(_services, logger); _moduleManager.AddModuleWidgets(_services, logger); _moduleManager.AddModuleAuthorizationHandlers(_services, logger); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); _services.AddCustomizedIdentity(_serviceProvider.GetService <INccSettingsService>()); _moduleManager.LoadModuleMenus(logger); } var defaultCulture = new RequestCulture("en"); if (SetupHelper.IsAdminCreateComplete) { GlobalContext.SetupConfig = SetupHelper.LoadSetup(); defaultCulture = new RequestCulture(GlobalContext.SetupConfig.Language); } _services.Configure <RouteOptions>(options => { options.ConstraintMap.Add("lang", typeof(LanguageRouteConstraint)); }); _services.Configure <RequestLocalizationOptions>( opts => { var supportedCultures = SupportedCultures.Cultures; opts.DefaultRequestCulture = defaultCulture; opts.SupportedCultures = supportedCultures; opts.SupportedUICultures = supportedCultures; var provider = new RouteDataRequestCultureProvider(); provider.RouteDataStringKey = "lang"; provider.UIRouteDataStringKey = "lang"; provider.Options = opts; opts.RequestCultureProviders = new[] { provider }; } ); _services.Configure <ClassLibraryLocalizationOptions>( options => options.ResourcePaths = new Dictionary <string, string> { { "DamaCoreCMS.Framework", "i18n/Resources" }, { "DamaCoreCMS.Web", "Resources" } } ); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); _serviceProvider = _services.BuildModules(ConfigurationRoot, _hostingEnvironment); if (SetupHelper.IsDbCreateComplete) { _themeManager.RegisterThemeWidgets(_mvcBuilder, _services, _serviceProvider, themesDirectoryContents); _moduleManager.RegisterModuleWidgets(_mvcBuilder, _services, _serviceProvider, logger); _moduleManager.RegisterModuleFilters(_mvcBuilder, _serviceProvider, logger); _moduleManager.RegisterModuleShortCodes(_mvcBuilder, _serviceProvider); } GlobalContext.ServiceProvider = _serviceProvider; GlobalContext.Services = _services; DamaCoreCMSHost.Mediator = _serviceProvider.GetService <IMediator>(); DamaCoreCMSHost.Services = _services; DamaCoreCMSHost.ServiceProvider = _serviceProvider; GlobalMessageRegistry.LoadMessagesFromStorage(); } catch (Exception ex) { _exceptions[ExceptionsOnConfigureServices].Add(ex); } }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); app.UseBrowserLink(); //if (env.IsDevelopment()) //{ // app.UseDeveloperExceptionPage(); // app.UseDatabaseErrorPage(); // app.UseBrowserLink(); //} //else //{ // app.UseDeveloperExceptionPage(); // app.UseDatabaseErrorPage(); // app.UseBrowserLink(); // app.UseExceptionHandler("/" + DCI + "/Home/Error"); //} app.UseHangfireServer(); // app.UseHangfireDashboard(); app.UseHangfireDashboard("/hangfire"); app.UseRewriter(new RewriteOptions().AddRedirectToHttps(StatusCodes.Status301MovedPermanently, 443)); app.UseStaticFiles(); app.UseSession(); //app.UseKendo(env); // Add external authentication middleware below. To configure them please see https://go.microsoft.com/fwlink/?LinkID=532715 // UseAuthentication must be set before localization app.UseAuthentication(); // var context = new CustomAssemblyLoadContext(); // context.LoadUnmanagedLibrary(Path.Combine(env.WebRootPath, "DinkToPdf", "libwkhtmltox.dll")); // to add the request localization middleware IList <CultureInfo> supportedCultures = new List <CultureInfo> { // new CultureInfo("ar"), new CultureInfo("ar-MA"), new CultureInfo("ar-DZ"), new CultureInfo("ar-TN"), new CultureInfo("ar-LY"), new CultureInfo("ar-EG"), new CultureInfo("ar-LB"), new CultureInfo("ar-JO"), new CultureInfo("ar-SY"), new CultureInfo("ar-IQ"), new CultureInfo("ar-KW"), new CultureInfo("ar-YE"), new CultureInfo("ar-OM"), new CultureInfo("ar-QA"), new CultureInfo("ar-AE"), new CultureInfo("ar-BH"), // new CultureInfo("ar-SA"), new CultureInfo("ar-MR"), new CultureInfo("ar-SD"), new CultureInfo("ar-SO"), new CultureInfo("ar-DJ"), new CultureInfo("ar-KM"), new CultureInfo("en") }; //var localizationOptions = new RequestLocalizationOptions //{ // DefaultRequestCulture = new RequestCulture(DCI), // SupportedCultures = supportedCultures, // SupportedUICultures = supportedCultures //}; //var requestProvider = new RouteDataRequestCultureProvider //{ // Options = localizationOptions //}; //localizationOptions.RequestCultureProviders.Insert(0, requestProvider); //app.UseRequestLocalization(localizationOptions); //app.UseRouter(routes => //{ // routes.MapMiddlewareRoute("{culture=" + DCI + "}/{*mvcRoute}", subApp => // { // subApp.UseRequestLocalization(localizationOptions); // subApp.UseMvc(mvcRoutes => // { // mvcRoutes.MapRoute( // name: "default", // template: "{culture=" + DCI + "}/{controller=Home}/{action=Index}/{id?}"); // }); // }); //}); var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture(DCI), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider { Options = localizationOptions }; localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRequestLocalization(localizationOptions); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=" + DCI + "}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { // mvcRoutes.MapRoute( //name: "PostById", //template: "{culture=" + DCI + "}/Post/{id:Guid}/{t}", //defaults: new { controller = "Posts", action = "Details", t = String.Empty }); mvcRoutes.MapAreaRoute( name: "messages", areaName: "messages", template: "{culture=" + DCI + "}/messages/{controller}/{action}/{id?}"); mvcRoutes.MapRoute( name: "Blogs", template: "{culture=" + DCI + "}/Blog/{id:int}/{keyword}", defaults: new { controller = "Blogs", action = "Index", keyword = String.Empty }); mvcRoutes.MapRoute( name: "default", template: "{culture=" + DCI + "}/{controller=Home}/{action=Index}/{id?}"); }); }); }); app.UseMvc(routes => { routes.MapRoute( name: "MyArea", template: "{area:exists}/{controller}/{action}/{id?}"); routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { _services = services; _services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true)); _services.AddOptions(); //services.AddSingleton(typeof(IStringLocalizerFactory), typeof(ClassLibraryStringLocalizerFactory)); services.AddSingleton(typeof(IStringLocalizer), typeof(NccStringLocalizer <SharedResource>)); _services.AddLocalization(); _mvcBuilder = services.AddMvc(); _mvcBuilder.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix); _mvcBuilder.AddDataAnnotationsLocalization(options => { options.DataAnnotationLocalizerProvider = (type, factory) => new NccStringLocalizer <SharedResource>(factory, new HttpContextAccessor()); }); _services.AddResponseCaching(); _services.AddSession(); _services.AddDistributedMemoryCache(); _services.AddResponseCompression(); _services.AddSingleton(Configuration); _services.AddNccCoreModuleRepositoryAndServices(); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); _themeManager = new ThemeManager(); var themeFolder = Path.Combine(_hostingEnvironment.ContentRootPath, NccInfo.ThemeFolder); GlobalConfig.Themes = _themeManager.ScanThemeDirectory(themeFolder); var themesDirectoryContents = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.ThemeFolder); _themeManager.RegisterThemes(_mvcBuilder, _services, _serviceProvider, themesDirectoryContents); var moduleFolder = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.ModuleFolder); var coreModuleFolder = _hostingEnvironment.ContentRootFileProvider.GetDirectoryContents(NccInfo.CoreModuleFolder); var coreModules = _moduleManager.LoadModules(coreModuleFolder); var userModules = _moduleManager.LoadModules(moduleFolder); GlobalConfig.Modules.AddRange(userModules); _services.AddMaintenance(() => _setupConfig.IsMaintenanceMode, Encoding.UTF8.GetBytes("<div style='width:100%;text-align:center; padding-top:10px;'><h1>" + _setupConfig.MaintenanceMessage + "</h1></div>"), "text/html", _setupConfig.MaintenanceDownTime * 60); if (SetupHelper.IsDbCreateComplete) { if (SetupHelper.SelectedDatabase == "SqLite") { _services.AddDbContext <NccDbContext>(options => options.UseSqlite(SetupHelper.ConnectionString, opt => opt.MigrationsAssembly("NetCoreCMS.Framework")) ); } else if (SetupHelper.SelectedDatabase == "MSSQL") { _services.AddDbContext <NccDbContext>(options => options.UseSqlServer(SetupHelper.ConnectionString, opt => opt.MigrationsAssembly("NetCoreCMS.Framework")) ); } else if (SetupHelper.SelectedDatabase == "MySql") { _services.AddDbContext <NccDbContext>(options => options.UseMySql(SetupHelper.ConnectionString, opt => opt.MigrationsAssembly("NetCoreCMS.Framework")) ); } _services.AddCustomizedIdentity(); _startup.RegisterDatabase(_services); _services.AddAuthorization(options => { options.AddPolicy("SuperAdmin", policy => policy.Requirements.Add(new AuthRequire("SuperAdmin", ""))); options.AddPolicy("Administrator", policy => policy.Requirements.Add(new AuthRequire("Administrator", ""))); options.AddPolicy("Editor", policy => policy.Requirements.Add(new AuthRequire("Editor", ""))); options.AddPolicy("Author", policy => policy.Requirements.Add(new AuthRequire("Author", ""))); options.AddPolicy("Contributor", policy => policy.Requirements.Add(new AuthRequire("Contributor", ""))); options.AddPolicy("Subscriber", policy => policy.Requirements.Add(new AuthRequire("Subscriber", ""))); }); _services.AddSingleton <IAuthorizationHandler, AuthRequireHandler>(); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); GlobalConfig.Modules = _moduleManager.RegisterModules(_mvcBuilder, _services, _serviceProvider); _moduleManager.RegisterModuleRepositoryAndServices(_mvcBuilder, _services, _serviceProvider); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); GlobalConfig.Widgets = _moduleManager.RegisterModuleWidgets(_mvcBuilder, _services, _serviceProvider); var themeWidgets = _themeManager.RegisterThemeWidgets(_mvcBuilder, _services, _serviceProvider, themesDirectoryContents); if (themeWidgets != null && themeWidgets.Count > 0) { GlobalConfig.Widgets.AddRange(themeWidgets); } _nccShortCodeProvider = _serviceProvider.GetService <NccShortCodeProvider>(); GlobalConfig.ShortCodes = _nccShortCodeProvider.ScanAndRegisterShortCodes(GlobalConfig.Modules); } var defaultCulture = new RequestCulture("en"); if (SetupHelper.IsAdminCreateComplete) { GlobalConfig.SetupConfig = SetupHelper.LoadSetup(); defaultCulture = new RequestCulture(GlobalConfig.SetupConfig.Language); } services.Configure <RouteOptions>(options => { options.ConstraintMap.Add("lang", typeof(LanguageRouteConstraint)); }); _services.Configure <RequestLocalizationOptions>( opts => { var supportedCultures = SupportedCultures.Cultures; opts.DefaultRequestCulture = defaultCulture; opts.SupportedCultures = supportedCultures; opts.SupportedUICultures = supportedCultures; var provider = new RouteDataRequestCultureProvider(); provider.RouteDataStringKey = "lang"; provider.UIRouteDataStringKey = "lang"; provider.Options = opts; opts.RequestCultureProviders = new[] { provider }; } ); services.Configure <ClassLibraryLocalizationOptions>( options => options.ResourcePaths = new Dictionary <string, string> { { "NetCoreCMS.Framework", "i18n/Resources" }, { "NetCoreCMS.Web", "Resources" } } ); _serviceProvider = _services.Build(ConfigurationRoot, _hostingEnvironment); GlobalConfig.ServiceProvider = _serviceProvider; GlobalConfig.Services = _services; }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { #region authenctication and authorization services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options => { options.AccessDeniedPath = "/home/forbbiden"; options.LoginPath = "/account/login"; options.ExpireTimeSpan = TimeSpan.FromDays(30); options.SlidingExpiration = true; }); services.AddAuthorization(options => { options.AddPolicy("admin", policy => policy.RequireRole("admin")); options.AddPolicy("badmin", policy => policy.RequireRole("buildingAdmin")); options.AddPolicy("owner", policy => policy.RequireRole("propertyOwner")); options.AddPolicy("both", policy => policy.RequireRole("buildingAdmin", "propertyOwner")); }); #endregion ; #region localization services.AddJsonLocalization(); services.Configure <RequestLocalizationOptions>(options => { var supportedCultures = new List <CultureInfo> { new CultureInfo("ro"), new CultureInfo("en") }; options.DefaultRequestCulture = new RequestCulture("en"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; var provider = new RouteDataRequestCultureProvider(); provider.UIRouteDataStringKey = "lang"; provider.RouteDataStringKey = "lang"; provider.Options = options; options.RequestCultureProviders = new[] { provider }; }); services.Configure <RouteOptions>(options => { options.ConstraintMap.Add("lang", typeof(LanguageRouteConstraint)); }); #endregion ; services.AddDataProtection(); services.AddEmailService(); services.AddDependencies(); #region logging services.AddSingleton <ILoggerFactory, LoggerFactory>(); services.AddSingleton(typeof(ILogger <>), typeof(Logger <>)); services.AddLogging((builder) => builder.SetMinimumLevel(LogLevel.Error)); var serviceProvider = services.BuildServiceProvider(); var loggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>(); //configure NLog loggerFactory.AddNLog(new NLogProviderOptions { CaptureMessageTemplates = true, CaptureMessageProperties = true }); NLog.LogManager.LoadConfiguration("Configs/nlog.config"); #endregion ; #region configuration services.Configure <HashingConfig>(Configuration.GetSection("Hashing")); services.AddSingleton <IConfiguration>(Configuration); services.AddScoped <ValidateReCaptchaAttribute>(); services.AddTransient <ApartmentController>(); #endregion ; if (Configuration["InitDb"].Equals("true")) { var repository = serviceProvider.GetService <IBaseMongoRepository>(); var hashing = serviceProvider.GetService <IArgonHash>(); MongoDb.Initilize(repository, hashing, Configuration.GetSection("Hashing").Get <HashingConfig>()); } // url helper services.AddSingleton <IActionContextAccessor, ActionContextAccessor>() .AddScoped <IUrlHelper>(x => x.GetRequiredService <IUrlHelperFactory>() .GetUrlHelper(x.GetRequiredService <IActionContextAccessor>().ActionContext)); services.AddMvc(options => { options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()); //options.Filters.Add(new RequireHttpsAttribute()); }).AddViewLocalization().AddDataAnnotationsLocalization(); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseDetection(); app.UseCors(); if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "API Core V1"); }); } else { app.UseHsts(); } #region Localization IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("en-US") }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; app.UseRequestLocalization(localizationOptions); var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); var locOptions = app.ApplicationServices.GetService <IOptions <RequestLocalizationOptions> >(); app.UseRequestLocalization(locOptions.Value); #endregion Localization app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseMiddleware(typeof(ErrorWrappingMiddleware)); app.UseResponseCompression(); app.UseEndpoints(endpoints => { endpoints.MapHealthChecks("/health", new HealthCheckOptions() { ResultStatusCodes = { [HealthStatus.Healthy] = StatusCodes.Status200OK, [HealthStatus.Degraded] = StatusCodes.Status200OK, [HealthStatus.Unhealthy] = StatusCodes.Status503ServiceUnavailable } }); endpoints.MapControllers(); }); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, UserManager <UserApp> userManager, RoleManager <ApplicationRole> roleManager) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } var locOptions = app.ApplicationServices.GetService <IOptions <RequestLocalizationOptions> >(); app.UseRequestLocalization(locOptions.Value); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseAuthentication(); #region Router Language config var supportedCultures = new List <CultureInfo> { new CultureInfo(LANGCONSTANT.Az), new CultureInfo(LANGCONSTANT.En), new CultureInfo(LANGCONSTANT.Ru) }; var localizationOptions = new RequestLocalizationOptions { SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures, DefaultRequestCulture = new RequestCulture(LANGCONSTANT.Az), RequestCultureProviders = new List <IRequestCultureProvider> { new QueryStringRequestCultureProvider { QueryStringKey = "culture", UIQueryStringKey = "ui-culture" } } }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=" + LANGCONSTANT.Az + "}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=" + LANGCONSTANT.Az + "}/{controller=Home}/{action=Index}/{id?}"); mvcRoutes.MapRoute( name: "default", template: "/{controller=Home}/{action=Index}/{id?}"); }); }); }); #endregion DbInitializer.Seed(userManager, roleManager, Configuration).Wait(); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseStatusCodePagesWithReExecute("/Error/{0}"); } app.UseStaticFiles(); app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "Areas/Panel/wwwroot")), RequestPath = new PathString("/panel") }); app.UseAuthentication(); app.UseBrowserLink(); var options = app.ApplicationServices .GetService <IOptions <RequestLocalizationOptions> >(); app.UseRequestLocalization(options.Value); IList <CultureInfo> supportedCultures = new List <CultureInfo> { new CultureInfo("tr"), new CultureInfo("en"), }; var localizationOptions = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en-US"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "areas", template: "{area:exists}/{controller=Panel}/{action=Index}/{id?}"); mvcRoutes.MapRoute( name: "default", template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}"); }); }); }); app.UseMvc(); //app.UseMvc(routes => //{ // routes.MapRoute( // name: "areas", // template: "{area:exists}/{controller=Panel}/{action=Index}/{id?}" // ); // routes.MapRoute( // name: "default", // template: "{controller=Home}/{action=Index}/{id?}" // ); //}); }
public static IServiceCollection AddRequestLocalizationOptions(this IServiceCollection services, string defaultCulture, bool allowCountries, bool allowLanguages, params string[] supportedUICultures) { //https://andrewlock.net/adding-localisation-to-an-asp-net-core-application/ //Default culture should be set to where the majority of traffic comes from. //If the client sends through "en" and the default culture is "en-AU". Instead of falling back to "en" it will fall back to "en-AU". var defaultLanguage = defaultCulture.Split('-')[0]; //Support all formats for numbers, dates, etc. var formatCulturesList = new List <string>(); //Countries = en-US if (allowCountries) { foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) { if (!formatCulturesList.Contains(ci.Name)) { formatCulturesList.Add(ci.Name); } } } if (allowLanguages) { //Languages = en foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.NeutralCultures)) { if (!formatCulturesList.Contains(ci.TwoLetterISOLanguageName) && ci.TwoLetterISOLanguageName != defaultLanguage) { formatCulturesList.Add(ci.TwoLetterISOLanguageName); } } } var supportedFormatCultures = formatCulturesList.Select(x => new CultureInfo(x)).ToArray(); var supportedUICultureInfoList = new List <CultureInfo>() { new CultureInfo(defaultCulture) }; foreach (var supportedUICulture in supportedUICultures) { if (supportedUICulture != defaultCulture) { supportedUICultureInfoList.Add(new CultureInfo(supportedUICulture)); } } var options = new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture(culture: defaultCulture, uiCulture: defaultCulture), // Formatting numbers, dates, etc. SupportedCultures = supportedFormatCultures, // UI strings that we have localized. SupportedUICultures = supportedUICultureInfoList }; //Default culture providers //1. Query string //2. Cookie //3. Accept-Language header //https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.2 //https://andrewlock.net/url-culture-provider-using-middleware-as-mvc-filter-in-asp-net-core-1-1-0/ //https://andrewlock.net/applying-the-routedatarequest-cultureprovider-globally-with-middleware-as-filters/ //https://gunnarpeipman.com/aspnet/aspnet-core-simple-localization/ //http://sikorsky.pro/en/blog/aspnet-core-culture-route-parameter //Route("{culture}/{ui-culture}/[controller]")] //[Route("{culture}/[controller]")] var routeDataRequestProvider = new RouteDataRequestCultureProvider() { Options = options, RouteDataStringKey = "culture", UIRouteDataStringKey = "ui-culture" }; //options.RequestCultureProviders.Insert(0, routeDataRequestProvider); options.RequestCultureProviders = new List <IRequestCultureProvider>() { routeDataRequestProvider, new QueryStringRequestCultureProvider() { QueryStringKey = "culture", UIQueryStringKey = "ui-culture" }, new CookieRequestCultureProvider(), new AcceptLanguageHeaderRequestCultureProvider(), }; services.AddSingleton(options); return(services); }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); var localizationOptions = app.ApplicationServices.GetService <IOptions <RequestLocalizationOptions> >().Value; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); #region option1 //app.Use(async (context, next) => //{ // await next.Invoke(); // if (context.Response.StatusCode == StatusCodes.Status404NotFound) // { // context.Response.Redirect(@"/en-us/Home/Index", true); // } //}); //app.UseRouter(routes => //{ // routes.MapMiddlewareRoute("{culture}/{*mvcRoute}", subApp => // { // subApp.UseRequestLocalization(localizationOptions); // subApp.UseMvc(mvcRoutes => // { // mvcRoutes.MapRoute( // name: "default", // template: "{culture}/{controller=Home}/{action=Index}/{id?}"); // }); // }); //}); #endregion #region Option2 app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}"); }); }); }); #endregion }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); // STANDART ROUTİNG MEKANİZMASI İLE DİL DESTEĞİ KULLANMAK //var supportedCultures = new List<CultureInfo> //{ // new CultureInfo("tr-TR"), // new CultureInfo("en-US"), //}; //app.UseRequestLocalization(new RequestLocalizationOptions //{ // SupportedCultures = supportedCultures, // SupportedUICultures = supportedCultures, // DefaultRequestCulture = new RequestCulture("tr-TR") //}); //app.UseMvc(routes => //{ // routes.MapRoute( // name: "default", // template: "{controller=Home}/{action=Index}/{id?}"); //}); // DİL DESTEĞİNİ ROUTİNG YAPISINA GÖRE AYARLAMAK var supportedCultures = new List <CultureInfo> { new CultureInfo("tr-TR"), new CultureInfo("en-US"), }; var localizationOptions = new RequestLocalizationOptions { SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures, DefaultRequestCulture = new RequestCulture("tr-TR"), }; var requestProvider = new RouteDataRequestCultureProvider(); localizationOptions.RequestCultureProviders.Insert(0, requestProvider); app.UseRouter(routes => { routes.MapMiddlewareRoute("{culture=tr-TR}/{*mvcRoute}", subApp => { subApp.UseRequestLocalization(localizationOptions); subApp.UseMvc(mvcRoutes => { mvcRoutes.MapRoute( name: "default", template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}"); }); }); }); }