Traduzir CAPTION dos objetos

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Traduzir CAPTION dos objetos

Mensagem por Luciano Bonfim »

Caros,

vou colocar meu sistema para ser multi-idiomas, ou seja, vou ter que traduzir todas as palavras e expressöes do meu sistema. Primeiro pensei em criar um funcäo chamada translate que receberia como parametro a palavra em português iria até uma tabela traduziria e retornaria a palavra traduzida, achei uma ótima soluçäo mas para fazer iss teria que entrar em todos os meus fontes e alterar onde tiver alguma coisa escrita colocar essa funçäo antes,

Por exemplo: @ SAY "Codigo" para @ SAY translate("Codigo")

vai dar muito trabalho, ai pensei em colocar uma funcäo no ON INIT dos meus forms que iria varrer todos os objetos SAY, BUTTON, etc... e pegar seus CAPTIONs traduzir e modificá-los automaticamente.

Achei uma boa idéia, mas näo sei como varrer todos os objetos de um FORM

Como fazer isso?

Muito Obrigado
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Traduzir CAPTION dos objetos

Mensagem por sygecom »

Olá Luciano,
Não seria melhor você colocar essa sua função direto na 'guilib.ch', a final tudo vai passar por ali, quando for passar você traduz e retorna já linguagem que você quer. Ficaria mais ou menos assim:

Código: Selecionar todos

#xcommand @ <x>,<y> SAY [ <oSay> CAPTION ] <caption> ;
             [ OF <oWnd> ]              ;
             [ ID <nId> ]               ;
             [ SIZE <width>, <height> ] ;
             [ COLOR <color> ]          ;
             [ BACKCOLOR <bcolor> ]     ;
             [<lTransp: TRANSPARENT>]   ;
             [ ON INIT <bInit> ]        ;
             [ ON SIZE <bSize> ]        ;
             [ ON PAINT <bDraw> ]       ;
             [ ON CLICK <bClick> ]      ;
             [ ON DBLCLICK <bDblClick> ];
             [[ON OTHER MESSAGES <bOther>][ON OTHERMESSAGES <bOther>]] ;
             [ STYLE <nStyle> ]         ;
             [ FONT <oFont> ]           ;
             [ TOOLTIP <ctoolt> ]       ;
          => ;
          [<oSay> := ] HStatic():New( <oWnd>,<nId>,<nStyle>,<x>,<y>,<width>, ;
             <height>,translate(<caption>),<oFont>,<bInit>,<bSize>,<bDraw>,<ctoolt>, ;  // aqui sua função
             <color>,<bcolor>,<.lTransp.>,<bClick>,<bDblClick>,<bOther> );;
          [ <oSay>:name := <(oSay)> ]
E faria claro em todas as outras como ButtonEx, Radio,ChwckBox e etc...
Unico problema que quando houver alterações na CVS dessa GUILIB.CH, você vai ter que alterar no seu também.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Re: Traduzir CAPTION dos objetos

Mensagem por Luciano Bonfim »

boa idéia essa sua, o único problema é este lance da atualizaçäo mesmo.. vou pensar nisso...

Muito Obrigado
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Traduzir CAPTION dos objetos

Mensagem por esbasso »

Veja se isso te serve

FUNCTION TranslateCaption( oDlg )
Local nlen , i
nlen := LEN(oDlg:aControls)
FOR i = 1 to nLen
IF __ObjHasMsg(oDlg:aControls[ i ],"CAPTION")
oDlg:aControls[ i ]:caption := xTranslate( oDlg:aControls[ i ]:caption )
ENDIF
IF LEN(oDlg:aControls[ i ]:aControls) > 0
TranslateCaption(oDlg:aControls[ i ])
ENDIF
NEXT
RETURN .T.

exemplo

INIT WINDOW oWin MDICHILD TITLE "Database" ;
AT 183,138 SIZE 575,368 ;
FONT HFont():Add( 'Verdana',0,-13,400,,,) ;
STYLE WS_CHILD+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZEBOX+WS_SIZEBOX;
ON INIT {|oDlg| TranslateCaption( oDlg ) }

FUNCTION xTranslate(caption)
IF caption != Nil
return upper( caption )
endif
return caption
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Re: Traduzir CAPTION dos objetos

Mensagem por Luciano Bonfim »

Obrigado Basso, mas deu erro no GET COMBOBOX

Error BASE/1082 Erro nos parƒmetros: -
Called from hcombo.prg->HCOMBOBOX:SETITEM(361)
Called from hcombo.prg->HCOMBOBOX:SETVALUE(382)
Called from hcwindow.prg->HCOMBOBOX:SETTEXTCLASS(297)
Called from hcwindow.prg->(b)HCUSTOMWINDOW:HCUSTOMWINDOW(51)
Called from ->HCOMBOBOX:_CAPTION(0)
Called from obras.prg->TRANSLATECAPTION(663)
Called from obras.prg->(b)FORMOBRAS(111)
Called from hdialog.prg->INITMODALDLG(296)
Called from hdialog.prg->(b)(_INITSTATICS00003)(0)
Called from hdialog.prg->HDIALOG:ONEVENT(218)
Called from ->HWG_DLGBOXINDIRECT(0)
Called from hdialog.prg->HDIALOG:ACTIVATE(173)
Called from obras.prg->FORMOBRAS(207)
Called from obras.prg->(b)OBRAS(39)
Called from hdialog.prg->DLGCOMMAND(450)
Called from hdialog.prg->(b)(_INITSTATICS00003)(0)
Called from hdialog.prg->HDIALOG:ONEVENT(218)
Called from ->HWG_DLGBOXINDIRECT(0)
Called from hdialog.prg->HDIALOG:ACTIVATE(173)
Called from obras.prg->OBRAS(47)
Called from generica.prg->EXECUTAHWGUI(293)
Called from toolbar.prg->NMENUCHECKER(76)
Called from toolbar.prg->NAFTERINKEY(51)
Called from principal.prg->(b)GERAMENU(533)
Called from ->INKEY(0)
Called from principal.prg->MAIN(137)
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Traduzir CAPTION dos objetos

Mensagem por esbasso »

deixei o erro de proposito

sem erro

FUNCTION TranslateCaption( oDlg )
Local nlen , i
nlen := LEN(oDlg:aControls)
FOR i = 1 to nLen
IF __ObjHasMsg(oDlg:aControls[ i ],"CAPTION")
IF oDlg:aControls[ i ]:caption != Nil
oDlg:aControls[ i ]:caption := xTranslate( oDlg:aControls[ i ]:caption )
ENDIF
ENDIF
IF LEN(oDlg:aControls[ i ]:aControls) > 0
TranslateCaption(oDlg:aControls[ i ])
ENDIF
NEXT
RETURN .T.

FUNCTION xTranslate(caption)
return upper( caption )
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Re: Traduzir CAPTION dos objetos

Mensagem por Luciano Bonfim »

funcionou que é uma beleza, agora basta só traduzir 7894 palavras e frases rsrsrsrsrs

uma curiosidade: pq a funçäo UPPER näo coloca as vogais acentuadas em maiúsculo?
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Re: Traduzir CAPTION dos objetos

Mensagem por Luciano Bonfim »

car basso,

juro que tentei de tudo aqui pra nao te perturbar mais, mas essa funcao ta alterando os caption dos GETS e dos GETS eu nao queria, qual a propriedade que uso pra testar se o objeto é GET ou nao... tentei type, name, entre outras da hdialog.prg mas nao obtive exito

Muito Obrigado
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
esbasso
Colaborador
Colaborador
Mensagens: 325
Registrado em: 24 Jan 2007 17:49
Localização: CHAPECO/SC

Re: Traduzir CAPTION dos objetos

Mensagem por esbasso »

testa a classe

IF __ObjHasMsg(oDlg:aControls[ i ],"CAPTION") .AND. oDlg:aControls[ i ]:classname $ "HSTATICHBUTTONHCHECKBUTTONRADIOBUTTON" // ETC
Luis Fernando Basso
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
Responder