Nik*_*las 121 .net culture uiculture
有人能给我一些关于.NET框架之间Culture和UICulture内部区别的更多信息吗?他们做什么以及何时使用什么?
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.