• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Luis_M

Ficheiro com Idioma e MessageBox com 2 linhas

2 mensagens neste tópico

Estou alterando uma app para poder ser en PT, espanhol, inglês, etc.

Para isso a app lê, ou carrega vários um determinado ficheiro *.lng com as mensagens, captions etc.

Esse ficheiro pode ser alterado pelo user, assim poderá criar 1 ficheiro para o seu idioma.

O problema é que a app em PT, além das mensagens de aviso terem variáveis, já resolvido, por vezes deverão conter mais de 1 linha, no código original uso o #10#13 para criar nova linha seguido do resto da mensagem a apresentar.

Linhas do Ficheiro en.lng:

1=Its Ok

2= Cancel

3=Alarm for %s at %s hours

4=English msg #10#13 So what ?...

function Getlabel(const Nr: string): string;
var
   Sl: TStringList;
begin
   Sl:= TStringList.Create();
   Sl.LoadFromFile(ExtractFilePath(ParamStr(0))+'en.lng');
   try
     Result:= Sl.Values[Nr];
   finally
     FreeAndNil(Sl);
   end;
end;

// Para o exemplo, criei um button para mostrar a mensagem

procedure TForm1.Button6Click(Sender: TObject);
begin
if MessageBox(Handle, PChar(GetLabel('4')), PChar('Information'), $00000134) = IDYES then
  begin
  //qualquer código ....
  end ;

end;

Resultado pretendido ( com 2 linhas):

English msg

so what ?...

Mas aparece ( 1 unica linha ):

English msg #10#13 so what ?...

Haverá alguma solução, para além de no ficheiro en.lng obrigar a existir duas linhas para a mesma mensagem , exemplo :

4=English msg

5=So what ?...

E obtia o resultado através de :

if MessageBox(Handle, PChar(GetLabel('4'))+#10#13+ GetLabel('5')),PChar('Information'), $00000134) = IDYES then ....

Isto, queria eu evitar... para não confundir o user ao criar o seu idioma...

Tnx .

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Solucionado  :D

( noutro forum ...)

Trate a string antes de exibí-la, usando ReplaceStr. Tipo:

Código:

if pos( '#10#13' , Frase ) > 0 then //se encontrou a quebra de linha, altere-a

  Frase = AnsiReplaceStr(Frase,'#10#13',#10#13);

Dessa forma, você pode definir até outros caracteres, ou sequencias especiais na tradução.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora