 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
Lane1902 Experiente

Registrado: Quinta-Feira, 15 de Janeiro de 2004 Mensagens: 447
|
Enviada: Ter Fev 22, 2011 12:20 am Assunto: RESOLVILDO Internacionalizacao no Delphi 7? |
|
|
Ola pessoal tudo bem, espero que sim.
A duvida e a seguinte, moro nos EUA, e estou desenvolvendo alguns programas aqui, mais o problema e que preciso deles nos seguintes idiomas: Portugues, Espanho, Ingles, sei que existem varias maneiras de fazer isso, mais eu gostaria de implementar algo do tipo, conforme o usuario que se loga, o sistema se "Adapta", tipo se o idioma do usuario for Espanhol, o sistema automaticamente muda para o tal, e assim por diante.
Tenho um metodo em java que faz isso e muito simples, mais em Delphi tenho visto algumas coisas pela internet que nao gostei.
Agradeco a Todos a grande ajuda e envio um Forte abraco a Todos ai no Brasil.
Editado pela última vez por Lane1902 em Qua Fev 23, 2011 7:34 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
bruno.ti Membro Junior


Registrado: Segunda-Feira, 14 de Fevereiro de 2011 Mensagens: 304
|
Enviada: Ter Fev 22, 2011 8:37 am Assunto: |
|
|
Bom dia,
Você poderia criar uma tabela de perfis para seus usuários, conforme usuário/senha você faz o login em um determinado idioma.
Já precisei fazer isso em vários projetos e funciona muito bem.
O que acha?
Abraços,
Bruno. |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Ter Fev 22, 2011 9:12 am Assunto: |
|
|
o código q traduz vc ja tem certo?
faz como o Bruno falou no cadastro do usuario vc coloca qual é o idioma dele, quando ele fizer o login vc carrega como q ta la no cadastro de usuario... |
|
| Voltar ao Topo |
|
 |
Lane1902 Experiente

Registrado: Quinta-Feira, 15 de Janeiro de 2004 Mensagens: 447
|
Enviada: Ter Fev 22, 2011 10:51 am Assunto: |
|
|
Pessaol agradeco a dicas de todos, infelizmente nao tenho ainda nenhum codigo de como fazer isso em Delphi, Agradeco a ajuda de todos.
Um forte abraco |
|
| Voltar ao Topo |
|
 |
supgaroto Aprendiz

Registrado: Segunda-Feira, 11 de Dezembro de 2006 Mensagens: 136
|
Enviada: Ter Fev 22, 2011 11:12 am Assunto: |
|
|
| Lane1902 escreveu: | Pessaol agradeco a dicas de todos, infelizmente nao tenho ainda nenhum codigo de como fazer isso em Delphi, Agradeco a ajuda de todos.
Um forte abraco |
Sua duvida é: Como traduzir?
Da um pouco de trabalho mais da certo!!
Tenta assim cria uma tabela com texto das mensagens e menus deixando um link para idiomas. |
|
| Voltar ao Topo |
|
 |
bruno.ti Membro Junior


Registrado: Segunda-Feira, 14 de Fevereiro de 2011 Mensagens: 304
|
Enviada: Ter Fev 22, 2011 1:07 pm Assunto: |
|
|
Sua dúvida é traduzir no Delphi ou arquitetar seu software para que ele possa traduzir?
(Seu software está planejado para essa tradução?)
[]s,
Bruno |
|
| Voltar ao Topo |
|
 |
Lane1902 Experiente

Registrado: Quinta-Feira, 15 de Janeiro de 2004 Mensagens: 447
|
Enviada: Ter Fev 22, 2011 4:15 pm Assunto: |
|
|
| Sim meu projeto ja esta pronto, tenho no cadastro de usuarios um campo us_cod_idioma no qual eu seleciono e deixo isso na base, tem mais alguma coisa que preciso fazer ? |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Ter Fev 22, 2011 4:20 pm Assunto: |
|
|
| Lane1902 escreveu: | | Sim meu projeto ja esta pronto, tenho no cadastro de usuarios um campo us_cod_idioma no qual eu seleciono e deixo isso na base, tem mais alguma coisa que preciso fazer ? |
na hora q vc abrir o projeto seta o idiona que ta no cadastro do usuario que entrou |
|
| Voltar ao Topo |
|
 |
Lane1902 Experiente

Registrado: Quinta-Feira, 15 de Janeiro de 2004 Mensagens: 447
|
Enviada: Ter Fev 22, 2011 4:23 pm Assunto: |
|
|
E o seguinte, estou fazendo este sistema para quando o usuario for cadastrado dentre outras propriedades eu tenho o idioma do mesmo, dai quando ele selecionar por exemplo espanhol, no momento em que ele se logar eu gostaria de que todo o sistema se auto internacionaliza-se tipo labels, botoes, itens de menu tudo em espanhol, conforme o Form que ele abre ele se modifica, aqui nos EUA o pessoal usa basicamente o Ingles, mais a comunidade espana e a brasileira sao bem grandes, entao eu quero aproveitar esta fatia, pois acreditem ou nao nem todo mundo fala ingles aqui nao, hehehhee.
Um forte abraco obrigado. |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Ter Fev 22, 2011 4:28 pm Assunto: |
|
|
| Lane1902 escreveu: | E o seguinte, estou fazendo este sistema para quando o usuario for cadastrado dentre outras propriedades eu tenho o idioma do mesmo, dai quando ele selecionar por exemplo espanhol, no momento em que ele se logar eu gostaria de que todo o sistema se auto internacionaliza-se tipo labels, botoes, itens de menu tudo em espanhol, conforme o Form que ele abre ele se modifica, aqui nos EUA o pessoal usa basicamente o Ingles, mais a comunidade espana e a brasileira sao bem grandes, entao eu quero aproveitar esta fatia, pois acreditem ou nao nem todo mundo fala ingles aqui nao, hehehhee.
Um forte abraco obrigado. |
não entendi!!! vc não tem a parte que altera os label pra outro idioma? |
|
| Voltar ao Topo |
|
 |
Lane1902 Experiente

Registrado: Quinta-Feira, 15 de Janeiro de 2004 Mensagens: 447
|
Enviada: Ter Fev 22, 2011 4:32 pm Assunto: |
|
|
Nao, nao tenho esta parte pronta ainda, nao, eu fiz um projeto em java, que voce cria um arquivo de propriedades, dai voce passa o nome do arquivo para uma "FUNCAO" e a mesma faz as trocas nos labels bem legal mais nao tenho ideia de como implementar em delphi ainda nao, sei que terei de fazer uma "varredura" do form e comparar por exemplo o nome do label no Form com um nome em um arquivo, ou base de dados para fazer o mesmo, mais nao tenho nada pronto neste sentido ainda nao.
Obrigado. |
|
| Voltar ao Topo |
|
 |
bruno.ti Membro Junior


Registrado: Segunda-Feira, 14 de Fevereiro de 2011 Mensagens: 304
|
Enviada: Ter Fev 22, 2011 4:54 pm Assunto: |
|
|
Cara, você pode programar seu label por ex.
If variavel de idioma para usuário logado = espanhol
Texto Label = espanhol
If variavel de idioma para usuário logado = ingles
Texto Label = ingles
Vc pode criar uma função genérica e pode chamar qdo for carregar seu form. Outra dica, ao invés de aninhar um monte de IF, cria um Case que fica mais bonito!
[]s,
Bruno |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Ter Fev 22, 2011 5:01 pm Assunto: |
|
|
| bruno.ti escreveu: | Cara, você pode programar seu label por ex.
If variavel de idioma para usuário logado = espanhol
Texto Label = espanhol
If variavel de idioma para usuário logado = ingles
Texto Label = ingles
Vc pode criar uma função genérica e pode chamar qdo for carregar seu form. Outra dica, ao invés de aninhar um monte de IF, cria um Case que fica mais bonito!
[]s,
Bruno |
outra ideia é trabalhar com INI, vc pode trabalhar com uma chave para cada linguagem ou 1 arquivo para cada linguagem |
|
| Voltar ao Topo |
|
 |
Lane1902 Experiente

Registrado: Quinta-Feira, 15 de Janeiro de 2004 Mensagens: 447
|
Enviada: Qua Fev 23, 2011 12:47 am Assunto: |
|
|
Bem pessoal agradeco a dica de todos, esta funcionando mais do meu jeito, fiquem livres para adaptar ou melhorar o codigo, um forte abraco a Todos !
Para Usar, Chamar utilize assim:
| Código: |
begin
{ Procedimento que Realiza a Conversao, Informe o Idioma e o Formulario. }
PLerIdioma('ingles', FCadProdutos);
end;
|
Este e o procedimento que Realiza Toda a Magica:
| Código: |
procedure PLerIdioma(Idioma: string; oForm: TForm);
Var
i : integer;
j : integer;
Posi : integer;
Caminho : string;
Componente : string;
Texto : string;
Source : TComponent;
begin
{ Pegando o Idioma Desejado.}
Caminho := ExtractFilePath( Application.ExeName ) + Idioma + '.ini';
{ Se Existir o Caminho }
If FileExists(Caminho)then
begin
{ Percorre Todo o Formulario. }
For i := 0 To oForm.ComponentCount - 1 Do
begin
{ Processar as Mensagens. }
Application.ProcessMessages;
{ Se Estiver no Intervalo de Componentes Exigido: }
IF ( oForm.Components[i].ClassName = 'TLabel' ) then
begin
{ Pegar o Caption do Componente que Esta Sendo Varrido. }
Componente := oForm.Components[i].GetNamePath;
{ Funcao que Devolve a String do Arquivo .ini, que Contem o Nome da Label}
Texto := FLerArqIdioma(Caminho, Idioma, Componente);
{ Comparando os Dois. }
IF(Componente = Texto)then
{ Repassar o Caption para o Componente na Tela. }
Source := oForm.FindComponent(Texto);
{ Se Existir um Componente com o Mesmo Nome no Form. }
IF(Source <> Nil)then
begin
{ Se For do Tipo TLabels. }
IF Source is TLabel then
begin
Texto := FTrocaPalavra(Caminho, Idioma, Componente);
{ Repassando o Valor Encontrado no Arquivo .ini}
TLabel(Source).Caption := Texto;
end;
end;
end;
end;
end;
end;
|
Editado pela última vez por Lane1902 em Qua Fev 23, 2011 12:48 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
Lane1902 Experiente

Registrado: Quinta-Feira, 15 de Janeiro de 2004 Mensagens: 447
|
Enviada: Qua Fev 23, 2011 12:47 am Assunto: |
|
|
Tem Mais ...
Estas sao as Funcoes que Utilizo Tambem :
| Código: |
function FLerArqIdioma(Caminho, Idioma, Conteudo: string):string;
Var
i: integer;
Texto : string;
begin
{ Criando o Arquivo .inni}
ArqIni := TIniFile.Create(Caminho);
For i := 0 To ArqIni.InstanceSize Do
begin
{ Pegar o Conteudo Corrente. }
Texto := ArqIni.ReadString(Idioma, 'id' + IntToStr(i), '' );
{ Se Existir Algum Conteudo na Variavel Texto.}
IF FTexto(Texto)then
begin
{ Pegar o Conteudo. }
Texto := Trim(Copy(Texto, 1, FUltima(Texto, '|') - 2));
IF(Conteudo = Texto) then
begin
Result := Texto;
Break;
end;
end;
end;
end;
function FTrocaPalavra(Caminho,Idioma, Conteudo: string):string;
(*
Objetivo : Percorrer o Arquivo .ini, e Realizar a Troca no Form da Palava
Correspondentes.
Autor : Ricardo Scarpim.
Data : 02/22/2011.
Parametros :
Caminho : Caminho Onde se Encontra o Arquivo .ini.
Idioma : Idioma pelo qual Sera Realizado o Carregamento do Arquivo .ini
Conteudo : Conteudo passado para Fazer as Comparacao.
Retorno : String com a Traducao.
*)
Var
i: integer;
Texto : string;
Armazenado : string;
begin
{ Criando o Arquivo .ini }
ArqIni := TIniFile.Create(Caminho);
{ Varrer o Arquivo .ini }
For i := 1 To ArqIni.InstanceSize Do
begin
{ Pegar o Conteudo Corrente. }
Texto := ArqIni.ReadString(Idioma, 'id' + IntToStr(i), '' );
Armazenado := Texto;
{ Se Existir Algum Conteudo. }
IF FTexto(Texto)then
begin
{ Pegando o Conteudo do Arquivo .ini }
Texto := Copy(Texto, 1, FUltima(Texto, '|') - 2 );
{ Se o Conteudo Passado for Igual ao Achado. }
IF(Conteudo = Texto) then
begin
{ Pegar o Conteudo da Traducao. }
Result := Copy(Armazenado, FUltima(Armazenado, '|') + 1, Length(Armazenado));
Break;
end;
end;
end;
end;
function FUltima (Texto, Caracter: string): Byte;
(*
Objetivo : Retorna a ultima ocorrencia do caracter indicado.
Autor : Ricardo Scarpim.
Data : 07/012005.
Entrada : Texto : Texto a ser Analizado.
Caracter : Caracter a Analizar.
Saída : Posição da Última Ocorrência.
*)
Var
Posicao : Byte;
Posicao1 : Byte;
Begin
{ Pegando a Posição }
Posicao := Pos( Caracter, Texto );
Posicao1 := 0;
While Posicao > 0 Do
begin
{ Preserva a quantidade de cacteres ate o caracter. }
Inc( Posicao1, Posicao );
{ Reduz o texto original. }
Texto := Copy( Texto, Posicao + 1, Length( Texto ) );
{ procura o caracter no texto reduzido. }
Posicao := Pos(Caracter,Texto);
End;
{ Resultado. }
Result := Posicao1;
end;
|
E Isso ai, se nao faltou nada ja da para Utilizar, nao se esqueca de criar o arquivo .ini,eu criei da seguinte forma:(Ingles)
| Código: |
[ingles]
id1=lbPROD_CODIGO |Code
id2=lbDT_CADASTRO |Registration Date
id3=lbDT_ALTERACAO |Data amendment
id4=lbDT_ULTIMA |Last Sale Date
id5=lbCADASTRADO |Joined
id6=lbALTERADO |Amended
|
|
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|