准备资源配置文件
资源实用工具中所述的 MUIRCT 和 RC 编译器实用工具都提供了一个命令行选项,可用于为基本语言资源指定资源配置文件。 与使用实用工具的常规命令行开关相比,使用此公共的可读 XML 文件可以更好地控制资源的拆分。 但是,即使未提供资源配置文件作为输入,LN 和特定于语言的资源文件也将包含资源配置数据。
Win32 应用程序的所有资源配置文件的开头和结尾相同:
<?xml version="1.0" encoding="utf-8"?>
<localization>
<resources>
<!-- a single win32Resources element goes here -->
</resources>
</localization>
本主题重点介绍在 Windows Vista 及更高版本上生成非托管代码时有用的 XML 架构的各个方面。 具体而言,它只涉及 win32Resources 元素的行为。
win32Resources 元素
win32Resources 元素具有下表中所述的属性。
属性名称 | 必需 | 说明 |
---|---|---|
fileType | 否 | 文件类型。 应始终为“应用程序”。 |
校验和 (checksum) | 否 | 要显示在 LN 文件和特定于语言的资源文件的资源配置数据中的校验和值。 例如,此属性允许从单个特定于语言的资源文件复制校验和(按约定为英语 (美国) ),并将校验和放在其他特定于语言的资源文件中。 校验和可以指定为长度不超过 32 个字符的十六进制数字字符串。 数值必须包含在 128 位数字中。 |
语言 | 否 | 符合 IETF BCP 47 的语言标记 (Windows Vista 及更高版本) ,例如 en-US for English (美国) 。 |
ultimateFallbackLanguage | 否 | 要插入 LN 文件的资源配置数据中的语言,表示在搜索相应语言特定资源文件时要使用的最终回退语言。 如果资源加载程序无法从线程首选 UI 语言加载请求的资源文件,它将使用最终回退语言作为其最后一次尝试。 符合 IETF BCP 47 的语言标记 (Windows Vista 及更高版本) ,例如 en-US for English (美国) 。 |
ultimateFallbackLocation | 否 | 回退位置。 如果将最终回退资源编译到 LN 文件中,请指定“internal”。 如果 LN 文件要为其最终回退资源引用特定于语言的资源文件,则指定“external” (默认) 。 |
在资源配置文件中,win32Resources 元素具有下表中所述的子元素。
元素名称 | 说明 |
---|---|
localizedResources | 封装有关特定于语言的资源文件中包含的资源类型和单个资源的信息的资源。 |
neutralResources | 封装有关 LN 文件中包含的资源类型的信息的资源。 |
localizedResources 元素
本地化的资源元素。 默认情况下,此元素没有属性,只有一种类型的子元素。 它只是 resourceType 元素的容器。
属性名称 | 说明 |
---|---|
resourceType | 语言特定资源文件中包含的单个资源的类型。 |
neutralResources 元素
中性资源元素。 此元素只是 resourceType 元素的容器。
属性名称 | 说明 |
---|---|
resourceType | LN 文件中包含的单个资源的类型。 |
resourceType 元素
resourceType 元素封装有关单个资源类型或单个资源的信息。 它具有下面列出的属性。
注意
某些资源配置缺陷仅由 RC 编译器或 MUIRCT 捕获,具体取决于输入资源文件或二进制文件内容。 不会捕获输入文件中不存在的资源配置文件中的 resourceType 错误,从而导致意外行为。 用户可能会使用有缺陷的资源配置文件,直到他们引入使用资源配置文件的损坏部分的二进制文件,这样就会产生中断来自当前二进制文件的外观。
属性名称 | 必需 | 说明 |
---|---|---|
typeNameId | 是 | 键入资源的名称或标识符。 指定字符串名称或数字。 如果使用数字,请在字符串前面加上“#”以指示它表示数字。 每个 resourceType 元素必须只有一个 typeNameId 属性。 |
itemName | 否 | 要放置在特定于语言的资源文件中的资源的项名称字符串。 可以指定多个名称,用空格分隔,例如“HTML MOFDATA”。 |
itemId | 否 | 要放置在特定于语言的资源文件中的单个资源项的标识符。 可以将项指定为 (范围,例如“1-12”) 或由空格分隔的单个标识符 (例如“1 3 4”) 。 |
stringId | 否 | 要放置在特定于语言的资源文件中的单个资源项的字符串标识符。 字符串可以指定为 (范围,例如,“1-12”) 或由空格分隔的单个标识符 (例如“1 3 4”) 。此属性允许指定可本地化和不可本地化的字符串表条目。 它必须与 typeNameId 值“6”一起使用,表示字符串表条目资源类型。 字符串存储在字符串表中的 16 个块中。 例如,字符串 0 到 15 存储在单个资源项块中,可以在资源配置文件中作为 itemId 1 或 stringId “0-15”引用。 例如,如果有 5 个可本地化字符串和 3 个不可本地化的字符串,则应为可本地化字符串分配字符串标识符 0-4,为不可本地化字符串分配字符串标识符 16-18。 如果不以这种方式组织字符串,受影响的字符串块将同时放置在 LN 文件和特定于语言的资源文件中。 |
如果在 localizedResource 元素下为特定资源类型指定 itemName、 itemId 和/或 stringId 属性,则只有指定资源类型的这些指定项或字符串放置在特定于语言的资源文件中。 如果在未指定任何显式项名称、项标识符或字符串标识符的情况下指定 resourceType 元素,则指定资源类型的所有项都放置在特定于语言的资源文件中。 未在任何 localizedResource 元素中列出的项或类型放置在 LN 文件中。
下面是标准资源类型及其数字标识符:
- CURSOR (1)
- 位图 (2)
- 图标 (3)
- 菜单 (4)
- 对话 (5)
- STRING (6)
- FONTDIR (7)
- FONT (8)
- ACCELERATORS (9)
- RCDATA (10)
- MESSAGETABLE (11)
- GROUP_CURSOR (12)
- GROUP_ICON (14)
- 版本 (16)
- HTML (23)
示例
<?xml version="1.0" encoding="utf-8"?>
<localization>
<resources>
<win32Resources fileType="Application">
<neutralResources>
<resourceType
typeNameId="#16"
/>
</neutralResources>
<localizedResources>
<resourceType
typeNameId="#2"
itemId="5 6 7 8 9 10 11 12"
itemName="HTML PRI"
/>
<resourceType
typeNameId="#4"
/>
<resourceType
typeNameId="#5"
/>
<resourceType
typeNameId="#6"
/>
<resourceType
typeNameId="#9"
/>
<resourceType
typeNameId="#11"
/>
<resourceType
typeNameId="#16"
/>
<resourceType
typeNameId="HTML"
/>
<resourceType
typeNameId="#23"
/>
<resourceType
typeNameId="#240"
/>
<resourceType
typeNameId="#1024"
/>
<resourceType
typeNameId="MY_TYPE"
/>
</localizedResources>
</win32Resources>
</resources>
</localization>
注解
如果在 neutralResources 元素中包含任何 ICON (3) 、DIALOG (5) 、STRING (6) 或 VERSION (16) 资源类型,则必须在 localizedResources 元素中复制该条目。 以上示例说明了这一点,其中资源类型 16 同时出现在非特定资源和本地化资源部分中。