文化和 UICCulture 有什么区别?

有人可以给我一点更多的信息之间的差异 CultureUICulture在。NET 框架?他们做什么,什么时候用什么?

41896 次浏览

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

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

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

注意那些解析 成功了但结果与您预期的不一样的情况。

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

每个 Web 浏览器的 UICulture 属性都可能更改,而 Culture 保持不变。

区域性值只能设置为特定的区域性,如 en-US 或 en-GB。这可以防止需要标识用于 en 的正确货币符号,其中 en-US 和 en-GB 具有不同的货币符号。 用户可以在浏览器中设置 UI 区域性和区域性。

除了@Vache 令人敬畏的解释之外,还有一个小问题需要考虑: 您可以在(页面级别和应用程序级别)设置 UICulture 和 Culture。

要在应用程序级别设置它们,只需在 web.config 中添加全球化会话

例如 <globalization uiCulture="es" culture="es-MX" />

要在页面级别设置它们,最好在特定(单独)页面上添加,请在@page 指令中设置 Culture 和 UICulture 属性

例如 <%@ Page UICulture="es" Culture="es-MX" %>

Culture and UICulture

值是一对两个字母的字符串,第一个字符串用于定义语言,第二个字符串用于定义区域。 例如:

这里 en-GB代表 EnglishGB代表 Great Briton

这里 en-US代表 EnglishUS代表 United States

对于文化相关的函数,如日期、时间,使用 CultureUICulture用于正确加载资源文件。