Culture和UICulture有什么区别?

Nik*_*las 121 .net culture uiculture

有人能给我一些关于.NET框架之间CultureUICulture内部区别的更多信息吗?他们做什么以及何时使用什么?

dee*_*see 144

Culture影响如何呈现与文化相关的数据(日期,货币,数字等).这里有一些例子:

var date = new DateTime(2000, 1, 2);
var number = 12345.6789;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Console.WriteLine(date); // 02.01.2000 00:00:00
Console.WriteLine(number.ToString("C")); // 12.345,68 €

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
Console.WriteLine(date); // 2000-01-02 00:00:00
Console.WriteLine(number.ToString("C")); // 12 345,68 $

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Console.WriteLine(date); // 1/2/2000 12:00:00 AM
Console.WriteLine(number.ToString("C")); // $12,345.68
Run Code Online (Sandbox Code Playgroud)

文化也会以相同的方式影响用户输入的解析:

const string numberString = "12.345,68";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // OK!

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // FormatException is thrown, TryParse would return false
Run Code Online (Sandbox Code Playgroud)

请注意解析成功但结果不是您期望的结果.

const string numberString = "12.345";
decimal money;

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
money = decimal.Parse(numberString); // 12345

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
money = decimal.Parse(numberString); // 12.345, where the . is a decimal point
Run Code Online (Sandbox Code Playgroud)

UICulture影响您的应用程序将加载哪个资源文件(Resources .lang .resx).

因此,要加载德语资源(可能是本地化文本),您将设置UICulture为德国文化并显示您将设置的德语格式(不会影响加载的资源)Culture.

  • 这意味着你可以拥有英文标签和用户界面(英文UICulture),以及挪威货币,日期,时间和数字格式(挪威文化).在Windows术语中,可以将其视为为菜单和对话框安装了语言包(UICulture),但与挪威的区域环境(文化)一起运行. (38认同)
  • 使用整个“CultureInfo”对象来确定“字符串”就足够的资源文件有什么意义?(例如“FrameworkElement”的“Language”属性) (3认同)
  • 要强调这一点的含义:即使您不支持用户的语言,也要确保您支持他们的文化格式!我已经看到了一个错误,当一个应用程序回归到文化和语言的"en-US"时,它只需要回避语言. (2认同)