Ensures cultures set on content are correctly cased (#19290)

* Ensures cultures set on content are correctly cased and verifies with integration tests.

* Improved test comments.

* Move culture casing check into an extension method and use from content service.

* Deduplicated test code and added more test cases

* Only run invalid culture codes test on Windows

---------

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
This commit is contained in:
Andy Butland
2025-05-14 09:47:21 +02:00
committed by GitHub
parent a84c114f54
commit 6fd6319b12
5 changed files with 194 additions and 9 deletions

View File

@@ -1575,4 +1575,22 @@ public static class StringExtensions
// this is by far the fastest way to find string needles in a string haystack
public static int CountOccurrences(this string haystack, string needle)
=> haystack.Length - haystack.Replace(needle, string.Empty).Length;
/// <summary>
/// Verifies the provided string is a valid culture code and returns it in a consistent casing.
/// </summary>
/// <param name="culture">Culture code.</param>
/// <returns>Culture code in standard casing.</returns>
public static string? EnsureCultureCode(this string? culture)
{
if (string.IsNullOrEmpty(culture) || culture == "*")
{
return culture;
}
// Create as CultureInfo instance from provided name so we can ensure consistent casing of culture code when persisting.
// This will accept mixed case but once created have a `Name` property that is consistently and correctly cased.
// Will throw in an invalid culture code is provided.
return new CultureInfo(culture).Name;
}
}