From b5dc039cc83b0418e0b7d31940a8ee3ce032dc06 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Fri, 30 Sep 2022 19:35:13 +0300 Subject: [PATCH 1/6] Ability to use user-selected or system culture in RequestLocalizationOptions --- .../src/RequestLocalizationOptions.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Middleware/Localization/src/RequestLocalizationOptions.cs b/src/Middleware/Localization/src/RequestLocalizationOptions.cs index 0e1f37b6cf1b..1c065469449a 100644 --- a/src/Middleware/Localization/src/RequestLocalizationOptions.cs +++ b/src/Middleware/Localization/src/RequestLocalizationOptions.cs @@ -11,14 +11,18 @@ namespace Microsoft.AspNetCore.Builder; /// public class RequestLocalizationOptions { + private readonly bool _useUserOverride; + private RequestCulture _defaultRequestCulture = new RequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture); /// /// Creates a new with default values. + /// Whether to use user-selected culture or default system culture. Defaults to false. /// - public RequestLocalizationOptions() + public RequestLocalizationOptions(bool useUserOverride = false) { + _useUserOverride = useUserOverride; RequestCultureProviders = new List { new QueryStringRequestCultureProvider { Options = this }, @@ -124,10 +128,11 @@ public RequestLocalizationOptions AddSupportedCultures(params string[] cultures) foreach (var culture in cultures) { - supportedCultures.Add(new CultureInfo(culture)); + supportedCultures.Add(new CultureInfo(culture, useUserOverride: _useUserOverride)); } SupportedCultures = supportedCultures; + return this; } @@ -141,10 +146,11 @@ public RequestLocalizationOptions AddSupportedUICultures(params string[] uiCultu var supportedUICultures = new List(uiCultures.Length); foreach (var culture in uiCultures) { - supportedUICultures.Add(new CultureInfo(culture)); + supportedUICultures.Add(new CultureInfo(culture, useUserOverride: _useUserOverride)); } SupportedUICultures = supportedUICultures; + return this; } @@ -156,7 +162,8 @@ public RequestLocalizationOptions AddSupportedUICultures(params string[] uiCultu /// The . public RequestLocalizationOptions SetDefaultCulture(string defaultCulture) { - DefaultRequestCulture = new RequestCulture(defaultCulture); + DefaultRequestCulture = new RequestCulture(new CultureInfo(defaultCulture, useUserOverride: _useUserOverride)); + return this; } } From 987c083b4679cff77051ecb8bb5d03a00bf705c4 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Fri, 30 Sep 2022 19:51:59 +0300 Subject: [PATCH 2/6] Set default value to true --- src/Middleware/Localization/src/RequestLocalizationOptions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Middleware/Localization/src/RequestLocalizationOptions.cs b/src/Middleware/Localization/src/RequestLocalizationOptions.cs index 1c065469449a..13f237b3e9bd 100644 --- a/src/Middleware/Localization/src/RequestLocalizationOptions.cs +++ b/src/Middleware/Localization/src/RequestLocalizationOptions.cs @@ -18,9 +18,9 @@ public class RequestLocalizationOptions /// /// Creates a new with default values. - /// Whether to use user-selected culture or default system culture. Defaults to false. + /// Whether to use user-selected culture or default system culture. Defaults to true. /// - public RequestLocalizationOptions(bool useUserOverride = false) + public RequestLocalizationOptions(bool useUserOverride = true) { _useUserOverride = useUserOverride; RequestCultureProviders = new List From 40967e6608a219fa435064fc964f4baca15ae58a Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Fri, 30 Sep 2022 21:08:48 +0300 Subject: [PATCH 3/6] Avoid using optional params --- .../Localization/src/PublicAPI.Shipped.txt | 1 + .../src/RequestLocalizationOptions.cs | 22 +++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Middleware/Localization/src/PublicAPI.Shipped.txt b/src/Middleware/Localization/src/PublicAPI.Shipped.txt index d6439fd4a9c6..fa429a16760a 100644 --- a/src/Middleware/Localization/src/PublicAPI.Shipped.txt +++ b/src/Middleware/Localization/src/PublicAPI.Shipped.txt @@ -53,6 +53,7 @@ Microsoft.AspNetCore.Builder.RequestLocalizationOptions.FallBackToParentUICultur Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestCultureProviders.get -> System.Collections.Generic.IList! Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestCultureProviders.set -> void Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestLocalizationOptions() -> void +Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestLocalizationOptions(bool useUserOverride) -> void Microsoft.AspNetCore.Builder.RequestLocalizationOptions.SetDefaultCulture(string! defaultCulture) -> Microsoft.AspNetCore.Builder.RequestLocalizationOptions! Microsoft.AspNetCore.Builder.RequestLocalizationOptions.SupportedCultures.get -> System.Collections.Generic.IList? Microsoft.AspNetCore.Builder.RequestLocalizationOptions.SupportedCultures.set -> void diff --git a/src/Middleware/Localization/src/RequestLocalizationOptions.cs b/src/Middleware/Localization/src/RequestLocalizationOptions.cs index 13f237b3e9bd..085a2206e7c8 100644 --- a/src/Middleware/Localization/src/RequestLocalizationOptions.cs +++ b/src/Middleware/Localization/src/RequestLocalizationOptions.cs @@ -18,17 +18,25 @@ public class RequestLocalizationOptions /// /// Creates a new with default values. - /// Whether to use user-selected culture or default system culture. Defaults to true. /// - public RequestLocalizationOptions(bool useUserOverride = true) + public RequestLocalizationOptions() : this(useUserOverride: true) + { + + } + + /// + /// Creates a new with default values and ability to specify the culture settings. + /// Whether to use user-selected culture or default system culture. + /// + public RequestLocalizationOptions(bool useUserOverride) { _useUserOverride = useUserOverride; RequestCultureProviders = new List - { - new QueryStringRequestCultureProvider { Options = this }, - new CookieRequestCultureProvider { Options = this }, - new AcceptLanguageHeaderRequestCultureProvider { Options = this } - }; + { + new QueryStringRequestCultureProvider { Options = this }, + new CookieRequestCultureProvider { Options = this }, + new AcceptLanguageHeaderRequestCultureProvider { Options = this } + }; } /// From a361ae48f39489f11e141ff588a2b144d4b69924 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Thu, 20 Oct 2022 22:23:03 +0300 Subject: [PATCH 4/6] Address the feedback --- .../Localization/src/PublicAPI.Shipped.txt | 1 - .../src/RequestLocalizationOptions.cs | 25 +++++++------------ 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/Middleware/Localization/src/PublicAPI.Shipped.txt b/src/Middleware/Localization/src/PublicAPI.Shipped.txt index fa429a16760a..d6439fd4a9c6 100644 --- a/src/Middleware/Localization/src/PublicAPI.Shipped.txt +++ b/src/Middleware/Localization/src/PublicAPI.Shipped.txt @@ -53,7 +53,6 @@ Microsoft.AspNetCore.Builder.RequestLocalizationOptions.FallBackToParentUICultur Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestCultureProviders.get -> System.Collections.Generic.IList! Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestCultureProviders.set -> void Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestLocalizationOptions() -> void -Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestLocalizationOptions(bool useUserOverride) -> void Microsoft.AspNetCore.Builder.RequestLocalizationOptions.SetDefaultCulture(string! defaultCulture) -> Microsoft.AspNetCore.Builder.RequestLocalizationOptions! Microsoft.AspNetCore.Builder.RequestLocalizationOptions.SupportedCultures.get -> System.Collections.Generic.IList? Microsoft.AspNetCore.Builder.RequestLocalizationOptions.SupportedCultures.set -> void diff --git a/src/Middleware/Localization/src/RequestLocalizationOptions.cs b/src/Middleware/Localization/src/RequestLocalizationOptions.cs index 085a2206e7c8..bdea43e27b71 100644 --- a/src/Middleware/Localization/src/RequestLocalizationOptions.cs +++ b/src/Middleware/Localization/src/RequestLocalizationOptions.cs @@ -11,26 +11,14 @@ namespace Microsoft.AspNetCore.Builder; /// public class RequestLocalizationOptions { - private readonly bool _useUserOverride; - private RequestCulture _defaultRequestCulture = new RequestCulture(CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture); /// /// Creates a new with default values. /// - public RequestLocalizationOptions() : this(useUserOverride: true) - { - - } - - /// - /// Creates a new with default values and ability to specify the culture settings. - /// Whether to use user-selected culture or default system culture. - /// - public RequestLocalizationOptions(bool useUserOverride) + public RequestLocalizationOptions() { - _useUserOverride = useUserOverride; RequestCultureProviders = new List { new QueryStringRequestCultureProvider { Options = this }, @@ -39,6 +27,11 @@ public RequestLocalizationOptions(bool useUserOverride) }; } + /// + /// Gets or sets whether to use use user-selected culture or default system culture. Defaults to true. + /// + public bool CultureInfoUseUserOverride { get; set; } = true; + /// /// Gets or sets the default culture to use for requests when a supported culture could not be determined by /// one of the configured s. @@ -136,7 +129,7 @@ public RequestLocalizationOptions AddSupportedCultures(params string[] cultures) foreach (var culture in cultures) { - supportedCultures.Add(new CultureInfo(culture, useUserOverride: _useUserOverride)); + supportedCultures.Add(new CultureInfo(culture, useUserOverride: CultureInfoUseUserOverride)); } SupportedCultures = supportedCultures; @@ -154,7 +147,7 @@ public RequestLocalizationOptions AddSupportedUICultures(params string[] uiCultu var supportedUICultures = new List(uiCultures.Length); foreach (var culture in uiCultures) { - supportedUICultures.Add(new CultureInfo(culture, useUserOverride: _useUserOverride)); + supportedUICultures.Add(new CultureInfo(culture, useUserOverride: CultureInfoUseUserOverride)); } SupportedUICultures = supportedUICultures; @@ -170,7 +163,7 @@ public RequestLocalizationOptions AddSupportedUICultures(params string[] uiCultu /// The . public RequestLocalizationOptions SetDefaultCulture(string defaultCulture) { - DefaultRequestCulture = new RequestCulture(new CultureInfo(defaultCulture, useUserOverride: _useUserOverride)); + DefaultRequestCulture = new RequestCulture(new CultureInfo(defaultCulture, useUserOverride: CultureInfoUseUserOverride)); return this; } From afb2ed1f497aeac3915d7b2a857d0aa49aaf82c0 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Thu, 20 Oct 2022 22:39:30 +0300 Subject: [PATCH 5/6] Update PublicAPI.Unpublished --- src/Middleware/Localization/src/PublicAPI.Unshipped.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Middleware/Localization/src/PublicAPI.Unshipped.txt b/src/Middleware/Localization/src/PublicAPI.Unshipped.txt index 7dc5c58110bf..3edfee6471c7 100644 --- a/src/Middleware/Localization/src/PublicAPI.Unshipped.txt +++ b/src/Middleware/Localization/src/PublicAPI.Unshipped.txt @@ -1 +1,3 @@ #nullable enable +Microsoft.AspNetCore.Builder.RequestLocalizationOptions.CultureInfoUseUserOverride.get -> bool +Microsoft.AspNetCore.Builder.RequestLocalizationOptions.CultureInfoUseUserOverride.set -> void From 993f62f4d5c9a9066752b480cc61525de45d77c9 Mon Sep 17 00:00:00 2001 From: Hisham Bin Ateya Date: Sat, 22 Oct 2022 01:25:41 +0300 Subject: [PATCH 6/6] Improve the docs Co-authored-by: Stephen Halter --- src/Middleware/Localization/src/RequestLocalizationOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Middleware/Localization/src/RequestLocalizationOptions.cs b/src/Middleware/Localization/src/RequestLocalizationOptions.cs index bdea43e27b71..5de0b6c22545 100644 --- a/src/Middleware/Localization/src/RequestLocalizationOptions.cs +++ b/src/Middleware/Localization/src/RequestLocalizationOptions.cs @@ -28,7 +28,7 @@ public RequestLocalizationOptions() } /// - /// Gets or sets whether to use use user-selected culture or default system culture. Defaults to true. + /// Configures . Defaults to true. /// public bool CultureInfoUseUserOverride { get; set; } = true;