文化与UICulture有什么区别?
有人可以给我一些关于.NET框架中的Culture
和UICulture
之间的区别的信息吗? 他们做什么和什么时候使用什么?
Culture
影响文化依赖的数据(date,货币,数字等)的呈现方式。 这里有一些例子:
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
文化也以同样的方式影响用户input的parsing:
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
注意parsing成功的情况,但结果不是你所期望的。
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
UICulture
影响哪个资源文件(Resources.lang.resx)将由您的应用程序加载。
因此,加载德国资源(大概是本地化的文本),你将UICulture
设置为德国文化,并显示德国格式(没有任何影响加载哪些资源),你会设置Culture
。
Culture and UICulture
值是一对双字母string,第一个用于定义语言,第二个用于定义区域。 例:
en-GB
在这里代表English
, GB
代表Great Briton
en-US
在这里代表English
, US
代表United States
使用Culture
的文化依赖function,如date,时间。 和UICulture
是为了正确的资源文件加载。
除了@ Vache的真棒解释之外,还有一点需要考虑:您可以在页面级和应用级设置UICulture和Culture。
为了在应用程序级别设置它们,只需在web.config中添加全球化会话即可
例如<globalization uiCulture="es" culture="es-MX" />
要在页面级别设置它们,可以在特定(个人)页面上添加,可以在@ page指令中设置Culture和UICulture属性
例如<%@ Page UICulture="es" Culture="es-MX" %>
UICulture属性可能会改变每个Web浏览器,而文化保持不变。
文化价值可以设置为特定的文化,如en-US或en-GB。 这可以防止识别用于en的正确货币符号的要求,其中en-US和en-GB具有不同的货币符号。 用户可以在浏览器中设置UI文化和文化。