信息
您所需的主题如下所示。但此主题未包含在此库中。

CultureInfo 类

提供有关特定区域性的信息(对于非托管代码开发,则称为“区域设置”)。 这些信息包括区域性的名称、书写系统、使用的日历以及对日期和排序字符串的格式化设置。

System.Object
  System.Globalization.CultureInfo

命名空间:  System.Globalization
程序集:  mscorlib(在 mscorlib.dll 中)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class CultureInfo : ICloneable, 
	IFormatProvider

CultureInfo 类型公开以下成员。

  名称说明
公共方法由 XNA Framework 提供支持CultureInfo(Int32)根据区域性标识符指定的区域性初始化 CultureInfo 类的新实例。
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持CultureInfo(String)根据由名称指定的区域性初始化 CultureInfo 类的新实例。
公共方法由 XNA Framework 提供支持CultureInfo(Int32, Boolean)基于区域性标识符指定的区域性并基于布尔值(指定是否使用系统中用户选定的区域性设置)来初始化 CultureInfo 类的新实例。
公共方法由 XNA Framework 提供支持CultureInfo(String, Boolean)基于名称指定的区域性并基于布尔值(指定是否使用系统中用户选定的区域性设置)来初始化 CultureInfo 类的新实例。
页首

  名称说明
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Calendar获取区域性使用的默认日历。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持CompareInfo获取为区域性定义如何比较字符串的 CompareInfo
公共属性CultureTypes获取属于当前 CultureInfo 对象的区域性类型。
公共属性静态成员由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持CurrentCulture获取表示当前线程使用的区域性的 CultureInfo 对象。
公共属性静态成员由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持CurrentUICulture获取表示资源管理器在运行时查找区域性特定资源所用的当前用户接口的 CultureInfo 对象。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持DateTimeFormat获取或设置 DateTimeFormatInfo,它定义适合区域性的、显示日期和时间的格式。
公共属性静态成员受 适用于 Windows 应用商店应用的 .NET 支持DefaultThreadCurrentCulture获取或设置当前应用程序域中线程的默认区域性。
公共属性静态成员受 适用于 Windows 应用商店应用的 .NET 支持DefaultThreadCurrentUICulture获取或设置当前应用程序域中线程的默认 UI 区域性。
公共属性受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持DisplayName获取完整的本地化区域性名称。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持EnglishName获取格式为 languagefull [country/regionfull] 的英语区域性名称。
公共属性IetfLanguageTag已否决。 获取某种语言的 RFC 4646 标准标识。
公共属性静态成员InstalledUICulture获取表示操作系统中安装的区域性的 CultureInfo
公共属性静态成员由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持InvariantCulture获取不依赖于区域性(固定)的 CultureInfo 对象。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持IsNeutralCulture获取一个值,该值指示当前 CultureInfo 是否表示非特定区域性。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持IsReadOnly获取一个值,该值指示当前 CultureInfo 是否为只读。
公共属性KeyboardLayoutId获取活动的输入法区域设置标识符。
公共属性由 XNA Framework 提供支持LCID获取当前 CultureInfo 的区域性标识符。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Name获取格式为 languagecode2-country/regioncode2 的区域性名称。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持NativeName获取为区域性设置的显示名称,它由语言、国家/地区以及可选的书写符号组成。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持NumberFormat获取或设置 NumberFormatInfo,它定义适合区域性的、显示数字、货币和百分比的格式。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持OptionalCalendars获取该区域性可使用的日历的列表。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Parent获取表示当前 CultureInfo 的父区域性的 CultureInfo
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持TextInfo获取定义与区域性关联的书写体系的 TextInfo
公共属性由 XNA Framework 提供支持ThreeLetterISOLanguageName获取当前 CultureInfo 的语言的由三个字母构成的 ISO 639-2 代码。
公共属性由 XNA Framework 提供支持ThreeLetterWindowsLanguageName获取 Windows API 中定义的由三个字母构成的语言代码。
公共属性由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持TwoLetterISOLanguageName获取当前 CultureInfo 的语言的由两个字母构成的 ISO 639-1 代码。
公共属性由 XNA Framework 提供支持UseUserOverride获取一个值,该值指示当前 CultureInfo 是否使用用户选定的区域性设置。
页首

  名称说明
公共方法由 XNA Framework 提供支持ClearCachedData刷新缓存的区域性相关信息。
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Clone创建当前 CultureInfo 的副本。
公共方法静态成员由 XNA Framework 提供支持CreateSpecificCulture创建表示与指定名称关联的特定区域性的 CultureInfo
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Equals确定指定的对象是否与当前 CultureInfo 具有相同的区域性。 (重写 Object.Equals(Object)。)
受保护的方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持Finalize允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
公共方法GetConsoleFallbackUICulture如果默认的图形用户界面区域性不合适,则获取适合控制台应用程序的备用用户界面区域性。
公共方法静态成员由 XNA Framework 提供支持GetCultureInfo(Int32)使用特定的区域性标识符检索某个区域性的缓存的只读实例。
公共方法静态成员由 XNA Framework 提供支持GetCultureInfo(String)使用特定的区域性名称检索某个区域性的缓存的只读实例。
公共方法静态成员GetCultureInfo(String, String)检索某个区域性的缓存的只读实例。 参数指定了一个使用 TextInfoCompareInfo 对象进行初始化的区域性,而这些对象则是由另一个区域性指定的。
公共方法静态成员GetCultureInfoByIetfLanguageTag已否决。 检索只读的 CultureInfo 对象,其语言特征由指定的 RFC 4646 语言标记标识。
公共方法静态成员GetCultures获取由指定 CultureTypes 参数筛选的支持的区域性列表。
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持GetFormat获取一个定义如何格式化指定类型的对象。
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持GetHashCode用作当前 CultureInfo 的哈希函数,适合用在哈希算法和数据结构(如哈希表)中。 (重写 Object.GetHashCode()。)
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持GetType获取当前实例的 Type (继承自 Object。)
受保护的方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持MemberwiseClone创建当前 Object 的浅表副本。 (继承自 Object。)
公共方法静态成员由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持ReadOnly返回指定的 CultureInfo 的只读包装。
公共方法由 XNA Framework 提供支持受 可移植类库 支持受 适用于 Windows 应用商店应用的 .NET 支持ToString返回一个字符串,该字符串包含当前 CultureInfo 的名称,其格式为 languagecode2-country/regioncode2 (重写 Object.ToString()。)
页首

CultureInfo 类提供区域性特定的信息,如关联的语言、子语言、国家/地区、日历和区域性约定。 此类还提供对 DateTimeFormatInfoNumberFormatInfoCompareInfoTextInfo 类的区域性特定实例的访问。 这些对象包含区域性特定操作(如大小写、格式化日期和数字以及比较字符串)所需的信息。 格式,分析或操作区域性特定数据,例如 StringDateTimeDateTimeOffset和数值类型的选件类直接或间接使用 CultureInfo 选件类。

本节内容:

区域性名称和标识符
固定区域性、非特定区域性和特定区域性
自定义区域性
动态区域性数据
区域性和线程
区域性和应用程序域
CultureInfo 对象序列化
控制面板重写
备用排序顺序

区域性名称和标识符

CultureInfo 类将根据 RFC 4646 为每个区域性指定一个唯一的名称。 名称是语言关联的 ISO 639 小写双字母区域性代码和国家/地区关联的 ISO 3166 大写双字母子区域性代码的组合。

说明说明

当区域性名称传递给选件类构造函数或诸如的方法 CreateSpecificCultureCultureInfo时,其大小写不重要。

区域性名称的格式为languagecode2>-country/regioncode2,其中languagecode2 为两个字母的语言代码,country/regioncode2 为两个字母的子区域性代码。 例如“ja-JP”代表“日语(日本)”,“en-US”代表“英语(美国)”。 在双字母语言代码不可用的情况中,将使用从 ISO 639-2 派生的三字母代码。

请注意,某些区域性名称还指定 ISO 15924 书写符号。 例如,Cyrl指定西里尔语书写符号,Latn指定拉丁语书写符号。 包括脚本使用该模式 languagecode2-scripttag-country/regioncode2的区域性名称。 例如“uz-Cyrl-UZ”代表“乌兹别克语(乌兹别克斯坦,西里尔语)”。 对于 Windows Vista 之前的操作系统,包含书写符号的区域性名称使用languagecode2-country/regioncode2-scripttag 的模式,例如“uz-UZ-Cyrl”代表“乌兹别克语(乌兹别克斯坦,西里尔语)”。

非特定区域性只能由双字母小写语言代码指定。 例如,fr指定“法语”的非特定区域性,de指定“德语”的非特定区域性。

说明说明

有两个区域性名称不符合此规则, 名为“zh-Hans”(简体中文)和“zh-Hant”(繁体中文)的区域性均为非特定区域性。 这些区域性名称代表当前标准,应予以采用,除非有使用旧名称zh-CHS和zh-CHT的原因。

区域性标识符是标准国际数值缩写,并且具有唯一标识安装的区域性之一所需的组件。 应用程序可使用预定义的区域性标识符,也可定义自定义的标识符。

System.Globalization 命名空间中的此类和其他类使用特定预定义的区域性名称和标识符。 详细的区域性信息出现在访问全球开发中心上的 National Language Support (NLS) API Reference(国家语言支持 (NLS) API 参考)

请记住,区域性名称和标识符仅代表可在特定计算机上找到的区域性的子集。 Windows 的版本或 Service Pack 可能会更改可用的区域性。 应用程序使用 CultureAndRegionInfoBuilder 类添加自定义区域性。 用户可以使用 Microsoft Locale Builder 工具来添加自己的自定义区域性。 其中,Microsoft Locale Builder 通过使用 CultureAndRegionInfoBuilder 类以托管代码编写而成。

几个不同的名称与一个区域性紧密关联,其中几个典型的与以下类成员关联的名称有:

固定区域性、非特定区域性和特定区域性

区域性通常分为三个集合:固定区域性、非特定区域性和特定区域性。

固定区域性不区分区域性。 应用程序可通过标识符或使用空字符串 ("") 的名称来指定固定区域性。 InvariantCulture 定义固定区域性的实例。 它与英语语言关联,但不与任何国家/地区关联。 Globalization 命名空间中需要设置区域性的几乎所有方法都使用固定区域性。

非特定区域性是与某种语言关联但不与国家/地区关联的区域性。 特定区域性是与某种语言和某个国家/地区关联的区域性。 例如,fr 是法语区域性的中性名称,fr-FR 是指定法语(法国)区域性的名称。 注意,“简体中文”和“繁体中文”均为非特定区域性。

不建议为非特定区域性创建 CompareInfo 类的实例,因为它包含的数据是任意的。 若要显示数据并对其进行排序,请同时指定语言和地区。 此外,为非特定区域性创建的 CompareInfo 对象的 Name 属性仅返回国家,且不包括地区。

被定义的区域性有层次结构,即特定区域性的父级是非特定区域性,而非特定区域性的父级是固定区域性。 Parent 属性包含与特定区域性关联的非特定区域性。 自定义区域性应根据此模式定义 Parent 属性。

如果操作系统中不存在特定区域性的资源,将使用关联的非特定区域性的资源。 如果非特定区域性的资源亦不可用,则使用嵌入在主程序集中的资源。 有关资源备用进程的更多信息,请参见“打包和部署桌面应用程序中的资源”。

Windows API 中的区域设置列表与 .NET Framework 支持的区域性列表略有不同。 如果需要具备与 Windows 进行交互的能力(例如,通过 p/invoke 机制),应用程序应该使用为该操作系统定义的特定区域性。 这样可以确保与等效的 Windows 区域设置保持一致,这些区域设置使用与 LCID 相同的区域设置标识符进行标识。

只能为固定区域性或特定区域性创建 DateTimeFormatInfoNumberFormatInfo,而不能为非特定区域性创建它们。

如果 DateTimeFormatInfo.CalendarTaiwanCalendar,但未将 Thread.CurrentCulture 设为“zh-TW”,则 DateTimeFormatInfo.NativeCalendarNameDateTimeFormatInfo.GetEraNameDateTimeFormatInfo.GetAbbreviatedEraName 将返回一个空字符串 ("")。

自定义区域性

除了 windows 操作系统和 .NET Framework 支持的预定义的区域性之外,.NET Framework 支持自定义区域性的三种类型:

  • 在Windows或 .NET Framework 可用的添加区域性的新区域性。 例如,应用程序可以安装表示 fj FJ 的 CultureInfo 对象 (或 Fijan (斐济) 代表系统的区域性。

  • 属性是与标准区域性的属性不同的替换区域性由 windows 和 .NET Framework 支持。

  • 用户的标准区域性重写。 用户在 控制面板 可以使用 区域和语言 应用程序自定义现有区域性的属性值。

说明说明

可以使用 CultureAndRegionInfoBuilder 选件类定义,保存并添加或替换现有区域性的注册自定义区域性。 CultureAndRegionInfoBuilder.Save 方法创建目标系统可用于安装自定义区域性的区域设置数据标记语言 (LDML) 文件。

由于 .NET Framework 支持自定义区域性,当使用区域性特定数据时应考虑以下:

  • 自定义区域性的值可能会超过预定义的区域性的范围。 例如,某些区域性具有特别长的月份名称、意外的日期或时间格式或其他不常见的数据。

  • 当显示在用户界面中的区域性特定数据,您应保留用户的自定义项;例如,用户可能希望使用 24 小时制或 yyyyMMdd 日期格式。

  • 请记住,自定义区域性会重写默认值。 因此,不能认为区域性数据是固定不变的。 国家/地区名称、数字和日期格式和拼写在以后可能会发生更改。 如果要序列化区分区域性的数据 (如将传递的日期和时间字符串为日期和时间分析功能,则应使用固定区域性或特定 自定义格式字符串

动态区域性数据

除了固定区域性之外,区域性数据为动态的。 即使是预定义区域性也不例外。 例如,有些国家或地区会采用新的货币、更改单词的拼写或更改首选的日历,这时区域性定义也会更改以跟踪这些变化。自定义区域性会在没有任何提示的情况下更改,因此任何特定区域性可能会被自定义的替换区域性重写。 并且单个用户可以重写区域性首选项,如下所述。 应用程序在运行时应始终获取区域性数据。

警告说明警告

保存数据时,应用程序应使用固定区域性、二进制格式或与区域性无关的特定格式。 如果根据与特定区域性(而非固定区域性)关联的当前值保存数据,则当该区域性发生更改时,这些数据可能会变得不可读或改变含义。

区域性和线程

在新应用程序线程启动时,其当前区域性和当前的 UI 区域性由当前系统区域性定义并不是由当前线程区域性。 下面的示例演示这种差异。 它将当前区域性和应用程序线程的当前用户界面区域性设置为法语 (法国) 区域性 (fr FR)。 如果当前区域性已 fr FR,该示例将其设置为英语 (美国) 区域性 (en-us)。 它显示了三个随机数,货币值然后创建一个新线程,然后,显示三个随机数为货币值。 但,如该示例输出所示,新线程显示的货币值不反映法语 (法国) 区域性的格式设置约定,不同于从主应用程序线程的输出。


using System;
using System.Globalization;
using System.Threading;

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }
      else {
         // Set culture to en-US.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      ThreadProc();

      Thread worker = new Thread(ThreadProc);
      worker.Name = "WorkerThread";
      worker.Start();
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc()
   {
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          8,11 €
//          1,48 €
//          8,99 €
//          9,04 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: en-US/en-US
//       Some currency values:
//          $6.72
//          $6.35
//          $2.90
//          $7.72


在 .NET Framework 的版本。.NET Framework 4.5,最常用方法是确保主应用程序线程共享与其他辅助线程相同的区域性将应用程序的区域性名称或表示应用程序区域性。System.Threading.ParameterizedThreadStart 委托的 CultureInfo 对象。 下面的示例使用此方法确保两个线程显示的货币值反映同一区域性的格式设置约定。


using System;
using System.Globalization;
using System.Threading;

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }   
      else {
         // Set culture to en-US.
         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      DisplayThreadInfo();
      DisplayValues();

       Thread worker = new Thread(Example.ThreadProc);
       worker.Name = "WorkerThread";
       worker.Start(Thread.CurrentThread.CurrentCulture);
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc(Object obj) 
   {
      Thread.CurrentThread.CurrentCulture = (CultureInfo) obj;
      Thread.CurrentThread.CurrentUICulture = (CultureInfo) obj;
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €


可以通过调用 ThreadPool.QueueUserWorkItem(WaitCallback, Object) 方法以类似方式线程设置区域性和并线程池 UI 区域性。

从 .NET Framework 4.5开始,可以设置区域性,并且所有的 UI 区域性在应用程序域线程更直接通过将表示该区域性设置为 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 属性的 CultureInfo 对象。 下面的示例使用这些属性以确保在默认值应用程序域中的所有线程共享同一区域性。


using System;
using System.Globalization;
using System.Threading;

public class Example
{
   static Random rnd = new Random();

   public static void Main()
   {
      if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") {
         // If current culture is not fr-FR, set culture to fr-FR.
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
      }   
      else {
         // Set culture to en-US.
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture("en-US");
      }
      ThreadProc();

      Thread worker = new Thread(Example.ThreadProc);
      worker.Name = "WorkerThread";
      worker.Start();
   }

   private static void DisplayThreadInfo()
   {
      Console.WriteLine("\nCurrent Thread Name: '{0}'", 
                        Thread.CurrentThread.Name);
      Console.WriteLine("Current Thread Culture/UI Culture: {0}/{1}", 
                        Thread.CurrentThread.CurrentCulture.Name,
                        Thread.CurrentThread.CurrentUICulture.Name);                        
   }

   private static void DisplayValues()
   {
      // Create new thread and display three random numbers.
      Console.WriteLine("Some currency values:");
      for (int ctr = 0; ctr <= 3; ctr++)
         Console.WriteLine("   {0:C2}", rnd.NextDouble() * 10);                        
   }

   private static void ThreadProc() 
   {
      DisplayThreadInfo();
      DisplayValues();
   }
}
// The example displays output similar to the following:
//       Current Thread Name: ''
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          6,83 €
//          3,47 €
//          6,07 €
//          1,70 €
//       
//       Current Thread Name: 'WorkerThread'
//       Current Thread Culture/UI Culture: fr-FR/fr-FR
//       Some currency values:
//          9,54 €
//          9,50 €
//          0,58 €
//          6,91 €


警告说明警告

虽然 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 属性是静态成员,仅当前这些属性值时设置的应用程序域中它们定义默认值默认区域性和 UI 区域性。 有关详细信息,请参阅下一节中,区域性和应用程序域

如果您对 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 属性的赋值,区域性和线程的 UI 区域性在应用程序域也发生更改,如果它们未显式分配区域性。 但是,只有当它们在当前应用程序域时,执行这些线程才反映新的区域性设置。 如果这些线程在另一个应用程序域中执行,其区域性将为该应用程序域定义的默认值区域性。 因此,建议您始终设置主应用程序线程的区域性并不依赖于其更改 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 属性。

区域性和应用程序域

DefaultThreadCurrentCulture DefaultThreadCurrentUICulture 是显式定义默认区域性值仅应用程序域的当前的静态属性,当该属性值设置或检索时。 下面的示例将默认值区域性和 UI 区域性默认值在默认值应用程序域为法语 (法国),然后使用 AppDomainSetup 选件类和 AppDomainInitializer 委托设置默认值区域性和 UI 区域性在新应用程序域对俄语 (俄罗斯) " 一个线程然后对每个应用程序域的两种方法。 注意线程的区域性和 UI 区域性没有显式设置;它们从默认区域性值和线程执行应用程序域的 UI 区域性派生。 还请注意在调用方法后 DefaultThreadCurrentCultureDefaultThreadCurrentUICulture 属性返回当前应用程序域的默认值 CultureInfo 值。


using System;
using System.Globalization;
using System.Reflection;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // Set the default culture and display the current date in the current application domain.
      Info info1 = new Info();
      SetAppDomainCultures("fr-FR");

      // Create a second application domain.
      AppDomainSetup setup = new AppDomainSetup();
      setup.AppDomainInitializer = SetAppDomainCultures;
      setup.AppDomainInitializerArguments = new string[] { "ru-RU" };
      AppDomain domain = AppDomain.CreateDomain("Domain2", null, setup);
      // Create an Info object in the new application domain.
      Info info2 = (Info) domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName, 
                                                         "Info"); 

      // Execute methods in the two application domains.
      info2.DisplayDate();
      info2.DisplayCultures();

      info1.DisplayDate();
      info1.DisplayCultures();            
   }

   public static void SetAppDomainCultures(string[] names)
   {
      SetAppDomainCultures(names[0]);
   }

   public static void SetAppDomainCultures(string name)
   {
       try {
         CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture(name);
         CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CreateSpecificCulture(name);
      }
      // If an exception occurs, we'll just fall back to the system default.
      catch (CultureNotFoundException) {
         return;
      }   
      catch (ArgumentException) {
         return;
      } 
   }
}

public class Info : MarshalByRefObject
{
   public void DisplayDate()
   {
      Console.WriteLine("Today is {0:D}", DateTime.Now);
   }

   public void DisplayCultures()
   {
      Console.WriteLine("Application domain is {0}", AppDomain.CurrentDomain.Id);
      Console.WriteLine("Default Culture: {0}", CultureInfo.DefaultThreadCurrentCulture);
      Console.WriteLine("Default UI Culture: {0}", CultureInfo.DefaultThreadCurrentUICulture);
   }
}
// The example displays the following output:
//       Today is 14 октября 2011 г.
//       Application domain is 2
//       Default Culture: ru-RU
//       Default UI Culture: ru-RU
//       Today is vendredi 14 octobre 2011
//       Application domain is 1
//       Default Culture: fr-FR
//       Default UI Culture: fr-FR


有关区域性和应用程序域的更多信息,请参见 应用程序域和线程

CultureInfo 对象序列化

CultureInfo 对象被序列化时,所有实际存储的为 NameUseUserOverride 只有在 Name 具有相同含义的环境下,才能成功对其执行反序列化。 下面的三个示例演示并非总是这种情况的原因:

  • 如果 CultureTypes 属性值为CultureTypes.WindowsOnlyCultures,并且,如果该区域性在 Windows vista 或 windows 操作系统的最新版本首次引入,在 Windows XP非序列化它 是不可能的。 同样,如果该区域性是在 Windows XP Service Pack 2 中首次引入,则不可能为尚未安装该区域性的 Windows XP 系统对其执行反序列化。

  • 如果 CultureTypes 值是 CultureTypes.UserCustomCulture,并且对其执行反序列化所在的计算机上并未安装此用户自定义区域性,则不可能对其执行反序列化。

  • 如果 CultureTypes 值是 CultureTypes.ReplacementCultures,并且对其执行反序列化所在的计算机并未安装此替换区域性,则会将其反序列化为相同的名称,但其特征将不能完全相同。 例如,如果en-US是计算机 A 而非计算机 B 上的替换区域性,则当在计算机 A 上对引用此区域性的 CultureInfo 对象执行序列化,并在计算机 B 上对其执行反序列化时,将不会传输此区域性的任何自定义特征。 此区域性将成功得到反序列化,但它会具有不同的含义。

控制面板重写

用户可以通过“控制面板”的“区域和语言选项”部分选择重写某些与 Windows 当前区域性关联的值。 例如,用户可能选择以另一种格式显示日期,或选择使用区域性默认设置以外的货币。 通常情况下,应用程序应接受这些用户重写。

如果 UseUserOverridetrue 并且指定的区域性与当前 Windows 的区域性匹配,则 CultureInfo 使用那些重写,包括以下属性的用户设置:由 DateTimeFormat 属性返回的 DateTimeFormatInfo 实例的属性以及由 NumberFormat 属性返回的 NumberFormatInfo 实例的属性。 如果用户设置与 CultureInfo 的关联区域性不兼容(例如,当选定的日历不是 OptionalCalendars 之一时),则这些方法的结果和属性值是不确定的。

备用排序顺序

某些区域性支持多种排序顺序。 例如:

  • 西班牙语 (西班牙) 区域性有两个排序顺序:默认应用排序顺序和传统排序顺序。 在实例化。es-ES 区域性名称时的 CultureInfo 对象,使用国际排序顺序。 在实例化。es-ES-tradnl 区域性名称时的 CultureInfo 对象,使用传统的排序顺序。

  • 例如,名称为 zh-CN (Chinese - PRC)区域性支持按发音排序(默认)和按笔画数排序。 在实例化使用区域性名称 (如 zh-CN) 的 CultureInfo 对象时,使用的是默认排序顺序。 在实例化。0x00020804 时本地标识符的 CultureInfo 对象,该字符串按笔画数排序。

下表列出了支持替换排序顺序的区域性以及默认和替换排序顺序的标识符。

区域性名称

区域性

默认排序名称和标识符

替换排序名称和标识符

es-ES

西班牙语(西班牙)

国际:0x00000C0A

传统:0x0000040A

zh-TW

中文(台湾)

笔画数:0x00000404

注音符号:0x00030404

zh-CN

中文(中国)

发音:0x00000804

笔画数:0x00020804

zh-HK

中文(香港特别行政区)

笔画数:0x00000c04

笔画数:0x00020c04

zh-SG

中文(新加坡)

发音:0x00001004

笔画数:0x00021004

zh-MO

中文(澳门特别行政区)

发音:0x00001404

笔画数:0x00021404

ja-JP

日语(日本)

默认:0x00000411

Unicode:0x00010411

ko-KR

朝鲜语(韩国)

默认:0x00000412

朝鲜语 Xwansung - Unicode:0x00010412

de-DE

德语(德国)

词典:0x00000407

电话簿排序 DIN:0x00010407

hu-HU

匈牙利语(匈牙利)

默认:0x0000040e

技术排序:0x0001040e

ka-GE

格鲁吉亚语(格鲁吉亚)

传统:0x00000437

现代排序:0x00010437

TopicLocation
如何:为 ASP.NET 网站创建资源文件 (Visual Studio)在 Visual Studio 中构建 ASP .NET Web 应用程序
如何:为 ASP.NET 网页全球化设置区域性和 UI 区域性在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:以编程方式检索资源值在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:为 ASP.NET 网站创建资源文件 (Visual Studio)在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:为全球化使用 HTML 标记从右向左显示文本在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:为 ASP.NET 网页全球化设置区域性和 UI 区域性生成 ASP .NET Web 应用程序
如何:以编程方式检索资源值生成 ASP .NET Web 应用程序
如何:为 ASP.NET 网站创建资源文件生成 ASP .NET Web 应用程序
如何:为全球化使用 HTML 标记从右向左显示文本生成 ASP .NET Web 应用程序
如何:为 ASP.NET 网页全球化设置区域性和 UI 区域性在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:以编程方式检索资源值在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:为 ASP.NET 网站创建资源文件 (Visual Studio)在 Visual Studio 中生成 ASP .NET Web 应用程序
如何:为全球化使用 HTML 标记从右向左显示文本在 Visual Studio 中生成 ASP .NET Web 应用程序

下面的示例显示如何按国际排序创建一个用于“西班牙语(西班牙)”的 CultureInfo 对象,并按传统排序创建另一个 CultureInfo 对象。


using System;
using System.Collections;
using System.Globalization;

public class SamplesCultureInfo
{

   public static void Main()
   {

      // Creates and initializes the CultureInfo which uses the international sort.
      CultureInfo myCIintl = new CultureInfo("es-ES", false);

      // Creates and initializes the CultureInfo which uses the traditional sort.
      CultureInfo myCItrad = new CultureInfo(0x040A, false);

      // Displays the properties of each culture.
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "PROPERTY", "INTERNATIONAL", "TRADITIONAL");
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "CompareInfo", myCIintl.CompareInfo, myCItrad.CompareInfo);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "DisplayName", myCIintl.DisplayName, myCItrad.DisplayName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "EnglishName", myCIintl.EnglishName, myCItrad.EnglishName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsNeutralCulture", myCIintl.IsNeutralCulture, myCItrad.IsNeutralCulture);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "IsReadOnly", myCIintl.IsReadOnly, myCItrad.IsReadOnly);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "LCID", myCIintl.LCID, myCItrad.LCID);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Name", myCIintl.Name, myCItrad.Name);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "NativeName", myCIintl.NativeName, myCItrad.NativeName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "Parent", myCIintl.Parent, myCItrad.Parent);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TextInfo", myCIintl.TextInfo, myCItrad.TextInfo);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterISOLanguageName", myCIintl.ThreeLetterISOLanguageName, myCItrad.ThreeLetterISOLanguageName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "ThreeLetterWindowsLanguageName", myCIintl.ThreeLetterWindowsLanguageName, myCItrad.ThreeLetterWindowsLanguageName);
      Console.WriteLine("{0,-31}{1,-47}{2,-25}", "TwoLetterISOLanguageName", myCIintl.TwoLetterISOLanguageName, myCItrad.TwoLetterISOLanguageName);
      Console.WriteLine();

      // Compare two strings using myCIintl.
      Console.WriteLine("Comparing \"llegar\" and \"lugar\"");
      Console.WriteLine("   With myCIintl.CompareInfo.Compare: {0}", myCIintl.CompareInfo.Compare("llegar", "lugar"));
      Console.WriteLine("   With myCItrad.CompareInfo.Compare: {0}", myCItrad.CompareInfo.Compare("llegar", "lugar"));

   }

}

/*
This code produces the following output.

PROPERTY                       INTERNATIONAL                                  TRADITIONAL              
CompareInfo                    CompareInfo - es-ES                            CompareInfo - es-ES_tradnl
DisplayName                    Spanish (Spain)                                Spanish (Spain)          
EnglishName                    Spanish (Spain, International Sort)            Spanish (Spain, Traditional Sort)
IsNeutralCulture               False                                          False                    
IsReadOnly                     False                                          False                    
LCID                           3082                                           1034                     
Name                           es-ES                                          es-ES                    
NativeName                     Español (España, alfabetización internacional) Español (España, alfabetización tradicional)
Parent                         es                                             es                       
TextInfo                       TextInfo - es-ES                               TextInfo - es-ES_tradnl  
ThreeLetterISOLanguageName     spa                                            spa                      
ThreeLetterWindowsLanguageName ESN                                            ESP                      
TwoLetterISOLanguageName       es                                             es                       

Comparing "llegar" and "lugar"
   With myCIintl.CompareInfo.Compare: -1
   With myCItrad.CompareInfo.Compare: 1

*/


.NET Framework

受以下版本支持:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

可移植类库

受以下版本支持:可移植类库

适用于 Windows 应用商店应用的 .NET

受以下版本支持:Windows 8

适用于 Windows Phone 应用的 .NET

受以下版本支持:Windows Phone 8、Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅.NET Framework 系统要求

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

社区附加资源

显示:
© 2014 Microsoft