| 
			
				|  | 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.
 
 |  |