DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

Internacionalizando seu aplicativo em Delphi

Se você quiser que seu aplicativo Delphi esteja preparado para lidar com vários locais, então você precisa internacionalizá-lo. Há três aspectos comuns que devem ser abordados:

* Recursos
* Conversões de unidades
* Mensagens dinâmicas

Nós vamos cobrir os três com um exemplo de forma muito simples.

Considere o seguinte código recortado para a localidade en-US (inglês dos Estados Unidos da América).

Código padrão

1
2
3
4
procedure TForm1.DefineFever;
begin
  ShowMessage('If the body temperature rises above 99°F the person is considered to have a fever.');
end;

Resourcing é o processo de remoção de strings codificadas do código, tornando-as resourcestrings. O código acima não é localizável porque o procedimento ShowMessage está tomando uma seqüência de caracteres codificada.

O que fazes? Dê uma olhada: Definimos strFeverDefinition como um resourcestring e o usamos como um parâmetro para o procedimento ShowMessage.
A funcionalidade permanece a mesma, mas a função é agora localizável.

Início de preparação para código

1
2
3
4
5
6
procedure TForm1.DefineFever;
resourcestring
  strFeverDefinition = 'If the body temperature rises above 99°F the person is considered to have a fever.';
begin
  ShowMessage(strFeverDefinition);
end;

Conversão de Unidades: Em alguns países (como Estados Unidos e Belize) a temperatura é medida em escala Fahrenheit, mas em muitos outros geralmente é em escala Celsius. Uma forma de internacionalizar pode ser está:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function GetFeverTemperature: string;
var
  LangID: LangID;
begin
  //By default
  Result:= '37.2°C';
 
  {read current system locale}
  LangID := GetSystemDefaultLangID;
 
  //Assuming that only the United States and Belize use the Fahrenheit scale
  if (LangID = {English - United States} 1033) or         
     (LangID = {English - Belize} 10249) then
  Result:= '99°F';
end;
 
procedure TForm1.DefineFever;
begin
  ShowMessage('If the body temperature rises above ' + GetFeverTemperature + ' the person is considered to have a fever');
end;

Note que já no exemplo da temperatura, nem todas as linguagem seguem a mesma estrutura. logo o exemplo não é muito bom!

Mensagens Dinâmicas: Consideramos o ShowMessage acima como sendo uma mensagem dinâmica , porque o parâmetro depende da função GetFeverTemperature , que obviamente pode variar.

Para resolver a armadilha acima, podemos refatorar a função DefineFever da seguinte forma: Estamos apenas usando uma string de formato ( resourcestring ) que podemos formatar usando a rotina Format .

1
2
3
4
5
6
procedure TForm1.DefineFever;
resourcestring
  strFeverDefinition = 'If the body temperature rises above %0:s the person is considered to have a fever.';
begin
  ShowMessage(Format(strFeverDefinition, [GetFeverTemperature]));
end;

Isso permite o fornecimento e o tratamento da mensagem dinâmica de uma só vez. A coisa sobre mensagens dinâmicas vai além. Em espanhol, por exemplo, a mensagem dinâmica teria sido codificada da seguinte maneira: Observe que a GetFeverTemperature está no final do ShowMesssage.

1
ShowMessage('Se considera que la persona tiene fiebre si la temperatura corporal es superior a ' + GetFeverTemperature);

Observe que o parâmetro GetFeverTemperature está no final da mensagem, que é o oposto da implementação em Inglês, onde fica no meio. Não há como localizar algo assim se você não o internacionalizar primeiro.

Portanto, as regras básicas para a internacionalização em Delphi são Resourcing, Conversões de Unidades e Mensagens Dinâmicas, lembrando que o
uso da função GetSystemDefaultLangID que permite que possamos avaliar o idioma informado no sistema operacional.

Baseado no post: http://www.yanniel.info/2011/11/internationalization-tips-delphi.html

Dúvidas ou sugestões? Deixe o seu comentário!

Facebook Comments Box
  • Giovani Da Cruz
  • 2.396 views
  • 0 comentários
  • 28 de março de 2019

Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados