Compartilhar via


Usando assemblies com uma interface do usuário multilanguage

Se você quiser que os usuários do seu aplicativo, ou DLL principal, sejam capazes de alterar o idioma da interface do usuário, considere colocar recursos de idioma em DLLs de recursos satélite separadas. Para obter mais informações sobre como usar DLLs de recurso satélite, consulte MUI (Multilanguage User Interface)..

Cada DLL satélite contém os recursos para um idioma diferente. A DLL principal pode ser fornecida como um assembly e cada uma das DLLs satélites pode ser fornecida como assemblies satélite separados. Nesse caso, cada assembly satélite deve ter seu próprio manifesto de assembly autodescritivo. O manifesto do assembly satélite não deve descrever nenhuma dependência em outros assemblies. Qualquer dependência de assemblies satélite em outros assemblies deve ser descrita no manifesto do assembly principal.

A versão MUI (Interface do Usuário Multilanguage) do Windows permite que os usuários especifiquem o idioma da interface do usuário de acordo com suas preferências, desde que o idioma necessário tenha sido adicionado ao sistema. Um assembly principal pode dar suporte a vários idiomas usando vários assemblies MUI. Nesse caso, cada assembly MUI deve ter seu próprio manifesto e quaisquer dependências em outros assemblies só devem ser descritas no manifesto do assembly principal.

Por exemplo, Proseware.Sample.Pop pode ser um assembly lado a lado principal que depende do assembly Proseware.Research.SampleAssembly. Se Proseware.Sample.Pop usar MUI para dar suporte a vários idiomas, assemblies MUI separados poderão ser fornecidos para cada idioma. Cada assembly MUI deve ter seu próprio manifesto descrevendo essa DLL de recurso satélite específica. Os manifestos do assembly MUI não devem incluir nenhuma referência a dependências em outros assemblies. O manifesto que descreve o assembly principal, Proseware.Sample.Pop, deve descrever a dependência de Proseware.Sample.Pop no assembly Proseware.Research.SampleAssembly.

Os atributos do elemento assemblyIdentity de um assembly satélite são semelhantes aos do manifesto do assembly base. O atributo name deve ser o mesmo que o assembly base com a adição de "Resources". Por exemplo, se o nome for "Proseware.Tools.SpellCheck.Runtime-Libraries" no assembly base, o nome no assembly de recursos será "Proseware.Tools.SpellCheck.Runtime-Libraries.Resources". O atributo de linguagem deve identificar o idioma do assembly de recursos. O atributo de arquivo deve incluir a lista de arquivos que são DLLs de recurso.

Veja a seguir um exemplo do manifesto do assembly de recursos 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>

O assembly base descreve uma dependência opcional no assembly de recursos. Neste exemplo, se um usuário estiver executando o Windows com a localidade designada como alemão, um aplicativo que usa o assembly Proseware.Tools.SpellCheck exibirá texto em alemão.

<?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>