将程序集与多语言用户界面配合使用

如果希望应用程序或核心 DLL 的用户能够更改用户界面的语言,应考虑将语言资源放入单独的附属资源 DLL 中。 有关使用附属资源 DLL 的详细信息,请参阅 多语言用户界面 (MUI)

每个附属 DLL 都包含不同语言的资源。 核心 DLL 可以作为程序集提供,每个附属 DLL 可以作为单独的附属程序集提供。 在这种情况下,每个附属程序集都应有自己的自描述程序集清单。 附属程序集的清单不应描述对其他程序集的任何依赖关系。 应改为在核心程序集的清单中描述附属程序集对其他程序集的任何依赖项。

语种用户界面 (MUI) 版本的 Windows 允许用户根据其首选项指定用户界面语言,前提是系统已添加所需语言。 一个核心程序集可以使用多个 MUI 程序集来支持多种语言。 在这种情况下,每个 MUI 程序集都应有自己的清单,并且其他程序集上的任何依赖项应仅在核心程序集的清单中描述。

例如,Proseware.Sample.Pop 可能是一个核心并行程序集,它恰好依赖于 Proseware.Research.SampleAssembly 程序集。 如果 Proseware.Sample.Pop 使用 MUI 来支持多种语言,则可以为每种语言提供单独的 MUI 程序集。 每个 MUI 程序集都应具有描述此特定附属资源 DLL 的自己的清单。 MUI 程序集清单不应包含对其他程序集上的依赖项的任何引用。 描述核心程序集 Proseware.Sample.Pop 的清单应描述 Proseware.Sample.Pop 在 Proseware.Research.SampleAssembly 程序集上的依赖项。

附属程序集的 assemblyIdentity 元素的属性类似于基程序集清单中的属性。 name 属性应与基程序集相同,并添加了“Resources”。例如,如果基程序集中的名称为“Proseware.Tools.SpellCheck.Runtime-Libraries”,则资源程序集中的名称将是“Proseware.Tools.SpellCheck.Runtime-Libraries.Resources”。语言属性应标识资源程序集的语言。 文件属性应包括作为资源 DLL 的文件列表。

下面是 Proseware.Tools.SpellCheck.Runtime-Libraries 资源程序集的清单示例。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        type="win32"
        name="Proseware.Tools.SpellCheck.Runtime-Libraries.Resources"
        version="6.0.0.0"
        processorArchitecture="X86"
        language="DE"
        publicKeyToken="0000000000000000"
    />
    <file name="sample.dll"/>
</assembly>

基程序集描述对资源程序集的可选依赖项。 在此示例中,如果用户运行 Windows 且区域设置指定为德语,则使用 Proseware.Tools.SpellCheck 程序集的应用程序将显示德语文本。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32" 
    name="Proseware.Tools.SpellCheck.Runtime-Libraries"
    version="6.0.0.0" processorArchitecture="x86"
    publicKeyToken="0000000000000000"/>
    <dependency optional="yes">
        <dependentAssembly>
            <assemblyIdentity type="win32" 
                              name="Proseware.Tools.SpellCheck.Runtime-Libraries.Resources" 
                              version="6.0.0.0" 
                              processorArchitecture="x86" 
                              publicKeyToken="0000000000000000" 
                              language="*"
            />
        </dependentAssembly>
    </dependency>