diff --git a/.docfx/api/namespaces/Cuemon.Extensions.Globalization.md b/.docfx/api/namespaces/Cuemon.Extensions.Globalization.md
index aef718d66..599ef7f53 100644
--- a/.docfx/api/namespaces/Cuemon.Extensions.Globalization.md
+++ b/.docfx/api/namespaces/Cuemon.Extensions.Globalization.md
@@ -2,11 +2,11 @@
uid: Cuemon.Extensions.Globalization
summary: *content
---
-The `Cuemon.Extensions.Globalization` namespace contains extension methods that complements the `Cuemon.Globalization` namespace while being an addition to the `System.Globalization` namespace.
+The `Cuemon.Extensions.Globalization` namespace contains extension methods that is an addition to the `System.Globalization` namespace.
[!INCLUDE [availability-default](../../includes/availability-default.md)]
-Complements: [Cuemon.Globalization namespace](/api/dotnet/Cuemon.Globalization.html) 📘
+Complements: [System.Globalization namespace](https://docs.microsoft.com/en-us/dotnet/api/system.globalization) 🔗
### Extension Methods
@@ -15,10 +15,11 @@ Complements: [Cuemon.Globalization namespace](/api/dotnet/Cuemon.Globalization.h
|CultureInfo|⬇️|`UseNationalLanguageSupport`|
### CSharp Example
+
```csharp
-var danishCultureIcu = CultureInfo("da-dk");
-var danishCultureNls = new CultureInfo("da-dk").UseNationalLanguageSupport();
+var danishCultureIcu = new CultureInfo("da-dk", false);
+var danishCultureNls = new CultureInfo("da-dk", false).UseNationalLanguageSupport();
// danishCultureIcu outputs dd.MM.yyyy from danishCultureIcu.DateTimeFormat.ShortDatePattern
// danishCultureNls outputs dd-MM-yyyy from danishCultureNls.DateTimeFormat.ShortDatePattern
-```
\ No newline at end of file
+```
diff --git a/.nuget/Cuemon.Extensions.Globalization/README.md b/.nuget/Cuemon.Extensions.Globalization/README.md
index 34e65f97b..eb9854c49 100644
--- a/.nuget/Cuemon.Extensions.Globalization/README.md
+++ b/.nuget/Cuemon.Extensions.Globalization/README.md
@@ -7,12 +7,24 @@ It is, by heart, free, flexible and built to extend and boost your agile codebel
## **Cuemon.Extensions.Globalization** for .NET
-The `Cuemon.Extensions.Globalization` namespace contains extension methods that complements the Cuemon.Globalization namespace while being an addition to the System.Globalization namespace.
+The `Cuemon.Extensions.Globalization` namespace contains extension methods that is an addition to the `System.Globalization` namespace.
+
+It aims to provide a way to favor National Language Support (NLS) over International Components for Unicode (ICU).
More documentation available at our documentation site:
- [Cuemon for .NET documentation](https://docs.cuemon.net/api/extensions/dotnet/Cuemon.Extensions.Globalization.html) 🔗
+### CSharp Example
+
+```csharp
+var danishCultureIcu = new CultureInfo("da-dk", false);
+var danishCultureNls = new CultureInfo("da-dk", false).UseNationalLanguageSupport();
+
+// danishCultureIcu outputs dd.MM.yyyy from danishCultureIcu.DateTimeFormat.ShortDatePattern
+// danishCultureNls outputs dd-MM-yyyy from danishCultureNls.DateTimeFormat.ShortDatePattern
+```
+
## Related Packages
* [Cuemon.AspNetCore](https://www.nuget.org/packages/Cuemon.AspNetCore/) 📦
diff --git a/src/Cuemon.Extensions.Globalization/Cuemon.Extensions.Globalization.csproj b/src/Cuemon.Extensions.Globalization/Cuemon.Extensions.Globalization.csproj
index cd32788a6..b41f716b2 100644
--- a/src/Cuemon.Extensions.Globalization/Cuemon.Extensions.Globalization.csproj
+++ b/src/Cuemon.Extensions.Globalization/Cuemon.Extensions.Globalization.csproj
@@ -1204,9 +1204,7 @@
-
-
diff --git a/src/Cuemon.Extensions.Globalization/CultureInfoExtensions.cs b/src/Cuemon.Extensions.Globalization/CultureInfoExtensions.cs
index b0b6249b5..21bfcfafb 100644
--- a/src/Cuemon.Extensions.Globalization/CultureInfoExtensions.cs
+++ b/src/Cuemon.Extensions.Globalization/CultureInfoExtensions.cs
@@ -59,15 +59,26 @@ public static IEnumerable UseNationalLanguageSupport(this IEnumerab
{
var surrogate = typeof(CultureInfoExtensions).GetEmbeddedResources($"{culture.Name}.bin", ManifestResourceMatch.ContainsName).SingleOrDefault();
var ms = new MemoryStream(surrogate.Value.DecompressGZip().ToByteArray());
- var suggogateCulture = YamlFormatter.DeserializeObject(ms, o =>
+ var surrogateCulture = YamlFormatter.DeserializeObject(ms, o =>
{
o.Settings.NamingConvention = NullNamingConvention.Instance;
o.Settings.ReflectionRules = new MemberReflection();
o.Settings.IndentSequences = false;
});
- Enrich(culture, suggogateCulture);
- EnrichedCultureInfos.Add(culture);
- enrichedCultures.Add(culture);
+
+ if (culture.IsReadOnly)
+ {
+ var cultureClone = culture.Clone() as CultureInfo;
+ Enrich(cultureClone, surrogateCulture);
+ EnrichedCultureInfos.Add(cultureClone);
+ enrichedCultures.Add(cultureClone);
+ }
+ else
+ {
+ Enrich(culture, surrogateCulture);
+ EnrichedCultureInfos.Add(culture);
+ enrichedCultures.Add(culture);
+ }
}
}
return enrichedCultures;
diff --git a/test/Cuemon.Extensions.Globalization.Tests/CultureInfoExtensionsTest.cs b/test/Cuemon.Extensions.Globalization.Tests/CultureInfoExtensionsTest.cs
index b7002f5da..bac02722d 100644
--- a/test/Cuemon.Extensions.Globalization.Tests/CultureInfoExtensionsTest.cs
+++ b/test/Cuemon.Extensions.Globalization.Tests/CultureInfoExtensionsTest.cs
@@ -1,18 +1,41 @@
using System.Globalization;
-using System.Linq;
+using System.Runtime.InteropServices;
using Codebelt.Extensions.Xunit;
-using Cuemon.Globalization;
using Xunit;
+using Xunit.Abstractions;
namespace Cuemon.Extensions.Globalization
{
public class CultureInfoExtensionsTest : Test
{
+ public CultureInfoExtensionsTest(ITestOutputHelper output) : base(output)
+ {
+ }
+
+ [Fact]
+ public void UseNationalLanguageSupport_ShouldHaveDifferentFormattingAsWindowsVariant()
+ {
+ var sut1 = new CultureInfo("da-DK", false);
+ var sut2 = (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
+ ? new CultureInfo("da-DK") // Linux uses ICU
+ : new CultureInfo("da-DK", false) // Ensure we do not read from user culture settings on Windows
+ ).UseNationalLanguageSupport();
+
+ Assert.NotEqual(sut1.DateTimeFormat, sut2.DateTimeFormat);
+ Assert.NotEqual(sut1.NumberFormat, sut2.NumberFormat);
+#if NET48_OR_GREATER
+ Assert.Equal(sut1.DateTimeFormat.ShortDatePattern, sut2.DateTimeFormat.ShortDatePattern);
+#else
+ Assert.Equal("dd.MM.yyyy", sut1.DateTimeFormat.ShortDatePattern);
+ Assert.Equal("dd-MM-yyyy", sut2.DateTimeFormat.ShortDatePattern);
+#endif
+ }
+
[Fact]
- public void MergeWithOriginal_ShouldHaveDifferentFormattingAsWindowsVariant()
+ public void UseNationalLanguageSupport_ShouldHaveDifferentFormattingAsWindowsVariant_FromReadOnlyCultureInfos()
{
- var sut1 = World.GetCultures(new RegionInfo("DK")).Single(ci => ci.Name == "da-DK");
- var sut2 = new CultureInfo("da-dk").UseNationalLanguageSupport();
+ var sut1 = CultureInfo.GetCultureInfo("da-DK");
+ var sut2 = CultureInfo.GetCultureInfo("da-DK").UseNationalLanguageSupport();
Assert.NotEqual(sut1.DateTimeFormat, sut2.DateTimeFormat);
Assert.NotEqual(sut1.NumberFormat, sut2.NumberFormat);