Usar o redirecionamento de cadeias de caracteres do Registro

O armazenamento de cadeias de caracteres codificadas no registro faz parte de um modelo de localização pré-Windows Vista. Não há suporte para MUI. No modelo atual, a interface do usuário para o sistema operacional é executada em arquivos de recurso específicos do idioma, além de uma base de neutralidade de idioma. Os componentes do sistema operacional usam o Registro com neutralidade de idioma.

O MUI usa apenas cadeias de caracteres de registro redirecionadas definidas pelos recursos do Win32 PE no arquivo de recurso de linguagem base. O redirecionamento é definido separadamente, por exemplo, em um arquivo .inf. Esse tipo de armazenamento permite que o carregador de recursos selecione os recursos de idioma corretos automaticamente durante o carregamento do módulo de recurso.

Observação

Este tópico pertence somente aos recursos do Win32 PE. Se estiver usando recursos PE não Win32, você deverá fornecer o redirecionamento personalizado da cadeia de caracteres do Registro, se necessário.

 

Criar um recurso com neutralidade de idioma

Um aplicativo MUI em execução no Windows Vista e posterior usa um recurso de cadeia de caracteres com neutralidade de idioma para permitir o acesso a cadeias de caracteres específicas do idioma armazenadas em uma tabela de recursos de cadeia de caracteres. O código do aplicativo que lê esses valores do registro é descrito na seção Carregar um valor de registro de linguagem neutra de Localizar cadeias de caracteres redirecionadas.

Os dados de um valor de registro neutro em linguagem têm o formato "@<PE-path>,-<stringID>[;<comment>]", em que:

  • PE-path especifica o caminho do executável. Você pode especificar o caminho usando uma variável de ambiente, como %ProgramFiles%, para dar suporte à implantação. Uma alternativa para fazer sua referência de cadeia de caracteres é deixar de fora as informações do caminho do arquivo. Nesse caso, seu aplicativo deve ter alguns meios, por exemplo, outro valor do Registro, para comunicar seu próprio diretório de instalação.
  • stringID especifica o identificador de recurso numérico do recurso de cadeia de caracteres relevante, que é implementado exatamente como qualquer outro recurso de cadeia de caracteres localizável.
  • comment especifica informações opcionais para depuração ou legibilidade do valor de registro. As funções de API do Registro ignoram o comentário ao carregar a cadeia de caracteres.

Observação

Os dados do valor do Registro não fazem referência explícita ao arquivo de recurso específico do idioma. O arquivo correto é determinado em runtime, com base nas preferências atuais da linguagem de interface do usuário.

 

Um valor do Registro é inserido sem um espaço entre o "," e "-". Um valor correto do Registro é:

shell32.dll,-22912

Um valor incorreto do Registro é:

shell32.dll, -22912

Um exemplo do Windows Vista é o valor do registro com os seguintes dados:

@%SystemRoot%\system32\input.dll,-5020

Criar recursos para cadeias de caracteres de atalho

Quando o aplicativo MUI exibe seu nome na interface do usuário do shell, uma cadeia de caracteres InfoTip é exibida para o ícone do aplicativo. Você deve criar recursos de cadeia de caracteres para o nome de exibição do aplicativo e a cadeia de caracteres InfoTip associada para cada idioma com suporte. Quando os recursos estiverem prontos, seu aplicativo poderá usar as cadeias de caracteres conforme descrito na API Use Shell para carregar cadeias de caracteres de atalho da seção Registro de Localizar cadeias de caracteres redirecionadas.

Preparar recursos para um atalho criado com o Windows Installer

Se você usar o MSI (Windows Installer) para criar um atalho, os recursos de cadeia de caracteres incluirão o nome de exibição de atalho e a descrição. Na tabela de atalho MSI, a DLL do recurso é referenciada nas colunas apropriadas, e os identificadores de recurso para o nome de exibição de atalho e a descrição são usados nas colunas do identificador de recurso correspondentes.

Para que o atalho do aplicativo funcione corretamente com a tecnologia de recursos MUI, tenha os seguintes pontos em mente ao preparar as cadeias de caracteres de atalho:

  • Use variáveis de ambiente ou um caminho relativo para registrar a DLL. Você pode especificar @%systemroot%\system32\shell32.dll desde que o tipo de cadeia de caracteres do Registro seja REG_EXPAND_SZ. O identificador de recurso de cadeia de caracteres para "Documento de texto" no Shell32.dll é 12345.
  • Não use espaços ao redor dos símbolos "" e "-". Um exemplo correto é "shell32.dll,-22912".
  • Não use um nome de arquivo curto. Esse tipo de nome não funciona com o carregador de recursos.

Preparar recursos para um atalho usando o formato INF

Se você usar o formato de arquivo INF para criar cadeias de caracteres de atalho, o arquivo de recurso deverá fazer as seguintes configurações do Registro. Essas instruções pressupõem o uso da sintaxe ProfileItems da API de Instalação.

  1. Altere o valor do InfoTip para apontar para a referência de redirecionamento de cadeia de caracteres usando o caminho e o identificador de recurso.
  2. Adicione o novo valor DisplayResource nas seções de instalação do ProfileItems.

Veja a seguir um exemplo mostrando a adição do aplicativo Calculadora ao menu Iniciar:

[CalcInstallItems]
"Name" = %Calc_DESC%
"CmdLine" = 11, calc.exe
"SubDir" = %Access_GROUP%
"WorkingDir" = 11

"InfoTip" = "@%systemroot%\system32\shell32.dll,-22531"

"DisplayResource" = "%systemroot%\system32\shell32.dll",22019

Use a sintaxe mostrada abaixo ao usar INF para adicionar itens, por exemplo, uma pasta grupo de acesso, ao menu Iniciar. Essa sintaxe pressupõe o uso do suporte [StartMenuItems] da Instalação, semelhante à sintaxe usada em Syssetup.inf.

[StartMenuItems]
<description> = <binary>,<commandline>,<iconfile>,<iconnum>,<infotip>,<resDLL,resID>

Defina a infodica de valor como a referência de cadeia de caracteres "@<path>,-resID".

O nome de exibição é determinado pelos valores resDLL e resID. O valor resID especifica o identificador de recurso para um recurso de cadeia de caracteres associado ao arquivo neutro de linguagem. O valor resDLL especifica o caminho para o arquivo neutro do idioma.

Criar recursos para nomes de tipo de documento amigáveis

Você deve implementar cadeias de caracteres de nome amigável e InfoTip para seu aplicativo como recursos de cadeia de caracteres. Para permitir que nomes de tipo de documento amigáveis reajam à linguagem de interface do usuário, o aplicativo deve registrar os nomes usando o valor FriendlyTypeName na chave do identificador do programa para o tipo de arquivo. O valor padrão da chave do identificador do programa deve ser mantido para manter a compatibilidade com versões anteriores. Para obter informações sobre como acessar os nomes de seu aplicativo, confira os Nomes de tipo de documento amigáveis de consulta na seção Registro de Localizar cadeias de caracteres redirecionadas.

O trabalho específico envolve as seguintes etapas:

  1. Implemente o nome amigável e as cadeias de caracteres InfoTip como recursos de cadeia de caracteres específicos do idioma.
  2. Adicione o valor FriendlyTypeName na chave do registro do tipo de documento. Os dados do valor seguem o padrão "@<path>,-<resID>", em que o caminho indica o executável e resID é o identificador de recurso de um recurso de cadeia de caracteres localizável associado a esse executável.
  3. Especifique o valor do registro InfoTip de acordo com o formato "@<path>,-<resID>".

O exemplo a seguir mostra as configurações do Registro para um arquivo .txt:

HKCR\.txt
@="txtfile"
"Content Type"="text/plain"

HKCR\txtfile
@="Text Document"

"FriendlyTypeName" = "@%systemroot%\system32\shell32.dll,-12345"

"InfoTip" = "@%systemroot%\system32\shell32.dll,-12346"

Fornecer recursos para cadeias de caracteres de ação de verbo do Shell

Cadeias de caracteres de ação para determinados verbos, por exemplo, "abrir" e "editar", são mostradas no menu pop-up exibido quando o usuário clica com o botão direito do mouse em um arquivo no Windows Explorer. Seu aplicativo não precisa especificar cadeias de caracteres para verbos de shell comuns, pois o shell tem seus próprios padrões habilitados para MUI para esses verbos. No entanto, você deve fornecer recursos de cadeia de caracteres localizáveis para cadeias de caracteres que representam verbos incomuns.

Em sistemas operacionais XP pré-Windows, as cadeias de caracteres para verbos de shell no registro são renderizadas usando a seguinte sintaxe, em que o verbo especifica o nome real do verbo:

HKCR\<progid>\shell\<verb>
@ = <friendly-name>

Veja um exemplo:

HKCR\Sample.app\shell\Disc
@ = "Disconnect"

No Windows XP e posterior, você pode usar um nível de indireção para fazer com que uma cadeia de caracteres de ação dependa da linguagem de interface do usuário. Esses sistemas operacionais dão suporte a um valor MUIVerb para definição de uma cadeia de caracteres compatível com MUI. Aqui está um exemplo de uma entrada do Registro para um verbo incomum:

HKCR\Sample.app\shell\Disc
@ = "Disconnect"
"MUIVerb" = "@%systemroot%\system32\sample.exe,-9875"

Seu aplicativo MUI também deve ser capaz de registrar o valor padrão antigo como uma cadeia de caracteres localizável, conforme mostrado abaixo:

HKCR\Sample.app\shell\Disc
@ = "@%systemroot%\system32\sample.exe,-9875"

Observação

O registro do valor padrão antigo não é recomendado porque requer uma configuração diferente no Windows XP e posterior da configuração usada em sistemas operacionais anteriores.

 

Criar recursos para verbo, protocolo e cadeias de caracteres AuxUserType

Você deve criar recursos de cadeia de caracteres localizáveis para cadeias de caracteres Verb, Protocol e AuxUserType. Use as seguintes configurações do Registro:

HKCR\CLSID\{<Your_CLSID>}\Verb\<number> @="<Your Verb>, <menu_flag>, <verb_flag>"
"LocalizedString"="@<resDLLpath\resDLL.DLL>,-resStrID"
...

HKCR\CLSID\{<Your_CLSID>}\AuxUserType\<number>
@="<Your Short Name>"
"LocalizedString"="@<resDLLpath\resDLL.DLL>,-resStrID1"
...

HKCR\<Your_Name>\protocol\StdFileEditing\verb\<number>
@="<Your Verb>"
"LocalizedString"="@<resDLLpath\resDLL.DLL>,-resStrID"
...

O valor especificado para LocalizedString contém ou substitui apenas o valor de Seu verbo, não os dois valores de sinalizador.

Aqui está um resumo para ajudá-lo a garantir as configurações corretas do Registro:

  • Se CLSID tiver uma chave HKCR\CLSID\{clsid}\Insertable, defina o valor CLSID padrão usando HKCR\CLSID\{clsid}\LocalizedString.
  • Se CLSID tiver uma ou mais subchaves em HKCR\CLSID\{clsid}\Verb, defina cada cadeia de caracteres verbo individual usando HKCR\CLSID\{clsid}\Verb\xxx\LocalizedString.
  • Se CLSID tiver uma ou mais subchaves em HKCR\{progid}\Protocol\Stdfileediting\Verb, defina cada cadeia de caracteres verbo individual usando HKCR\{progid}\Protocol\Stdfileediting\Verb\xxx\LocalizedString.
  • Se CLSID tiver uma ou mais subchaves AuxUserType listadas em HKCR\CLSID\{clsid}\AuxUserType, defina cada entrada AuxUserType usando HKCR\CLSID\{clsid}\AuxUserType\xxx\LocalizedString.

Criar um recurso para o programa de desinstalação

Para registrar o programa de desinstalação do aplicativo, você pode criar valores de registro na subchave do identificador exclusivo para o aplicativo na chave do Registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall. Os valores a serem definidos incluem: DisplayName, DisplayVersion, Publisher, ProductID, RegOwner, RegCompany, UrlInfoAbout, HelpTelephone, HelpLink, InstallLocation, InstallSource, InstallDate, Contact, Comments, DisplayIcon, Readme, UrlUpdateInfo.

Observação

Para habilitar a tecnologia MUI para cada valor, você pode acrescentar "_Localized" ao nome do valor.

 

Os componentes do sistema operacional são necessários para fornecer um valor para DisplayName_Localized de uma maneira específica de MUI. Você deve colocar o nome de exibição em uma DLL, como Res.dll, como um recurso de cadeia de caracteres, supondo que o identificador seja 1245. Em seguida, o aplicativo pode registrar o nome de exibição como DisplayName_Localized com o valor "@\res.DLL,-1245". Todas as outras configurações do Registro devem ser mantidas como estão, incluindo o valor original para DisplayName.

Criar recursos para eventos de som

O Windows associa determinados eventos a arquivos de som, por exemplo, um evento de notificação de novo email ou um evento de alarme de nível crítico da bateria. Os nomes de evento devem ser exibidos pela interface do usuário e devem dar suporte à globalização. Portanto, você deve implementar um recurso de cadeia de caracteres localizável para a descrição de cada descrição do evento. Adicione um novo valor de registro para cada nome de evento, além do valor padrão codificado em código.

Faça o seguinte para habilitar um evento de som:

  1. Implemente a descrição como um recurso de cadeia de caracteres localizável.
  2. Adicione um novo valor de registro para o nome de exibição, além do valor padrão codificado em código. O layout do Registro associado é mostrado abaixo:
HKCR\AppEvents\EventLabels
<event_name>
    (Default) REG_SZ "<description>"
    DispFileName REG_EXPAND_SZ "@<path>,-<resID>"

Se o shell não puder localizar ou recuperar o valor de DispFileName, ele usará a descrição padrão.

Criar recursos para cadeias de caracteres de layout de teclado

Se o aplicativo implementar um layout de teclado, ele exigirá um recurso de cadeia de caracteres localizável para o nome do layout para exibição de tela, por exemplo, em listas de layouts de teclado. Cada layout de teclado tem uma chave do Registro em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts.

Entre os valores dessa chave são Layout Text, um nome legível para compatibilidade com versões anteriores e Layout Display Name. Os dados fornecidos Layout Display Name devem ser uma referência de cadeia de caracteres do formulário @<path>,-resID, referindo-se a um recurso de cadeia de caracteres localizável associado ao layout do teclado.

Aqui está um exemplo de uma configuração do Registro para o layout do teclado espanhol:

HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\
0000040a
    Layout Text REG_SZ "Spanish"
    Layout Display Name REG_EXPAND_SZ "@%SystemRoot%\system32\input.dll,-5020"

Representar cadeias de diálogo comuns do objeto OLE Insert

Você pode implementar o nome de exibição de um objeto inserível OLE como um recurso de cadeia de caracteres localizável associado ao código que implementa esse objeto. A caixa de diálogo OLE Insert Object obtém um nome de exibição da chave do Registro HKCR\CLSID\{<GUID>}, em que o GUID identifica o identificador de classe de um objeto OLE inserível. O Windows Vista e posteriormente implementam esse tipo de objeto de maneira localizável, usando um nome de exibição compatível com MUI que permite a personalização para a linguagem de interface do usuário. Por outro lado, os sistemas operacionais pré-Windows Vista implementam o nome de exibição para esse tipo de objeto usando o valor padrão da chave do Registro correspondente. Normalmente, esse nome é um nome em inglês (Estados Unidos) ou um nome no idioma padrão da interface do usuário do sistema.

Observação

Nem todos os objetos que correspondem a subchaves da chave do Registro são inseriveis.

 

O valor padrão da chave HKCR\CLSID\{<GUID>} deve manter um nome legível para compatibilidade com versões anteriores. No entanto, ele também deve definir o valor LocalizedString, no formato "@<path>,-ResID", em que o caminho identifica o arquivo executável que implementa o objeto. O valor ResID especifica o identificador de recurso da cadeia de caracteres localizável para o nome de exibição.

Por exemplo, o script de registro do objeto Clipe de Mídia inserível inclui as seguintes linhas:

HKCR,"CLSID\%CLSID_Media_Clip%",,,"%default description%"
HKCR,"CLSID\%CLSID_Media_Clip%","LocalizedString",,"@%systemroot%\system32\mplay32.exe,-9217"

A primeira linha fornece compatibilidade com versões anteriores colocando uma cadeia de caracteres de texto simples no registro como um nome de exibição padrão. A segunda linha fornece acesso ao nome de exibição compatível com MUI. Indica o identificador de cadeia de caracteres armazenado em Mplay32.exe. A cadeia de caracteres com o identificador 9217 em Mplay32.exe pode ser associada a valores de recurso de cadeia de caracteres para qualquer número de idiomas. Seu nome em inglês (Estados Unidos) é "Media Clip".

Criar recursos de cadeia de caracteres para snap-ins do Console de Gerenciamento da Microsoft

Você deve criar um recurso de cadeia de caracteres localizável para cada snap-in do Microsoft Management Console (MMC) usado pelo aplicativo MUI. Como um snap-in faz parte de um console, ele tem uma interface do usuário e deve ser globalizado para operar em mais de um idioma.

Na maioria das vezes, os snap-ins do MMC geram os mesmos problemas de globalização e localização que o próprio aplicativo MUI. Um snap-in do MMC deve refletir seu nome no Registro para exibição. A entrada do Registro deve incluir uma referência indireta a um recurso de cadeia de caracteres localizável e uma cadeia de caracteres literal para compatibilidade com versões anteriores.

Cada snap-in do MMC tem uma chave do Registro em HKEY_LOCAL_MACHINE\Software\Microsoft\MMC\SnapIns. Entre os valores dessa chave estão NameString, especificando um nome legível para compatibilidade com versões anteriores e NameStringIndirect, especificando uma referência indireta a um recurso de cadeia de caracteres localizável. Para NameStringIndirect, você deve fornecer uma referência de cadeia de caracteres do formulário "@<path>,-resID", representando um recurso de cadeia de caracteres localizável.

Por exemplo, você pode fazer a seguinte configuração para Mymmc.dll, em que 12345 é o identificador do recurso de cadeia de caracteres correspondente que contém o nome localizável do snap-in:

NameStringIndirect=@%systemroot%@c:\windir\system32\mymmc.dll,-12345

Alguns snap-ins registram outros valores de cadeia de caracteres do Registro que o MMC não lê do registro. Para obter mais informações sobre como usar esses valores, confira Registrar cadeias de caracteres snap-in do Console de Gerenciamento Microsoft que não são lidas do Registro em Localizar cadeias de caracteres redirecionadas.

Criar recursos de cadeia de caracteres para um serviço Windows

Embora um serviço Windows normalmente tenha pouca ou nenhuma interface do usuário, ele deve exibir um nome compatível com MUI e geralmente fornece uma descrição específica da linguagem em conformidade com MUI. A chave do Registro que descreve um serviço Windows dá suporte apenas ao valor DisplayName para o nome do serviço e o valor de Descrição para a descrição do serviço.

As configurações do serviço Windows são feitas a partir do aplicativo, conforme descrito em Definir o nome de exibição e a descrição de um serviço Windows do Registro em Localizar cadeias de caracteres redirecionadas. Se o aplicativo não definir os valores do Registro para a interface do usuário do serviço, os valores no registro permanecerão definidos como inglês, mesmo que a interface do usuário esteja em outro idioma.

Preparar recursos

Localizar cadeias de caracteres redirecionadas