Updating to new options pattern

This commit is contained in:
John Luo 2016-01-07 18:26:38 -08:00
parent 5b1beb68b5
commit 5c2bdc8923
15 changed files with 158 additions and 171 deletions

View File

@ -7,7 +7,6 @@ using System.Globalization;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting; using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Localization; using Microsoft.AspNet.Localization;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
@ -23,12 +22,12 @@ namespace LocalizationSample
public void Configure(IApplicationBuilder app, IStringLocalizer<Startup> SR) public void Configure(IApplicationBuilder app, IStringLocalizer<Startup> SR)
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
// Set options here to change middleware behavior // Set options here to change middleware behavior
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("en-US"), new CultureInfo("en-US"),
new CultureInfo("en-AU"), new CultureInfo("en-AU"),
@ -39,8 +38,8 @@ namespace LocalizationSample
new CultureInfo("zh"), new CultureInfo("zh"),
new CultureInfo("zh-CN"), new CultureInfo("zh-CN"),
new CultureInfo("zh-CHT") new CultureInfo("zh-CHT")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("en-US"), new CultureInfo("en-US"),
new CultureInfo("en-AU"), new CultureInfo("en-AU"),
@ -51,14 +50,14 @@ namespace LocalizationSample
new CultureInfo("zh"), new CultureInfo("zh"),
new CultureInfo("zh-CN"), new CultureInfo("zh-CN"),
new CultureInfo("zh-CHT") new CultureInfo("zh-CHT")
}; }
// Optionally create an app-specific provider with just a delegate, e.g. look up user preference from DB. // Optionally create an app-specific provider with just a delegate, e.g. look up user preference from DB.
// Inserting it as position 0 ensures it has priority over any of the default providers. // Inserting it as position 0 ensures it has priority over any of the default providers.
//options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context => //RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>
//{ //{
//})); //}))
}); });
app.Use(async (context, next) => app.Use(async (context, next) =>

View File

@ -2,8 +2,8 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Globalization;
using Microsoft.AspNet.Localization; using Microsoft.AspNet.Localization;
using Microsoft.Extensions.Options;
namespace Microsoft.AspNet.Builder namespace Microsoft.AspNet.Builder
{ {
@ -17,25 +17,15 @@ namespace Microsoft.AspNet.Builder
/// requests based on information provided by the client. /// requests based on information provided by the client.
/// </summary> /// </summary>
/// <param name="app">The <see cref="IApplicationBuilder"/>.</param> /// <param name="app">The <see cref="IApplicationBuilder"/>.</param>
/// <param name="configureOptions">An action delegate to configure the provided <see cref="RequestLocalizationOptions"/>.</param>
/// <returns>The <see cref="IApplicationBuilder"/>.</returns> /// <returns>The <see cref="IApplicationBuilder"/>.</returns>
public static IApplicationBuilder UseRequestLocalization( public static IApplicationBuilder UseRequestLocalization(this IApplicationBuilder app)
this IApplicationBuilder app,
Action<RequestLocalizationOptions> configureOptions)
{ {
if (app == null) if (app == null)
{ {
throw new ArgumentNullException(nameof(app)); throw new ArgumentNullException(nameof(app));
} }
if (configureOptions == null)
{
throw new ArgumentNullException(nameof(configureOptions));
}
var options = new RequestLocalizationOptions(); return app.UseMiddleware<RequestLocalizationMiddleware>();
configureOptions(options);
return app.UseMiddleware<RequestLocalizationMiddleware>(options);
} }
/// <summary> /// <summary>
@ -58,7 +48,7 @@ namespace Microsoft.AspNet.Builder
throw new ArgumentNullException(nameof(options)); throw new ArgumentNullException(nameof(options));
} }
return app.UseMiddleware<RequestLocalizationMiddleware>(options); return app.UseMiddleware<RequestLocalizationMiddleware>(Options.Create(options));
} }
} }
} }

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
namespace Microsoft.AspNet.Localization namespace Microsoft.AspNet.Localization

View File

@ -6,9 +6,10 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http; using Microsoft.AspNet.Http;
using Microsoft.AspNet.Http.Features;
using Microsoft.Extensions.Globalization; using Microsoft.Extensions.Globalization;
using Microsoft.Extensions.Options;
namespace Microsoft.AspNet.Localization namespace Microsoft.AspNet.Localization
{ {
@ -29,7 +30,7 @@ namespace Microsoft.AspNet.Localization
/// <param name="next">The <see cref="RequestDelegate"/> representing the next middleware in the pipeline.</param> /// <param name="next">The <see cref="RequestDelegate"/> representing the next middleware in the pipeline.</param>
/// <param name="options">The <see cref="RequestLocalizationOptions"/> representing the options for the /// <param name="options">The <see cref="RequestLocalizationOptions"/> representing the options for the
/// <see cref="RequestLocalizationMiddleware"/>.</param> /// <see cref="RequestLocalizationMiddleware"/>.</param>
public RequestLocalizationMiddleware(RequestDelegate next, RequestLocalizationOptions options) public RequestLocalizationMiddleware(RequestDelegate next, IOptions<RequestLocalizationOptions> options)
{ {
if (next == null) if (next == null)
{ {
@ -42,7 +43,7 @@ namespace Microsoft.AspNet.Localization
} }
_next = next; _next = next;
_options = options; _options = options.Value;
} }
/// <summary> /// <summary>

View File

@ -4,8 +4,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using Microsoft.AspNet.Localization;
namespace Microsoft.AspNet.Localization namespace Microsoft.AspNet.Builder
{ {
/// <summary> /// <summary>
/// Specifies options for the <see cref="RequestLocalizationMiddleware"/>. /// Specifies options for the <see cref="RequestLocalizationMiddleware"/>.

View File

@ -12,7 +12,8 @@
"dependencies": { "dependencies": {
"Microsoft.AspNet.Http.Extensions": "1.0.0-*", "Microsoft.AspNet.Http.Extensions": "1.0.0-*",
"Microsoft.Extensions.Globalization.CultureInfoCache": "1.0.0-*", "Microsoft.Extensions.Globalization.CultureInfoCache": "1.0.0-*",
"Microsoft.Extensions.Localization.Abstractions": "1.0.0-*" "Microsoft.Extensions.Localization.Abstractions": "1.0.0-*",
"Microsoft.Extensions.Options": "1.0.0-*"
}, },
"frameworks": { "frameworks": {
"net451": {}, "net451": {},

View File

@ -55,7 +55,6 @@ namespace Microsoft.Extensions.DependencyInjection
{ {
services.Configure(setupAction); services.Configure(setupAction);
} }
services.AddOptions();
return services; return services;
} }
} }

View File

@ -29,17 +29,17 @@ namespace LocalizationWebsite
{ {
loggerFactory.AddConsole(minLevel: LogLevel.Warning); loggerFactory.AddConsole(minLevel: LogLevel.Warning);
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo>() SupportedCultures = new List<CultureInfo>()
{ {
new CultureInfo("fr-FR") new CultureInfo("fr-FR")
}; },
options.SupportedUICultures = new List<CultureInfo>() SupportedUICultures = new List<CultureInfo>()
{ {
new CultureInfo("fr-FR") new CultureInfo("fr-FR")
}; }
}); });
var stringLocalizer = stringLocalizerFactory.Create("Test", location: null); var stringLocalizer = stringLocalizerFactory.Create("Test", location: null);

View File

@ -29,17 +29,17 @@ namespace LocalizationWebsite
{ {
loggerFactory.AddConsole(minLevel: LogLevel.Warning); loggerFactory.AddConsole(minLevel: LogLevel.Warning);
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo>() SupportedCultures = new List<CultureInfo>()
{ {
new CultureInfo("fr-FR") new CultureInfo("fr-FR")
}; },
options.SupportedUICultures = new List<CultureInfo>() SupportedUICultures = new List<CultureInfo>()
{ {
new CultureInfo("fr-FR") new CultureInfo("fr-FR")
}; }
}); });
var stringLocalizer = stringLocalizerFactory.Create("Test", location: null); var stringLocalizer = stringLocalizerFactory.Create("Test", location: null);

View File

@ -6,7 +6,6 @@ using System.Globalization;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting; using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http.Features;
using Microsoft.AspNet.Localization; using Microsoft.AspNet.Localization;
using Microsoft.AspNet.TestHost; using Microsoft.AspNet.TestHost;
using Xunit; using Xunit;
@ -21,14 +20,14 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), new CultureInfo("ar-SA"),
new CultureInfo("en-US") new CultureInfo("en-US")
}; }
}); });
app.Run(context => app.Run(context =>
{ {
@ -55,14 +54,14 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("fr-FR"); DefaultRequestCulture = new RequestCulture("fr-FR"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), new CultureInfo("ar-SA"),
new CultureInfo("en-US") new CultureInfo("en-US")
}; }
}); });
app.Run(context => app.Run(context =>
{ {
@ -88,14 +87,14 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("fr-FR"); DefaultRequestCulture = new RequestCulture("fr-FR"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA"), new CultureInfo("ar-SA"),
new CultureInfo("af-ZA") new CultureInfo("af-ZA")
}; }
}); });
app.Run(context => app.Run(context =>
{ {
@ -122,17 +121,17 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") new CultureInfo("ar-YE")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") new CultureInfo("ar-YE")
}; }
}); });
app.Run(context => app.Run(context =>
{ {

View File

@ -22,21 +22,23 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => var options = new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; }
var provider = new CookieRequestCultureProvider(); };
provider.CookieName = "Preferences"; var provider = new CookieRequestCultureProvider();
options.RequestCultureProviders.Insert(0, provider); provider.CookieName = "Preferences";
}); options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -64,21 +66,22 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => var options = new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; }
var provider = new CookieRequestCultureProvider(); };
provider.CookieName = "Preferences"; var provider = new CookieRequestCultureProvider();
options.RequestCultureProviders.Insert(0, provider); provider.CookieName = "Preferences";
}); options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -102,21 +105,22 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => var options = new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; }
var provider = new CookieRequestCultureProvider(); };
provider.CookieName = "Preferences"; var provider = new CookieRequestCultureProvider();
options.RequestCultureProviders.Insert(0, provider); provider.CookieName = "Preferences";
}); options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();

View File

@ -23,24 +23,25 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => var options = new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar") new CultureInfo("ar")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar") new CultureInfo("ar")
}; }
options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context => };
{ options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(context =>
var culture = GetCultureInfoFromUrl(context, options.SupportedCultures); {
var requestCulture = new ProviderCultureResult(culture); var culture = GetCultureInfoFromUrl(context, options.SupportedCultures);
return Task.FromResult(requestCulture); var requestCulture = new ProviderCultureResult(culture);
})); return Task.FromResult(requestCulture);
}); }));
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();

View File

@ -21,17 +21,17 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") new CultureInfo("ar-YE")
}; }
}); });
app.Run(context => app.Run(context =>
{ {
@ -56,9 +56,9 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US")
}); });
app.Run(context => app.Run(context =>
{ {
@ -83,17 +83,17 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; }
}); });
app.Run(context => app.Run(context =>
{ {
@ -117,17 +117,17 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; }
}); });
app.Run(context => app.Run(context =>
{ {
@ -151,17 +151,17 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; }
}); });
app.Run(context => app.Run(context =>
{ {
@ -186,17 +186,17 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => app.UseRequestLocalization(new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; }
}); });
app.Run(context => app.Run(context =>
{ {
@ -221,22 +221,23 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => var options = new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("ar-SA") new CultureInfo("ar-SA")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("ar-YE") new CultureInfo("ar-YE")
}; }
var provider = new QueryStringRequestCultureProvider(); };
provider.QueryStringKey = "c"; var provider = new QueryStringRequestCultureProvider();
provider.UIQueryStringKey = "uic"; provider.QueryStringKey = "c";
options.RequestCultureProviders.Insert(0, provider); provider.UIQueryStringKey = "uic";
}); options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();
@ -260,22 +261,23 @@ namespace Microsoft.Extensions.Localization.Tests
var builder = new WebApplicationBuilder() var builder = new WebApplicationBuilder()
.Configure(app => .Configure(app =>
{ {
app.UseRequestLocalization(options => var options = new RequestLocalizationOptions
{ {
options.DefaultRequestCulture = new RequestCulture("en-US"); DefaultRequestCulture = new RequestCulture("en-US"),
options.SupportedCultures = new List<CultureInfo> SupportedCultures = new List<CultureInfo>
{ {
new CultureInfo("FR") new CultureInfo("FR")
}; },
options.SupportedUICultures = new List<CultureInfo> SupportedUICultures = new List<CultureInfo>
{ {
new CultureInfo("FR") new CultureInfo("FR")
}; }
var provider = new QueryStringRequestCultureProvider(); };
provider.QueryStringKey = "c"; var provider = new QueryStringRequestCultureProvider();
provider.UIQueryStringKey = "uic"; provider.QueryStringKey = "c";
options.RequestCultureProviders.Insert(0, provider); provider.UIQueryStringKey = "uic";
}); options.RequestCultureProviders.Insert(0, provider);
app.UseRequestLocalization(options);
app.Run(context => app.Run(context =>
{ {
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCultureFeature = context.Features.Get<IRequestCultureFeature>();

View File

@ -4,6 +4,7 @@
using System; using System;
using System.Globalization; using System.Globalization;
using System.Threading; using System.Threading;
using Microsoft.AspNet.Builder;
using Xunit; using Xunit;
namespace Microsoft.AspNet.Localization.Tests namespace Microsoft.AspNet.Localization.Tests

View File

@ -21,7 +21,7 @@ namespace Microsoft.Extensions.Localization.Test
// Assert // Assert
var services = collection.ToList(); var services = collection.ToList();
Assert.Equal(4, services.Count); Assert.Equal(2, services.Count);
Assert.Equal(typeof(IStringLocalizerFactory), services[0].ServiceType); Assert.Equal(typeof(IStringLocalizerFactory), services[0].ServiceType);
Assert.Equal(typeof(ResourceManagerStringLocalizerFactory), services[0].ImplementationType); Assert.Equal(typeof(ResourceManagerStringLocalizerFactory), services[0].ImplementationType);
@ -30,12 +30,6 @@ namespace Microsoft.Extensions.Localization.Test
Assert.Equal(typeof(IStringLocalizer<>), services[1].ServiceType); Assert.Equal(typeof(IStringLocalizer<>), services[1].ServiceType);
Assert.Equal(typeof(StringLocalizer<>), services[1].ImplementationType); Assert.Equal(typeof(StringLocalizer<>), services[1].ImplementationType);
Assert.Equal(ServiceLifetime.Transient, services[1].Lifetime); Assert.Equal(ServiceLifetime.Transient, services[1].Lifetime);
Assert.Equal(typeof(IOptions<>), services[2].ServiceType);
Assert.Equal(ServiceLifetime.Singleton, services[2].Lifetime);
Assert.Equal(typeof(IOptionsMonitor<>), services[3].ServiceType);
Assert.Equal(ServiceLifetime.Singleton, services[3].Lifetime);
} }
[Fact] [Fact]
@ -49,7 +43,7 @@ namespace Microsoft.Extensions.Localization.Test
// Assert // Assert
var services = collection.ToList(); var services = collection.ToList();
Assert.Equal(5, services.Count); Assert.Equal(3, services.Count);
Assert.Equal(typeof(IStringLocalizerFactory), services[0].ServiceType); Assert.Equal(typeof(IStringLocalizerFactory), services[0].ServiceType);
Assert.Equal(typeof(ResourceManagerStringLocalizerFactory), services[0].ImplementationType); Assert.Equal(typeof(ResourceManagerStringLocalizerFactory), services[0].ImplementationType);
@ -61,12 +55,6 @@ namespace Microsoft.Extensions.Localization.Test
Assert.Equal(typeof(IConfigureOptions<LocalizationOptions>), services[2].ServiceType); Assert.Equal(typeof(IConfigureOptions<LocalizationOptions>), services[2].ServiceType);
Assert.Equal(ServiceLifetime.Singleton, services[2].Lifetime); Assert.Equal(ServiceLifetime.Singleton, services[2].Lifetime);
Assert.Equal(typeof(IOptions<>), services[3].ServiceType);
Assert.Equal(ServiceLifetime.Singleton, services[3].Lifetime);
Assert.Equal(typeof(IOptionsMonitor<>), services[4].ServiceType);
Assert.Equal(ServiceLifetime.Singleton, services[4].Lifetime);
} }
} }
} }