We had same issue with a mix of Windows 10, 11 and Linux and will list what we did
New version of Windows and Linux use ICU, while older versions will resort to NLS
https://learn.microsoft.com/en-us/dotnet/core/extensions/globalization-icu
ICU has the 4 length for some months
You can force ICU with two config options
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="false" />
<RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="<version" />
Then if it makes sense and you always want the same culture regardless of user's setup then add this code to startup locations
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-AU", false);
The false
parameter is to not use the user-selected culture settings from Windows