2016-10-29 01:35:15 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
2016-12-12 19:19:52 +08:00
|
|
|
|
using System.Globalization;
|
2016-10-29 01:35:15 +08:00
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Threading.Tasks;
|
2016-12-12 19:19:52 +08:00
|
|
|
|
using Localization.StarterWeb.Models;
|
|
|
|
|
using Localization.StarterWeb.Services;
|
|
|
|
|
using Microsoft.AspNetCore.Builder;
|
|
|
|
|
using Microsoft.AspNetCore.Hosting;
|
|
|
|
|
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
|
|
|
|
using Microsoft.AspNetCore.Localization;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc.Razor;
|
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
2016-10-29 01:35:15 +08:00
|
|
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
|
|
|
|
|
|
namespace Localization.StarterWeb
|
|
|
|
|
{
|
|
|
|
|
public class Startup
|
|
|
|
|
{
|
|
|
|
|
public Startup(IHostingEnvironment env)
|
|
|
|
|
{
|
|
|
|
|
var builder = new ConfigurationBuilder()
|
2016-12-12 19:19:52 +08:00
|
|
|
|
.SetBasePath(env.ContentRootPath)
|
|
|
|
|
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
|
|
|
|
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
|
|
|
|
|
.AddEnvironmentVariables();
|
2016-10-29 01:35:15 +08:00
|
|
|
|
Configuration = builder.Build();
|
|
|
|
|
}
|
|
|
|
|
|
2016-12-12 19:19:52 +08:00
|
|
|
|
public IConfigurationRoot Configuration { get; }
|
2016-10-29 01:35:15 +08:00
|
|
|
|
|
|
|
|
|
// This method gets called by the runtime. Use this method to add services to the container.
|
|
|
|
|
public void ConfigureServices(IServiceCollection services)
|
|
|
|
|
{
|
2016-12-12 19:19:52 +08:00
|
|
|
|
services.AddDbContext<ApplicationDbContext>(options =>
|
|
|
|
|
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])
|
|
|
|
|
);
|
2016-10-29 01:35:15 +08:00
|
|
|
|
|
|
|
|
|
services.AddIdentity<ApplicationUser, IdentityRole>()
|
|
|
|
|
.AddEntityFrameworkStores<ApplicationDbContext>()
|
|
|
|
|
.AddDefaultTokenProviders();
|
|
|
|
|
|
|
|
|
|
services.AddLocalization(options => options.ResourcesPath = "Resources");
|
|
|
|
|
|
|
|
|
|
services.AddMvc()
|
|
|
|
|
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
|
|
|
|
|
.AddDataAnnotationsLocalization();
|
|
|
|
|
|
|
|
|
|
services.AddTransient<IEmailSender, AuthMessageSender>();
|
|
|
|
|
services.AddTransient<ISmsSender, AuthMessageSender>();
|
|
|
|
|
|
|
|
|
|
// Configure supported cultures and localization options
|
|
|
|
|
/*
|
|
|
|
|
services.Configure<RequestLocalizationOptions>(options =>
|
|
|
|
|
{
|
|
|
|
|
var supportedCultures = new[]
|
|
|
|
|
{
|
|
|
|
|
new CultureInfo("en-US"),
|
|
|
|
|
new CultureInfo("fr")
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// State what the default culture for your application is. This will be used if no specific culture
|
|
|
|
|
// can be determined for a given request.
|
|
|
|
|
options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
|
|
|
|
|
|
|
|
|
|
// You must explicitly state which cultures your application supports.
|
|
|
|
|
// These are the cultures the app supports for formatting numbers, dates, etc.
|
|
|
|
|
options.SupportedCultures = supportedCultures;
|
|
|
|
|
|
|
|
|
|
// These are the cultures the app supports for UI strings, i.e. we have localized resources for.
|
|
|
|
|
options.SupportedUICultures = supportedCultures;
|
|
|
|
|
|
|
|
|
|
// You can change which providers are configured to determine the culture for requests, or even add a custom
|
|
|
|
|
// provider with your own logic. The providers will be asked in order to provide a culture for each request,
|
|
|
|
|
// and the first to provide a non-null result that is in the configured supported cultures list will be used.
|
|
|
|
|
// By default, the following built-in providers are configured:
|
|
|
|
|
// - QueryStringRequestCultureProvider, sets culture via "culture" and "ui-culture" query string values, useful for testing
|
|
|
|
|
// - CookieRequestCultureProvider, sets culture via "ASPNET_CULTURE" cookie
|
|
|
|
|
// - AcceptLanguageHeaderRequestCultureProvider, sets culture via the "Accept-Language" request header
|
|
|
|
|
//
|
|
|
|
|
//options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
|
|
|
|
|
//{
|
|
|
|
|
// // My custom request culture logic
|
|
|
|
|
// return new ProviderCultureResult("en");
|
|
|
|
|
//}));
|
|
|
|
|
});
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 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();
|
|
|
|
|
|
|
|
|
|
if (env.IsDevelopment())
|
|
|
|
|
{
|
|
|
|
|
app.UseBrowserLink();
|
|
|
|
|
app.UseDeveloperExceptionPage();
|
|
|
|
|
app.UseDatabaseErrorPage();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
app.UseExceptionHandler("/Home/Error");
|
|
|
|
|
|
|
|
|
|
// For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
|
|
|
|
|
.CreateScope())
|
|
|
|
|
{
|
|
|
|
|
serviceScope.ServiceProvider.GetService<ApplicationDbContext>()
|
|
|
|
|
.Database.Migrate();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch { }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var supportedCultures = new[]
|
|
|
|
|
{
|
|
|
|
|
new CultureInfo("en-US"),
|
|
|
|
|
new CultureInfo("en-AU"),
|
|
|
|
|
new CultureInfo("en-GB"),
|
|
|
|
|
new CultureInfo("en"),
|
|
|
|
|
new CultureInfo("es-ES"),
|
|
|
|
|
new CultureInfo("es-MX"),
|
|
|
|
|
new CultureInfo("es"),
|
|
|
|
|
new CultureInfo("fr-FR"),
|
|
|
|
|
new CultureInfo("fr"),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
app.UseRequestLocalization(new RequestLocalizationOptions
|
|
|
|
|
{
|
|
|
|
|
DefaultRequestCulture = new RequestCulture("en-US"),
|
|
|
|
|
// Formatting numbers, dates, etc.
|
|
|
|
|
SupportedCultures = supportedCultures,
|
|
|
|
|
// UI strings that we have localized.
|
|
|
|
|
SupportedUICultures = supportedCultures
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
app.UseStaticFiles();
|
|
|
|
|
|
|
|
|
|
app.UseIdentity();
|
|
|
|
|
|
|
|
|
|
// To configure external authentication please see http://go.microsoft.com/fwlink/?LinkID=532715
|
|
|
|
|
|
|
|
|
|
app.UseMvc(routes =>
|
|
|
|
|
{
|
|
|
|
|
routes.MapRoute(
|
|
|
|
|
name: "default",
|
|
|
|
|
template: "{controller=Home}/{action=Index}/{id?}");
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|