grings

Traducao das mensagens do Delphi das constantes

Oct 14th, 2011
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.18 KB | None | 0 0
  1. {
  2. Sempre que pesquisei sobre como traduzir as mensagens do Delphi obtive, na maioria das vezes, a mesma resposta.  Basicamente essas respostas envolviam a substituição das units do Delphi por outras já traduzidas.
  3.  
  4. Enfim encontrei algo mais elegante.  Todas as mensagens do Delphi são declaradas como resourcestring, que é uma área onde são declaradas “constantes” que podem ser alteradas em run-time, ou seja, sem a necessidade de recompilar o projeto.
  5.  
  6. Para alterar essas “constantes” usamos a função VirtualProtec (windows.pas). Através dela obtemos a estrutura do resourcestring armazenado no executável e a alteramos.  Para simplificar criei um método que faz toda a operação.
  7. }
  8. procedure SetResourceString(AResString: PResStringRec; ANewValue: PChar);
  9. var
  10.    POldProtect: DWORD;
  11. begin
  12.    VirtualProtect(AResString, SizeOf(AResString^), PAGE_EXECUTE_READWRITE, @POldProtect);
  13.    AResString^.Identifier := Integer(ANewValue);
  14.    VirtualProtect(AResString, SizeOf(AResString^), POldProtect, @POldProtect);
  15. end;
  16.  
  17. {
  18. Para utilizar esse método basta passar o ponteiro do resourcestring e seu novo valor.  Exemplo:
  19. }
  20. resourcestring
  21.    rsMinhaMensagem = ‘Exemplo de alteração do resourcestring;
  22.    SetResourceString(@rsMinhaMensagem, ‘rsMinhaMensagem mudou’);
  23.  
  24. {
  25. As declarações de resourcestring do Delphi estão espalhadas em várias units (corbcnst, midconst, mxconsts, comconst, webconst, ibconst, bdeconst, comstrs, consts), portanto para traduzir basta localiza-las na pasta source da instalação do Delphi e executar o método SetResourceString para cada constante que deseja traduzir.  Exemplo:}
  26.  
  27. SetResourceString(@SMsgDlgYes, ‘Novo Yes’);
  28.  
  29. {
  30. Toda a tradução pode ser declarada na inicialização de uma unit comum a todos os seus projetos.  Você encontrará mais detalhes no projeto exemplo.
  31.  
  32. Esse conceito pode ser utilizado para a internacionalização de seu sistema, ou seja, poderíamos declarar todas as mensagens como resourcestring e cria um mecanismo no sistema que permita ao usuário trocar a linguagem.  Nas versões mais atuais do Delphi já temos opções que simplificam esse trabalho.
  33.  
  34. Origem http://leandropiga.nothus.com.br/?p=38}
Advertisement
Add Comment
Please, Sign In to add comment