文化和UICulture有什么区别?


126

有人可以给我更多有关.NET框架之间Culture以及UICulture内部的区别的信息吗?他们做什么,什么时候使用什么?

Answers:


148

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它会影响资源文件(参考资料。的.resx)将是由你的应用程序加载到。

因此,要加载德语资源(大概是本地化的文本),您将设置UICulture为德语文化,并显示德语格式(对加载资源没有任何影响)Culture


39
这意味着您可以拥有英文标签和UI(英语UICulture),以及挪威货币,日期,时间和数字格式(挪威文化)。在Windows术语中,可以将其视为为菜单和对话框安装了语言包。 (UICulture),但在挪威的区域设置下运行(Culture。)
Lasse V. Karlsen 2012年

2
要强调这一点的含义:即使您不支持用户的语言,也请确保您支持其用户的语言格式!我曾经看到过一个错误,即当应用程序仅需要回退语言时,就文化和语言而言,该应用程序都退回到“ en-US”。
ToolmakerSteve

1
CultureInfo仅使用整个对象来确定资源文件的意义何在string?(例如的Language财产FrameworkElement
Wouter

2

Culture and UICulture

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

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

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

用于Culture与文化相关的功能,例如日期,时间。并且UICulture用于正确加载资源文件。


0

除了@Vache的出色解释之外,还需要考虑的一小件事:您可以在(页面级别和应用程序级别)设置UICulture和Culture。

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

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

并在页面级别进行设置(最好在特定(单个)页面上添加),请在@page指令中设置Culture和UICulture属性。

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


-4

对于每个Web浏览器,UICulture属性可能会更改,而区域性保持不变。

文化值只能设置为特定的文化,例如en-US或en-GB。这样可以避免要求标识要用于en的正确货币符号,而en-US和en-GB具有不同的货币符号。用户可以在其浏览器中设置UI文化和文化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.