使用 CurrentCulture 属性

更新:2007 年 11 月

CurrentCulture 属性表示每个线程的当前区域性信息。此信息确定了日期、时间、货币和数字的默认格式,文本的排序顺序,字符串比较方式以及大小写。通过此属性进行的设置不是语言设置。此属性仅定义与地理区域的标准设置相关的数据。因此,应用程序只能将 CurrentCulture 设置为特定区域性或设置为 InvariantCulture。应用程序可以使用 CurrentThread 属性来设置 CurrentCulture

说明:

更改 CurrentThread 的区域性需要使用设置了 ControlThreadSecurityPermission。由于安全状态与线程关联,对线程进行操作是危险的。因此,应只向可信代码授予该权限,并且只在必要的时候才授予该权限。不能在不完全受信任的代码中更改线程区域性。

显式设置 CurrentCulture 属性

应用程序可以显式设置 CurrentCulture 属性。下面的代码示例将该属性设置为特定区域性德语(德国),即“de-DE”。

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE")
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");

应用程序必须使用特定区域性来初始化 CurrentCulture 属性。该属性要求区域性同时与语言和国家/地区关联,如英语(美国),即“en-US”。由于一种语言往往在多个国家/地区使用,因此需要区域信息来确定要使用的适当格式化约定。例如,如果应用程序指定表示非特定英语的区域性“en”,则对于日期或货币格式,没有唯一正确的设置。日期可能是美国格式,也可能是英国格式。货币可能是新西兰格式,也可能是加拿大格式。如果应用程序尝试通过指定非特定区域性来设置 CurrentCulture 属性,将引发异常。

如果您只能访问非特定区域性,则应用程序可以使用 CreateSpecificCulture 方法,以 CurrentCulture 期望的格式创建一个 CultureInfo 对象。此方法将非特定区域性映射到关联的默认特定区域性,然后创建一个表示该特定区域性的 CultureInfo 对象。下面的代码示例使用 CreateSpecificCulture 方法将非特定区域性德语(“de”)映射到特定区域性德语(德国),即“de-DE”。然后,它为“de-DE”创建了一个 CultureInfo 对象,并使用该对象来初始化 CurrentCulture 属性的值。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");
说明:

此方法是可选的。如果它所提供的映射不适合您的应用程序,则应用程序可以使用自己的映射。

在 .aspx 页中显式设置 CurrentCulture 属性

CreateSpecificCulture 方法还允许应用程序使用 Web 浏览器的当前语言来初始化 .aspx 页面中的 CurrentCulture 属性。在下面的代码示例中,UserLanguages 属性以字符串形式检索 Web 浏览器的当前语言。CreateSpecificCulture 方法分析此字符串,并以可用于初始化 CurrentCulture 属性值的格式返回一个 CultureInfo 对象。

' Sets the CurrentCulture property to the culture associated with the Web
' browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0])
// Sets the CurrentCulture property to the culture associated with the Web
// browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

有关使用和检索 ASP.NET 应用程序中的资源的更多信息,请参见 ASP.NET 应用程序中的资源

隐式设置 CurrentCulture 属性

在 Windows 操作系统中,GetUserDefaultLCID 函数用于设置 CurrentCulture 属性。用户可以通过在“控制面板”的“区域和语言选项”中更改用户区域性,或者通过更改与用户区域设置相关的设置(如货币、数字、日期和时间格式),更改此属性。

如果要确保应用程序使用 .NET Framework 为指定区域性提供的默认货币、数字、日期和时间格式,请让应用程序重写用户区域设置的默认值。应用程序应使用接受 useUserOverride 参数的构造函数重载来创建 CultureInfo 对象,并将此参数设置为 false。使用此技术会导致用户操作系统上的默认设置被 .NET Framework 的默认设置重写。为使用欧元进行交易的欧盟 (EU) 成员格式化货币时,建议应用程序将 useUserOverride 参数设置为 false,以确保使用正确的货币符号。有关更多信息,请参见 针对特定区域性格式化数值数据 主题中的“设置欧元格式”子主题。

请参见

概念

针对特定区域性格式化数值数据

ASP.NET 应用程序中的资源

使用 CultureInfo 类

使用 CurrentUICulture 属性

使用 InvariantCulture 属性