ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

RESOLVILDO Internacionalizacao no Delphi 7?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Lane1902
Experiente
Experiente


Registrado: Quinta-Feira, 15 de Janeiro de 2004
Mensagens: 447

MensagemEnviada: Ter Fev 22, 2011 12:20 am    Assunto: RESOLVILDO Internacionalizacao no Delphi 7? Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
bruno.ti
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 14 de Fevereiro de 2011
Mensagens: 304

MensagemEnviada: Ter Fev 22, 2011 8:37 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Ter Fev 22, 2011 9:12 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Lane1902
Experiente
Experiente


Registrado: Quinta-Feira, 15 de Janeiro de 2004
Mensagens: 447

MensagemEnviada: Ter Fev 22, 2011 10:51 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
supgaroto
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 11 de Dezembro de 2006
Mensagens: 136

MensagemEnviada: Ter Fev 22, 2011 11:12 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
bruno.ti
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 14 de Fevereiro de 2011
Mensagens: 304

MensagemEnviada: Ter Fev 22, 2011 1:07 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Lane1902
Experiente
Experiente


Registrado: Quinta-Feira, 15 de Janeiro de 2004
Mensagens: 447

MensagemEnviada: Ter Fev 22, 2011 4:15 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Ter Fev 22, 2011 4:20 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Lane1902
Experiente
Experiente


Registrado: Quinta-Feira, 15 de Janeiro de 2004
Mensagens: 447

MensagemEnviada: Ter Fev 22, 2011 4:23 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Ter Fev 22, 2011 4:28 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Lane1902
Experiente
Experiente


Registrado: Quinta-Feira, 15 de Janeiro de 2004
Mensagens: 447

MensagemEnviada: Ter Fev 22, 2011 4:32 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
bruno.ti
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 14 de Fevereiro de 2011
Mensagens: 304

MensagemEnviada: Ter Fev 22, 2011 4:54 pm    Assunto: Responder com Citação

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! Smile

[]s,
Bruno
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rafmattos
Colaborador
Colaborador


Registrado: Quinta-Feira, 11 de Fevereiro de 2010
Mensagens: 3416
Localização: Campo Grande/MS

MensagemEnviada: Ter Fev 22, 2011 5:01 pm    Assunto: Responder com Citação

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! Smile

[]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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Visitar a homepage do Usuário MSN Messenger
Lane1902
Experiente
Experiente


Registrado: Quinta-Feira, 15 de Janeiro de 2004
Mensagens: 447

MensagemEnviada: Qua Fev 23, 2011 12:47 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Lane1902
Experiente
Experiente


Registrado: Quinta-Feira, 15 de Janeiro de 2004
Mensagens: 447

MensagemEnviada: Qua Fev 23, 2011 12:47 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB