Skip to content

macOS / Mac Catalyst / iOS: CurrentThread.Current[UI]Culture is always the invariant culture #68321

Closed

Description

Description

Thread.CurrentThread.Current[UI]Culture is always the invariant culture at launch in macOS and Mac Catalyst (and probably iOS and tvOS as well).

This affects both Mono (on Mac Catalyst) and CoreCLR (no macOS).

Ref: xamarin/xamarin-macios#14740
Ref: dotnet/maui#3962

Reproduction Steps

  1. Create a new Mac Catalyst app:
dotnet new maccatalyst
  1. Print out Current[UI]Culture at launch by changing the Main.cs file to:
using System.Globalization;

Console.WriteLine ($"CurrentUICulture: {GetString (Thread.CurrentThread.CurrentUICulture)}");
Console.WriteLine ($"CurrentCulture: {GetString (Thread.CurrentThread.CurrentCulture)}");

Thread.CurrentThread.CurrentUICulture = new CultureInfo ("en-US");
Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");

Console.WriteLine ("After setting to 'en-US':");
Console.WriteLine ($"CurrentUICulture: {GetString (Thread.CurrentThread.CurrentUICulture)}");
Console.WriteLine ($"CurrentCulture: {GetString (Thread.CurrentThread.CurrentCulture)}");


static string GetString (CultureInfo ci)
{
	return $"Name: {ci.Name} NativeName: '{ci.NativeName}' DisplayName: '{ci.DisplayName}' EnglishName: '{ci.EnglishName}'";
}
  1. Build
dotnet run
  1. Run the executable (not the app) to get stdout written to a terminal:
$ ./bin/Debug/net6.0-maccatalyst/maccatalyst-x64/currentculturetest.app/Contents/MacOS/currentculturetest
[...]
CurrentUICulture: Name:  NativeName: 'Invariant Language (Invariant Country)' DisplayName: 'Invariant Language (Invariant Country)' EnglishName: 'Invariant Language (Invariant Country)'
CurrentCulture: Name:  NativeName: 'Invariant Language (Invariant Country)' DisplayName: 'Invariant Language (Invariant Country)' EnglishName: 'Invariant Language (Invariant Country)'
After setting to 'en-US':
CurrentUICulture: Name: en-US NativeName: 'en (US)' DisplayName: 'en (US)' EnglishName: 'en (US)'
CurrentCulture: Name: en-US NativeName: 'en (US)' DisplayName: 'en (US)' EnglishName: 'en (US)

Complete test project: currentculturetest-d0b7a3f.zip

Expected behavior

CurrentThread.Current[UI]Culture should reflect whatever's configured in the OS.

Actual behavior

Always Invariant culture

Regression?

Don't know

Known Workarounds

No response

Configuration

No response

Other information

No response

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions