Página 1 de 1
Traduzir CAPTION dos objetos
Enviado: 28 Mar 2009 20:52
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
Re: Traduzir CAPTION dos objetos
Enviado: 29 Mar 2009 17:05
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.
Re: Traduzir CAPTION dos objetos
Enviado: 29 Mar 2009 19:45
por Luciano Bonfim
boa idéia essa sua, o único problema é este lance da atualizaçäo mesmo.. vou pensar nisso...
Muito Obrigado
Re: Traduzir CAPTION dos objetos
Enviado: 29 Mar 2009 22:06
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
Re: Traduzir CAPTION dos objetos
Enviado: 30 Mar 2009 10:01
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)
Re: Traduzir CAPTION dos objetos
Enviado: 30 Mar 2009 10:35
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 )
Re: Traduzir CAPTION dos objetos
Enviado: 30 Mar 2009 17:46
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?
Re: Traduzir CAPTION dos objetos
Enviado: 30 Mar 2009 19:06
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
Re: Traduzir CAPTION dos objetos
Enviado: 30 Mar 2009 19:52
por esbasso
testa a classe
IF __ObjHasMsg(oDlg:aControls[ i ],"CAPTION") .AND. oDlg:aControls[ i ]:classname $ "HSTATICHBUTTONHCHECKBUTTONRADIOBUTTON" // ETC