使用 CurrentCulture 属性

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 应用程序中的资源的更多信息,请参见 Resources in ASP.NET Applications

隐式设置 CurrentCulture 属性

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

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

请参见

概念

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

Resources in ASP.NET Applications

使用 CultureInfo 类

使用 CurrentUICulture 属性

使用 InvariantCulture 属性