本地化消息字符串

在清单中指定的每个消息字符串都必须引用清单 本地化 部分中的字符串。 本地化部分包含你支持的每个区域设置的字符串表部分。

以下示例演示如何定义字符串表。 必须指定字符串的 ID 属性。 使用 id 属性的值引用清单中的字符串。 value 属性包含本地化字符串。

<instrumentationManifest
    xmlns="http://schemas.microsoft.com/win/2004/08/events" 
    xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    >

    <instrumentation>
        <events>
            <provider name="Microsoft-Windows-SampleProvider" 
                guid="{1db28f2e-8f80-4027-8c5a-a11f7f10f62d}" 
                symbol="PROVIDER_GUID" 
                resourceFileName="<path to the exe or dll that contains the metadata resources>" 
                messageFileName="<path to the exe or dll that contains the string resources>"
                message="$(string.ProviderName)">

                . . .

            </provider>
        </events>
    </instrumentation>

    <localization>
        <resources culture="en-US">
            <stringTable>
                <string id="ProviderName" value="Sample Provider"/>
                <string id="PathNotFound" value="The path %1 was not found."/>
            </stringTable>
        </resources>
    </localization>

</instrumentationManifest>

应为支持的每种语言创建多语言用户界面 (MUI) 文件,而不是将本地化字符串添加到清单。 使用消息文本文件指定本地化字符串。

以下过程介绍如何为英语和法语创建 MUI 文件。

为英语和法语创建 MUI 文件

  1. 创建创建法语消息字符串的消息文本文件。 有关创建消息文本文件的详细信息,请参阅 消息文本文件。 在消息文本文件中指定的消息标识符必须与消息编译器为清单中的相同字符串生成的资源标识符匹配。 若要确定用于清单中字符串的资源标识符,请参阅编译清单时消息编译器生成的 .h 文件。

    LanguageNames=(French=0x40C:MSG0040C)
    
    ; // The following are message definitions.
    
    MessageId=0x00000065
    SymbolicName=MSG_ProviderName
    Language=French
    <FRENCH STRING GOES HERE>
    .
    
    
    MessageId=0x00000066
    SymbolicName=MSG_PathNotFound
    Language=French
    <FRENCH STRING GOES HERE>
    .
    
    
  2. 运行以下命令以创建包含本地化字符串的资源 DLL。 messages.mc 文件是在步骤 1 中创建的消息文本文件。

    mc -u -U messages.mc
    
    rc -r messages.rc
    
    link -dll -noentry -out:messages.dll messages.res
    
  3. 在包含提供程序的文件夹中,为你支持的每个区域设置创建一个子文件夹。 子文件夹的名称必须是该区域设置的语言名称。 例如,对于0x0409,请使用 en-US 作为文件夹名称。

  4. 创建一个 .rcconfig 文件,该文件告知Muirct.exe工具你想要从可执行文件和资源 DLL 拆分消息字符串资源。 下面是一个示例 .rcconfig 文件。

    <localization>
          <resources>
                <win32Resources fileType="Application">
                      <neutralResources>
                      </neutralResources>
                      <localizedResources>
                            <resourceType typeNameId="#11"/>
                      </localizedResources>
                </win32Resources>
          </resources>
    </localization>
    
  5. 运行以下Muirct.exe命令,从提供程序可执行文件中拆分英语字符串。

    muirct -q split.rcconfig -v 2 -x 0x0409 -g 0x0409 provider.exe provider.exe.ln en-US\provider.exe.mui
    
    muirct -c provider.exe.ln -e en-US\provider.exe.mui
    
  6. 运行以下Muirct.exe命令,从资源 DLL 中拆分法语字符串。 创建 MUI 文件后,删除非特定语言文件 (fr-FR\messages.dll) 。

    muirct -q split.rcconfig -v 2 -x 0x040C -g 0x0409 messages.dll fr-FR\messages.dll fr-FR\provider.exe.mui
    
    muirct -c provider.exe.ln -e fr-FR\provider.exe.mui
    
  7. 将 provider.exe.ln 重命名为 provider.exe。