Использование сборок с многоязыковый пользовательский интерфейс

Если вы хотите, чтобы пользователи приложения или основной библиотеки 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. Атрибут language должен определять язык сборки ресурса. Атрибут file должен включать список файлов, которые являются библиотеками 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>