TN057: Localização dos componentes do MFC
Observação |
---|
A seguinte nota técnica não foi atualizada desde que foi incluída pela primeira vez na documentação online.Como resultado, alguns procedimentos e tópicos podem estar desatualizado ou incorreto.As informações mais recentes, é recomendável que você procure o tópico de interesse no índice de documentação on-line. |
Esta nota descreve alguns dos designs e procedimentos que você pode usar para localizar o componente, se ele controlar uma OLE ou um aplicativo ou uma DLL que usa o MFC.
Visão Geral
Na verdade, há dois problemas para resolver quando a localização de um componente que usa o MFC.Primeiro, você deve localizar seus próprios recursos — cadeias de caracteres, caixas de diálogo e outros recursos que são específicos para seu componente.A maioria dos componentes criados usando o MFC também incluir e usar um número de recursos definidos pelo MFC.Você deve fornecer recursos MFC localizados bem.Felizmente, vários idiomas já são fornecidos pelo MFC propriamente dito.
Além disso, o componente deve estar preparado para executar no seu ambiente de destino (ambiente europeu ou habilitada para DBCS).Na maior parte, isso depende de seu aplicativo trate caracteres com o conjunto de bits alta corretamente e manipulação de seqüências de caracteres de byte duplo.MFC está habilitado, por padrão, para esses ambientes, é possível ter um único binário mundial que é usado em todas as plataformas com recursos apenas diferentes conectados no momento da instalação.
Localizando recursos do componente
Localização de seu aplicativo ou DLL deve envolver simplesmente substituindo os recursos com os recursos que correspondem ao idioma de destino.Para os seus próprios recursos, isso é relativamente simples: editar recursos no editor de recursos e criar seu aplicativo.Se seu código é escrito corretamente haverá não seqüências de caracteres ou o texto que você deseja localizar embutido no código fonte C++ – localização todos pode ser feita, simplesmente modificando recursos.Na verdade, você pode implementar seu componente de modo que todos os fornecer uma versão localizada não envolve até mesmo uma compilação do código original.Isso é mais complexo, mas vale a pena ele e é o mecanismo escolhido para MFC propriamente dito.Também é possível localizar um aplicativo carregando o arquivo EXE ou DLL no editor de recursos e editando recursos diretamente.Enquanto possível, ela exige reaplicação dessas alterações cada vez que você criar uma nova versão do seu aplicativo.
Uma maneira para evitar que é localizar todos os recursos em uma DLL separada, às vezes chamada de uma DLL satélite.Essa DLL é carregada dinamicamente, em tempo de execução e os recursos são carregados a partir dessa DLL em vez do módulo principal com todo seu código.MFC diretamente oferece suporte a essa abordagem.Considere um aplicativo chamado MYAPP.EXE; poderia ter todos os seus recursos localizados em uma DLL chamada MYRES.DLL.O aplicativo InitInstance ele deve executar o seguinte para carregar a DLL e causar MFC carregar recursos desse local:
CMyApp::InitInstance()
{
// one of the first things in the init code
HINSTANCE hInst = LoadLibrary("myres.dll");
if (hInst != NULL)
AfxSetResourceHandle(hInst);
// other initialization code would follow
.
.
.
}
Daí em seguida diante, MFC carregará recursos dessa DLL em vez de partir MyApp. exe.Todos os recursos, no entanto, devem estar presentes nessa DLL; MFC não irá procurar a instância do aplicativo em busca de um determinado recurso.Essa técnica aplica-se igualmente bem a regular DLLs bem como controles OLE.O programa de instalação copie a versão apropriada do MYRES.DLL dependendo em qual localidade de recursos que o usuário.
É relativamente fácil criar um recurso somente DLL.Criar um projeto de DLL, adicionar sua.RC para ele e adicionar os recursos necessários.Se você tiver um projeto existente que não usa essa técnica, você pode copiar os recursos de projeto.Após adicionar o arquivo de recurso para o projeto, você está quase pronto para construir o projeto.A única coisa que você deve fazer é definir as opções para incluir o vinculador /NOENTRY.Isso informa o vinculador que a DLL não tem nenhum ponto de entrada – desde que ele não tem código, ele tem nenhum ponto de entrada.
Observação |
---|
O editor de recursos no Visual C++ 4.0 e posterior suporta múltiplos idiomas por.Arquivo RC.Isso pode tornar muito fácil de gerenciar sua localização em um único projeto.Os recursos para cada idioma são controlados pelas diretivas de pré-processador geradas pelo editor de recursos. |
Usar o MFC fornecido recursos localizados
Qualquer aplicativo do MFC criar reutiliza duas coisas do MFC: código e recursos.Ou seja, a MFC tem várias mensagens de erro, caixas de diálogo internas e outros recursos que são usados pelas classes do MFC.Para completamente localizar seu aplicativo, você precisará localizar não apenas recursos de seu aplicativo, mas também os recursos que vêm diretamente do MFC.MFC fornece um número de idioma diferente arquivos de recursos automaticamente, para que se o idioma de que destino é um dos idiomas que MFC já oferece suporte, basta certificar-se de que usar os recursos localizados.
Este artigo, o MFC oferece suporte a chinês, alemão, espanhol, francês, italiano, japonês e coreano.Os arquivos que contêm essas versões localizadas estão na MFC\INCLUDE\L.* (o l significa para localizado) diretórios.Os arquivos alemão estão em MFC\INCLUDE\L.DEU, por exemplo.Para fazer com que seu aplicativo para usar esses arquivos RC em vez dos arquivos localizados em MFC\INCLUDE, adicione um /IC:\PROGRAM FILES\MICROSOFT VISUAL STUDIO .NET 2003\VC7\MFC\INCLUDE\L.DEU a sua linha de comando RC (isso é apenas um exemplo; Você precisará substituir sua localidade de escolha, bem como o diretório no qual você instalou o Visual C++).
As instruções acima funcionará se seu aplicativo vincula estaticamente com MFC.A maioria dos aplicativos vincular dinamicamente (porque o que é o padrão de AppWizard).Nesse cenário, não apenas o código é dinamicamente vinculados – portanto, são os recursos.Como resultado, você pode localizar os recursos em seu aplicativo, mas os recursos de implementação do MFC serão ainda carregados partir de MFC7x.DLL (ou posterior) ou MFC7xLOC.DLL se ele existir.Para abordar isso de dois diferentes ângulos.
A abordagem mais complexa é enviar um MFC7xLOC.DLLs localizadas (como MFC7xDEU para alemão, MFC7xESP.DLL para espanhol, etc.) ou uma versão posterior e instalar o MFC7xLOC.DLL apropriado no diretório do sistema quando o usuário instala o aplicativo.Isso pode ser muito complexo para o desenvolvedor e o usuário final e como tal, não é recomendado.Consulte técnico nota 56 para obter mais informações sobre essa técnica e suas limitações.
A abordagem mais simples e segura é incluir os recursos MFC localizados no seu aplicativo ou DLL próprio (ou sua DLL satélite) se você estiver usando um.Isso evita problemas de instalação MFC7xLOC.DLL corretamente.Para isso, siga as mesmas instruções para o caso de estática acima (definição de linha de comando RC corretamente para apontar para os recursos localizados), exceto que você também deve remover o /D_AFXDLL definir que foi adicionado por AppWizard.Quando /D_AFXDLL é definida, AFXRES.H (e outros arquivos do MFC RC) não realmente definem quaisquer recursos (porque eles serão ser extraídos de DLLs MFC em vez disso).