本文提供了此 API 参考文档的补充说明。
注释
该 CultureAndRegionInfoBuilder 类仅适用于 Windows作系统。 非 Windows作系统不支持生成的 .nlp 文件。 此外,即使在 Windows 上,生成的 .nlp 文件也仅在 .NET Framework 上受支持(在使用 NLS 全球化模式时在 .NET Core 中)。
该 CultureInfo 类包含特定于区域性的信息,例如关联的语言、子语言、国家/地区、日历和文化约定。 此类还提供了 DateTimeFormatInfo、NumberFormatInfo、CompareInfo 和 TextInfo 类的特定于区域性的实例,这些实例是特定于区域性的操作(例如,确定大小写、格式化和分析日期和数字,以及比较字符串)所必需的。
默认情况下,.NET 支持表示预定义文化集合的对象。 有关 Windows 系统上可用的这些文化的列表,请参阅 Windows 支持的语言/区域名称列表中的语言标签列。 文化名称遵循 BCP 47 定义的标准。 该 CultureAndRegionInfoBuilder 类允许您创建自定义文化,该文化可以是全新的,也可以替代预定义文化。 当自定义区域性在特定计算机上安装并注册后,它将无法与预定义的 CultureInfo 对象进行区分,并且可以像这些对象一样实例化和使用。
重要
该 CultureAndRegionInfoBuilder 类位于名为 sysglobl.dll的程序集中。 若要成功编译使用此类型的代码,必须添加对 sysglobl.dll的引用。
自定义区域性只能由在计算机上具有管理权限的用户在该计算机上进行注册。 因此,应用通常不会创建和安装自定义区域性。 相反,你可以使用 CultureAndRegionInfoBuilder 类创建一个专用工具,供管理员用来创建、安装和注册自定义区域性。 在计算机上注册自定义区域性后,可以使用 CultureInfo 应用中的类创建自定义区域性的实例,就像对预定义区域性一样。
如果你分析为自定义区域性生成的日期和时间字符串,则应使用 DateTime.ParseExact 或 DateTime.TryParseExact 方法而非 DateTime.Parse 或 DateTime.TryParse 方法,以提高分析操作的成功概率。 自定义区域性的日期和时间字符串可能比较复杂,因此难以分析。 和ParseTryParse方法尝试分析具有多个隐式分析模式的字符串,所有这些模式都可能失败。 相反,该方法 TryParseExact 要求应用程序显式指定一个或多个可能成功的确切分析模式。
定义和创建自定义区域性
使用 CultureAndRegionInfoBuilder 类(class)定义和命名自定义文化。 自定义文化可以是全新的文化、基于现有文化的新文化(即补充文化),或是取代现有 .NET 文化的文化。 在每个情况下,基本步骤相同:
通过调用对象的CultureAndRegionInfoBuilder构造函数来实例化CultureAndRegionInfoBuilder(String, CultureAndRegionModifiers)对象。 若要替换现有的区域性,请将该区域性的名称和 CultureAndRegionModifiers.Replacement 枚举值传递给该构造函数。 若要创建新文化或补充文化,请传递唯一的文化名称以及 CultureAndRegionModifiers.Neutral 或 CultureAndRegionModifiers.None 枚举值。
注释
如果使用 CultureAndRegionModifiers.Replacement 枚举值实例化 CultureAndRegionInfoBuilder 对象,则 CultureAndRegionInfoBuilder 对象的属性会自动填充要替换的对象中的 CultureInfo 值。
如果您要创建新的或补充文化:
- 通过调用CultureAndRegionInfoBuilder方法,并传递一个属性值与新对象相似的LoadDataFromCultureInfo对象来填充CultureInfo对象的属性。
- 通过调用CultureAndRegionInfoBuilder方法,并传递一个表示自定义文化区域的LoadDataFromRegionInfo对象,为RegionInfo对象填充区域属性。
根据需要修改对象的属性 CultureAndRegionInfoBuilder 。
如果你计划在单独的例程中注册自定义区域性,请调用 Save 方法。 这会生成可在单独的自定义文化安装例程中加载和注册的 XML 文件。
注册自定义区域性
如果您正在为一个独立于创建该区域性的应用程序的自定义区域性开发注册应用程序,则应调用 CreateFromLdml 方法来加载包含自定义区域性定义的 XML 文件,并实例化 CultureAndRegionInfoBuilder 对象。 若要处理注册,请调用该方法 Register 。 为了成功注册,自定义文化的应用程序必须以管理员权限在目标系统上运行,否则,将会调用 Register 并抛出异常 UnauthorizedAccessException。
警告
文化数据在系统之间可能有所不同。 如果使用 CultureAndRegionInfoBuilder 类创建跨多个系统统一的自定义区域性,并且通过从现有 CultureInfo 和 RegionInfo 对象加载数据并对其进行自定义来创建自定义区域性,则应开发两个不同的实用工具。 第一个创建自定义文化并将其保存到 XML 文件。 第二个实用工具使用 CreateFromLdml 方法从 XML 文件中加载自定义区域性,并将其注册到目标计算机上。
注册过程执行以下任务:
- 创建一个 .nlp 文件,其中包含对象中 CultureAndRegionInfoBuilder 定义的信息。
- 将 .nlp 文件存储在目标计算机上的 %windir%\Globalization 系统目录中。 这使自定义区域性的设置能够在会话之间保持不变。 (此方法 CultureAndRegionInfoBuilder 需要管理权限,因为 .nlp 文件存储在系统目录中。
- 准备 .NET 以在下次请求创建新的自定义区域性时搜索 %windir%\Globalization 系统目录,而不是搜索内部缓存。
成功注册自定义文化后,它与 .NET 预定义的文化无法区分。 自定义区域性将一直可用,直到对 CultureAndRegionInfoBuilder 方法的调用从本地计算机中移除 .nlp 文件。
实例化自定义区域性
可以通过以下方式之一创建自定义区域性的实例:
- 通过调用 CultureInfo.CultureInfo 构造函数并使用区域性名称。
- 通过调用 CultureInfo.CreateSpecificCulture 方法并使用区域性名称。
- 通过调用 CultureInfo.GetCultureInfo 方法并使用区域性名称。
此外,CultureInfo 方法返回的 CultureInfo.GetCultures 对象的数组包括自定义区域性。