Traduzir CAPTION dos objetos
Moderador: Moderadores
- Luciano Bonfim
- 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
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
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
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Traduzir CAPTION dos objetos
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:
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.
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)> ]
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
xHarbour.org + Hwgui + PostgreSql
- Luciano Bonfim
- 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
boa idéia essa sua, o único problema é este lance da atualizaçäo mesmo.. vou pensar nisso...
Muito Obrigado
Muito Obrigado
Muito Obrigado,
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Re: Traduzir CAPTION dos objetos
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
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
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
- Luciano Bonfim
- 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
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)
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
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Re: Traduzir CAPTION dos objetos
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 )
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
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
- Luciano Bonfim
- 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
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?
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
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
- Luciano Bonfim
- 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
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
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
Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Re: Traduzir CAPTION dos objetos
testa a classe
IF __ObjHasMsg(oDlg:aControls[ i ],"CAPTION") .AND. oDlg:aControls[ i ]:classname $ "HSTATICHBUTTONHCHECKBUTTONRADIOBUTTON" // ETC
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
Desenvolvedor VFP + XHARBOUR + HWGUI
lfbasso@gmail.com
http://www.engersoft.com.br
