使用 LDML 数据描述区域性
更新:2007 年 11 月
应用程序使用 Save 保存区域性时,生成的 CultureAndRegionInfoBuilder 对象的 XML 表示形式将遵循区域设置数据标记语言 (LDML) 1.1 版的格式。CreateFromLdml 方法是 Save 的逆方法,可从此 XML 文件加载。
用于描述区域性的大部分有意义的数据包含在 XML 文件的 special 元素中。LDML 的 special 元素为特定于产品的批注和数据提供支持。
.NET Framework 使用 special 元素来容纳从 msLocale 架构 (https://schemas.microsoft.com/globalization/2005/carib/ldml) 中提取的数据。作为架构的惯例,此 URI 提供了一个唯一名称,但它不是实际文档的 URL。
大多数相关 XML 元素都对应于描述区域性的类(如 CultureAndRegionInfoBuilder 和 CultureInfo)的属性或这些类的方法的返回值。少量元素特定于 Windows 而不是 .NET Framework,它们没有作为 CultureAndRegionInfoBuilder 的属性包括进来。
有关 LDML 标准的更多信息,请参见位于 Unicode home site(Unicode 主站点)上的 Unicode Technical Standard #35,“Locale Data Markup Language (LDML)”(Unicode 技术标准 #35,“区域设置数据标记语言 (LDML)”)。
仅限 Windows 的元素
本主题中有几个元素称为“仅限 Windows 的元素”。它们与非托管 Windows 代码相关,但不与 .NET Framework 相关。如果应用程序在 .NET Framework 外部创建 LDML 文件,然后使用该框架来注册它,则该文件既可用于 .NET Framework,也可用于 Windows。在 .NET Framework 中,如果应用程序从现有区域性定义开始,然后修改该定义并将其另存为自定义区域性,则仅限 Windows 的元素将从原始区域性切换到另存的区域性,并且不会受到影响。
Identity 元素
下表描述了 identity 元素。
元素 |
说明 |
---|---|
version |
LDML 1.1;格式为 <version number="1.1">ldml version 1.1</version> |
generation |
生成数据文件的时间,例如 <generation date="2006-08-28" /> |
special |
一个容器,含有从 msLocale 架构中提取的所有内容 |
以下是 identity/special 元素。除非特别说明,所有值都由 type 属性指定。例如:
<identity>
…
<special xmlns:msLocale="https://schemas.microsoft.com/globalization/2005/carib/ldml">
<!-- A typical case… -->
<msLocale:cultureAndRegionInfoName type="en-US-fabricam"/>
...
<!-- …but here are some examples that use CDATA -->
<msLocale:geoId>244</msLocale:geoId>
<msLocale:languageIsoName type="twoLetters">
en
</msLocale:languageIsoName>
...
</special>
</identity>
下表描述了与 identity 元素对应的属性和方法。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:cultureAndRegionInfoName |
示例:“en”、“en-US”、“en-US-fabricam” |
|
msLocale:cultureAndRegionModifier |
仅用于非特定区域性;type 始终为“neutral” |
|
msLocale:cultureInfoVersion |
N/A |
当前为“1.0” |
msLocale:geoId |
示例:“244”;此值是以文本 CDATA 的形式指定的,而不是用 type 属性指定的。 |
|
msLocale:parentName |
示例:“en” |
|
msLocale:specificCulture |
示例:“en-US”;仅与非特定区域性有关,它在其中指示默认的特定区域性 |
|
msLocale:languageNameAbbr |
示例:“ENU” |
|
msLocale:languageIsoName type="threeLetters" |
示例:“eng”;此值是以文本 CDATA 的形式指定的,而不是用 type 属性指定的;type 为“threeLetters” |
|
msLocale:languageIsoName type="twoLetters" |
示例:“en”;此值是以文本 CDATA 的形式指定的,而不是用 type 属性指定的;type 为“twoLetters” |
|
msLocale:nativeDisplayName |
示例:“English (United States)”、“Deutsch (Deutschland)” |
|
msLocale:englishName |
示例:“English (United States)”、“German (Germany)” |
|
msLocale:countryCode |
N/A |
仅限 Windows;值是以 CDATA 的形式指定的;此值与国际电话呼叫代码相同,唯一的例外是加拿大(代码为 2);在 Windows 上,可通过 GetLocaleInfo 或 GetLocaleInfoEx 并将 LCTYPE 指定为 LOCALE_ICOUNTRY 来访问它 |
msLocale:regionNativeName |
示例:“United States”、“Deutschland” |
|
msLocale:regionEnglishName |
示例:“United States”、“Germany” |
|
msLocale:regionIsoName type="threeLetters" |
示例:“USA”;此值是以文本 CDATA 的形式指定的,而不是用 type 属性指定的;type 为“threeLetters” |
|
msLocale:regionIsoName type="twoLetters" |
示例:“US”;此值是以文本 CDATA 的形式指定的,而不是用 type 属性指定的;type 为“twoLetters” |
|
msLocale:textInfoName |
示例:“en-US” |
|
msLocale:sortName |
示例:“en-US”、“de-DE_phoneb” |
|
msLocale:ietfLanguageTag |
示例:“en-US” |
|
msLocale:englishLanguage |
仅限 Windows |
示例:“English”、“German” |
Layout 元素
下表描述了 layout 元素。
元素 |
说明 |
---|---|
special |
一个容器;其中所有内容都来自 msLocale 架构 |
下表中的元素位于 layout/special 之下。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:direction |
文本布局方向,可具有下列值:
示例:<msLocale:Direction type="left-to-right" /> |
Characters 元素
下表描述 characters 元素。
元素 |
说明 |
---|---|
special |
一个容器;其中所有内容都来自 msLocale 架构 |
下表描述了 characters/special 元素。除非特别说明,所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:keyboardLayout |
将值作为 CDATA 进行处理 |
|
msLocale:consoleFallbackName |
示例:“en-US” |
|
msLocale:fontSignature |
不可用 |
一个容器;用于存放来自 msLocale 架构的其他内容 |
mslocale:scripts |
不可用 |
一个容器;用于存放来自 msLocale 架构的其他内容 |
以下元素位于 characters/special/msLocale:fontSignature 之下:
msLocale:unicodeRanges
msLocale:defaultCodePages
msLocale:codePages
严格地说,这些元素中的每一个都是一个容器,用于存放从 msLocale 架构提取的其他内容。
下表中的元素位于 characters/special/msLocale:fontSignature/msLocale:unicodeRanges 之下。所有值都由 type 属性指定。这是仅限 Windows 的信息,并且部分地对应于 Windows LOCALESIGNATURE 结构。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:range |
不可用 |
仅限 Windows;一个介于 0 和 122 之间的值,表示 Windows FONTSIGNATURE 结构中包含的 Unicode 子集位域 (USB) 中的位数;此元素可出现多次 |
msLocale:layoutProgress |
不可用 |
仅限 Windows;可能的值为:
|
以下元素位于 characters/special/msLocale:fontSignature/msLocale:defaultCodePages 和 characters/special/msLocale:fontSignature/msLocale:codePages 之下:
msLocale:ansiCodePage
msLocale:ansiOemCodePage
msLocale:oemCodePage
严格地说,这些元素中的每一个都是 msLocale:codePage 元素的容器,具有通过 type 属性指定的值。
元素 |
说明 |
---|---|
msLocale:codePage |
一个代码页;必须与包含它的元素相对应;例如,代码页“1252”是 Windows ANSI 代码页,位于 msLocale:ansiCodePage 之下;代码页“932”是 ANSI/OEM 代码页,位于 msLocale:ansiOemCodePage 之下;代码页“855”是 OEM 代码页,位于 msLocale:oemCodePage 之下 |
位于 characters/special/msLocale:fontSignature/msLocale:defaultCodePages 之下的元素应为下列元素之一:
单个 msLocale:ansiOemCodePage 元素,其中包含单个 msLocale:codePage 元素
单个 msLocale:ansiCodePage 元素(其中包含单个 msLocale:codePage 元素)和单个 msLocale:oemCodePage 元素(其中包含单个 msLocale:codePage 元素)
msLocale:defaultCodePages 数据是仅限 Windows 的数据。characters/special/msLocale:fontSignature/msLocale:codePages 数据也是仅限 Windows 的信息。它列出了可以支持指定语言和脚本的所有代码页。因此,此列表可以有同一类型的多个代码页。例如:
<msLocale:codePages>
<msLocale:ansiCodePage>
...
</msLocale:ansiCodePage>
<msLocale:oemCodePage>
<msLocale:codePage type="864" />
<msLocale:codePage type="708" />
</msLocale:oemCodePage>
</msLocale:codePages>
下表中的元素位于 characters/special/msLocale:fontSignature/msLocale:scripts 之下。所有值都由 type 属性指定。这是仅限 Windows 的信息。无法在 Windows 中设置此数据,但它对应于 Windows GetStringScripts 函数的返回值。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:script |
不可用 |
仅限 Windows;一个由四个字母组成的 IS0 15924 脚本代码,如“Latn”(表示拉丁语)或“Cyrl”(表示西里尔语);此元素可出现任意次 |
Measurement 元素
下表定义了位于 measurement 之下的元素。
元素 |
属性/方法 |
说明 |
---|---|---|
measurementSystem |
type 属性为“metric”或“US” |
|
paperSize |
不可用 |
仅限 Windows;此元素是 height 和 width 元素的容器;可能的值为:
|
Dates 元素
位于 dates 之下的唯一一个元素是 calendars 元素。这仅仅是一个容器元素。
说明: |
---|
.NET Framework 使用 POSIX 规则来解释标准 LDML 元素(即提取自 LDML 命名空间而非 msLocale 架构的元素)中的日期和时间格式。例如,AM/PM 指示符为“a”。msLocale 架构中的元素遵循 Microsoft 有关日期和时间格式的规则。例如,AM/PM 指示符由“tt”格式模式来指定。 |
下表描述位于 dates/calendars 之下的元素。所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
default |
默认日历;type 属性为“metric”或“US”;在 Microsoft 生成的文件中,default 日历总是与 AvailableCalendars[0] 匹配 可能的日历值为:
|
|
calendar |
可用日历的指示符;对于每个可用日历,此元素可以重复一次;可能的 type 属性值与 default 的 type 属性值相同;此元素还可以用作提供日历相关数据的元素的容器 注意 对于非默认日历,此元素通常为空。因此,如果“Gregorian”和“Gregorian-US”都可用,且“Gregorian”是默认值,则“Gregorian-US”的元素仅为 <calendar type=" Gregorian-US" />。 |
下表中的元素位于 dates/calendars/calendar 之下。所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
months |
不可用 |
一个容器 |
days |
不可用 |
一个容器 |
week |
不可用 |
一个容器 |
am |
CDATA 指定用于标记午前时间的文本,例如“AM” |
|
pm |
CDATA 指定用于标记午后时间的文本,例如“PM” |
|
dateformat |
不可用 |
一个容器 |
timeformat |
不可用 |
一个容器 |
在 dates/calendars/calendar/months 之下是单个 monthContext 元素,它的 type 属性必须是“format”。在 dates/calendars/calendar/months/monthContext 之下应为四个 monthWidth 元素。
元素 |
属性/方法 |
说明 |
---|---|---|
monthWidth type="wide" |
一个容器 |
|
monthWidth type="abbreviated" |
一个容器 |
|
monthWidth type="genitive" |
一个容器 |
|
monthWidth type="genitiveAbbreviated" |
一个容器 |
在 dates/calendars/calendar/months/monthContext/monthWidth 之下,应该是一个与一年中的每个月相对应的 month 元素。根据日历的不同,这样的元素应有 12 个或 13 个。对于每个 months 元素,type 是月份,CDATA 类型指示相关字符串。例如:
...
<calendar type="Gregorian">
<months>
<monthContext type="format">
<monthWidth type="wide">
<month type="1">January</month>
<month type="2">February</month>
<month type="3">March</month>
...
</monthWidth>
<monthWidth type="abbreviated">
<month type="1">Jan</month>
<month type="2">Feb</month>
<month type="3">Mar</month>
...
</monthWidth>
...
</monthContext>
</months>
</calendar>
在 dates/calendars/calendar/days 之下是单个 dayContext 元素,其 type 属性必须为“format”。在 dates/calendars/calendar/days/dayContext 之下应为三个 dayWidth 元素。
元素 |
属性/方法 |
说明 |
---|---|---|
dayWidth type="wide" |
一个容器 |
|
dayWidth type="abbreviated" |
一个容器 |
|
dayWidth type="shorter" |
一个容器 |
在 dates/calendars/calendar/days/dayContext/dayWidth 之下应是一个与一周中的每一天相对应的 day 元素。对于每个 day 元素,type 为值“sun”、“mon”、“tue”、“wed”、“thu”、“fri”和“sat”之一。CDATA 类型指示相关字符串。例如:
...
<calendar type="Gregorian">
<days>
<dayContext type="format">
<dayWidth type="wide">
<day type="sun">Sunday</month>
<day type="mon">Monday</month>
<day type="tue">Tuesday</month>
...
</dayWidth>
...
</dayContext>
</days>
</calendar>
下表中的元素位于 under dates/calendars/calendar/week 之下。
元素 |
属性/方法 |
说明 |
---|---|---|
firstDay |
属性 day 必须为下列值之一:“sun”、“mon”、“tue”、“wed”、“thu”、“fri”和“sat” |
|
special |
不可用 |
一个容器;其中所有内容都来自 msLocale 架构 |
下表中的元素位于 dates/calendars/calendar/week/special 之下。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:weekRule |
type 属性必须是下列值之一:
|
下表中的元素位于 dates/calendars/calendar/dateformats 之下。
元素 |
说明 |
---|---|
special |
一个容器;其中所有内容都来自 msLocale 架构 |
下表中的元素位于 dates/calendars/calendar/dateformats/special 之下。所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:dateFormatLength type="long" |
一个容器 |
|
msLocale:dateFormatLength type="short" |
一个容器 |
|
msLocale:yearMonth |
一个用于每个相关 DateTime 模式的容器;type 属性指定一个从零开始的唯一索引;不应有间隙 |
|
msLocale:monthDay |
一个容器 |
下表中的元素位于 dates/calendars/calendar/dateformats/special/msLocale:dateFormatLength 之下。所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:default |
不可用 |
与默认格式的 type 属性相对应的值;在 Microsoft 生成的 LDML 文件中,默认值总是为“0” |
msLocale:dateFormat |
GetAllDateTimePatterns ('D')、GetAllDateTimePatterns ('d') |
一个用于每个相关 DateTime 格式模式的容器;type 属性指定一个从零开始的唯一索引;不应有间隙 |
下列元素是提供自己的值作为 CDATA 类型的 msLocale:pattern 元素的容器:
dates/calendars/calendar/dateformats/special/msLocale:dateFormatLength /msLocale:dateformat
dates/calendars/calendar/dateformats/special/msLocale:yearMonth
dates/calendars/calendar/dateformats/special/msLocale:monthDay
例如:
<dateFormats>
<special xmlns:msLocale="https://schemas.microsoft.com/globalization/2005/carib/ldml">
<msLocale:dateFormatLength type="long">
<msLocale:default type="0"/>
<msLocale:dateFormat type="0">
<msLocale:pattern>dddd, MMMM dd, yyyy</pattern>
</msLocale:dateFormat>
<msLocale:dateFormat type="1">
<msLocale:pattern>MMMM dd, yyyy</pattern>
</msLocale:dateFormat>
...
</msLocale:dateFormatLength>
...
<msLocale:yearMonth type=”0”>
<msLocale:pattern>MMMM, yyyy</msLocale:pattern>
</msLocale:yearMonth>
<msLocale:yearMonth type=”1”>
<msLocale:pattern>mm, yy</msLocale:pattern>
</msLocale:yearMonth>
<msLocale:monthDay>
<msLocale:pattern>MMMM dd</msLocale:pattern>
</msLocale:monthDay>
</special>
</dateFormats>
下表中的元素位于 dates/calendars/calendar/timeformats 之下。
元素 |
说明 |
---|---|
special |
一个容器;其中所有内容都来自 msLocale 架构 |
下表中的元素位于 dates/calendars/calendar/timeformats/special 之下。所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:durationFormats |
不可用 |
仅限 Windows;一个容器 |
msLocale:timeFormatLength type="long" |
一个容器 |
|
msLocale:timeFormatLength type="short" |
一个容器 |
下表中的元素位于 dates/calendars/calendar/dateformats/special/msLocale:durationFormats 之下。所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:default |
不可用 |
仅限 Windows;一个与默认格式的 type 属性相对应的值;在 Microsoft 生成的文件中,默认值总是为“0” |
msLocale:durationFormat |
不可用 |
仅限 Windows。一个用于每个相关 DateTime 值的容器;type 属性指定一个从零开始的唯一索引;不应有间隙 |
下表中的元素位于 dates/calendars/calendar/dateformats/special/msLocale:timeFormatLength 之下。所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:default |
不可用 |
一个与默认格式的 type 属性相对应的值;在 Microsoft 生成的文件中,默认值总是为“0” |
msLocale:timeFormat |
GetAllDateTimePatterns ('T')、GetAllDateTimePatterns ('t') |
一个用于每个相关 DateTime 值的容器;type 属性指定一个从零开始的唯一索引;不应有间隙 |
下列元素是提供自己的值作为 CDATA 类型的 msLocale:pattern 元素的容器:
dates/calendars/calendar/dateformats/special/msLocale:durationFormats/msLocale:durationFormat
dates/calendars/calendar/dateformats/special/msLocale:timeFormatLength/msLocale:timeformat
例如:
<timeFormats>
<special xmlns:msLocale="https://schemas.microsoft.com/globalization/2005/carib/ldml">
<msLocale:durationFormats>
<msLocale:default type="0" />
<msLocale:durationFormat type="0">
<msLocale:pattern>HH:mm:ss</msLocale:pattern>
</msLocale:durationFormat>
</msLocale:durationFormats>
<msLocale:timeFormatLength type="long">
<msLocale:default type="0"/>
<msLocale:timeFormat type="0">
<msLocale:pattern>h:mm:ss tt</msLocale:pattern>
</msLocale:timeFormat>
<msLocale:timeFormat type="1">
<msLocale:pattern>h:mm:ss a</msLocale:pattern>
</timeFormat>
...
</timeFormatLength>
...
</special>
</timeFormats>
Numbers 元素
下表定义了位于 numbers 之下的元素。
元素 |
说明 |
---|---|
symbols |
一个容器 |
currencies |
一个容器 |
special |
一个容器;其中所有内容都来自 msLocale 架构 |
位于 numbers/symbols 之下的元素
下表中的元素位于 numbers/symbols 之下。除非特别说明,这些元素都提供自己的数据作为 CDATA 类型。
元素 |
属性/方法 |
说明 |
---|---|---|
decimal |
示例:“.” |
|
group |
示例:“,” |
|
list |
示例:“;” |
|
percentSign |
示例:“%” |
|
infinity type="positive" |
示例:“Infinity” |
|
infinity type="negative" |
示例:“-Infinity” |
|
nan |
“非数字”符号。示例:“NaN”。 |
|
special |
N/A |
一个容器;其中所有内容都来自 msLocale 架构 |
下表中的元素位于 numbers/symbols/special 之下。除非特别说明,这些元素都提供自己的数据作为 CDATA 类型。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:currencyDecimalSeparator |
示例:“.” |
|
msLocale:currencyGroupSeparator |
示例:“,” |
|
msLocale:leadingZero |
N/A |
仅限 Windows;无 CDATA;type 属性必须为“yes”或“no”,以允许或禁止使用前导零 |
例如:
<symbols>
<decimal>.</decimal>
<group>,</group>
…
<infinity type="positive">Infinity</infinity>
<infinity type="negative">-Infinity</infinity>
…
<special xmlns:msLocale="https://schemas.microsoft.com/globalization/2005/carib/ldml">
<msLocale:currencyDecimalSeparator>
.
</msLocale:currencyDecimalSeparator>
<msLocale:currencyGroupSeparator>
,
</msLocale:currencyGroupSeparator>
<msLocale:leadingZero type="yes" />
</special>
</symbols>
位于 numbers/currencies 之下的元素
下表中的元素位于 numbers/currencies 之下。
元素 |
说明 |
---|---|
currency |
一个容器;必须将其 type 属性指定为“default” |
下表中的元素位于 numbers/currencies/currency 之下。除非特别说明,这些元素都提供自己的数据作为 CDATA 类型。
元素 |
属性/方法 |
说明 |
---|---|---|
symbol |
示例:“$” |
|
displayName |
示例:“Dollar” |
|
special |
N/A |
一个容器;其中所有内容都来自 msLocale 架构 |
下表中的元素位于 under numbers/currencies/currency/special 之下。除非特别说明,这些元素都提供自己的数据作为 CDATA 类型。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:isoCurrency |
示例:“USD” |
|
msLocale:currencyEnglishName |
示例:“Dollar” |
例如:
<currencies>
<currency type="default">
<symbol>$</symbol>
<displayName>Dollar</displayName>
<special xmlns:msLocale="https://schemas.microsoft.com/globalization/2005/carib/ldml">
<msLocale:isoCurrency>USD</msLocale:isoCurrency>
<msLocale:currencyEnglishName>
Dollar
</msLocale:currencyEnglishName>
</special>
</currency>
下表中的元素位于 numbers/currencies/special 之下。除非另外说明,所有值都由 type 属性指定。
元素 |
属性/方法 |
说明 |
---|---|---|
msLocale:decimalDigits |
要在数值中使用的小数位数,指定为 CDATA;示例:“2” |
|
msLocale:negativePattern |
负数值的格式模式 |
|
msLocale:currencyDecimalDigits |
要在货币值中使用的小数位数;与 msLocale:decimalDigits 不同,此元素是在 type 属性中指定的。示例:“2” |
|
msLocale:currencyPositivePattern |
正货币值的格式模式 |
|
msLocale:currencyNagativePattern |
负货币值的格式模式 |
|
msLocale:percentPositivePattern |
正百分比值的格式模式 |
|
msLocale:percentNagativePattern |
负百分比值的格式模式 |
|
msLocale:groupSizes |
数值中小数点左边每一组的位数;实际编组大小被指定为 CDATA 类型;type 属性用于对此进行序列化;这些元素可以有任意多个,每一个都具有唯一的 type 属性,从“0”开始序列化;值从最低有效数字组开始 |
|
msLocale:nativeDigits |
与西文数字 0 到 9 等效的本机数字,每个数字对应一个等效数字;type 属性为数字“0”到“9”;CDATA 类型指定用于表示数字的字符 |
|
msLocale:digitSubstitution |
一个值,指定图形用户界面如何显示数字的形状;type 属性的有效设置为:
|
例如:
<numbers>
...
<special xmlns:msLocale="https://schemas.microsoft.com/globalization/2005/carib/ldml">
<msLocale:decimalDigits>2</msLocale:decimalDigits>
<msLocale:negativePattern type="1"/>
<msLocale:currencyDecimalDigits type="2"/>
<msLocale:currencyPositivePattern type="0"/>
<msLocale:currencyNegativePattern type="0"/>
<msLocale:percentNegativePattern type="0"/>
<msLocale:percentPositivePattern type="0"/>
<msLocale:groupSizes type="0">3</msLocale:groupSizes>
<msLocale:currencyGroupSizes type="0">
3
</msLocale:currencyGroupSizes>
<msLocale:nativeDigits type="0">0</msLocale:nativeDigits>
<msLocale:nativeDigits type="1">1</msLocale:nativeDigits>
...
<msLocale:nativeDigits type="9">9</msLocale:nativeDigits>
<msLocale:digitSubstitution type="context"/>
</special>
</numbers>