rc_Translate
O objetivo é oferecer uma forma simples de efetuar tradução em tempo de execução a sua aplicação.
IMPORTANTE:
Este recurso está funcional mas em aprimoramento.
Com sua ajuda , testando em seu projeto, poderemos amadurecer e por em produção.
É um tema muito complexo.
Não posso garantir que ficará auto suficiente, mas estou tentando deixá-lo o mais funcional possível para que você não tenha um custo adicional com outros componentes.
Como usar
No evento UniFormReady( para formulários ) e uniFrameReady( para frames ) adicione a função:
rc_Translate( Self, nil , '' , mm.CONFIG_LANGUAGE );
Veja exemplos no "frmLogin", "mainform", "frmBaseCad" ...
A função vai detectar objetos que tenham sido 'apontados' como "traduzíveis", ou seja, cada objeto poderá ter em sua propriedade "hint" a indicação que pode ser traduzido, então, o RadCORE filtra as propriedades que são "textos"( caption, text, empty text etc ).
Ex: frmLogin
1. Veja o "hint" do componente "labWelcome", ele contém: [[translate:]].
Isso avisa que a propriedade CAPTION poderá ser traduzida.
2. Veja o "hint" do componente "edUserName", ele contém: [[translate:except-text]].
Isso avisa que a propriedade TEXT não poderá ser traduzida. Isso por quê ela recebe o que o usuário digita, logo, não deve ser traduzida.
O RadCORE irá adicionar o respectivo formulário nas pastas de tradução:
Após acessar o menu principal do RadCORE, acesse as configurações para manipular os objetos e suas traduções:
Clicando no combobox ao lado, você seleciona qual idioma deseja utilizar por padrão na aplicação.
Clicando em EDIT você irá fazer as configurações de tradução.
Traduzindo
No combobox "form list" selecione cada formulário que você adicionou a função "rc_translate" e adicionou o "[[translate:]]" em seus objetos traduzíveis.
Em seguida a lista de propriedades( agrupadas ) e seus objetos são exibidos.
Clique na coluna "CONTENT" que seu respectivo conteúdo será exibido no MEMO na parte inferior da tela.
Adicione a tradução e clique em "SAVE."
Repita o processo com cada ítem com cada linguagem definida.
Definindo as linguagens
Estou tentando seguir o padrão do unigui.
ARRAY_LANGUAGES guarda a lista atual de linguagens suportadas.
ARRAY_LANGUAGES_FLAGS guarda a respectiva abreviatura.
Ao selecionar uma linguagem( ARRAY_LANGUAGES ) o SERVERMODULE é alterado( ExtLOCALE ).
Ajuste de acordo com sua necessidade.
Definindo MENSAGENS / MENUS
Ao selecionar uma linguagem, a aplicação é reiniciada e as "globais" de controle são referenciadas na função rc_ConfigTranslateMessages.
Leia essa função para criar novas variáveis de uso em sua aplicação.
> Algumas telas específicas podem receber o mesmo padrão de definição da tradução, mas com variáveis locais.
> A escolha de usar GLOBAIS foi para dar mais performance e evitar o carregameno de arquivos externos.
Exemplos de uso:
O RadCORE traz alguns exemplos onde podemos deixar as opções do MENU PRINCIPAL traduzíveis.
Main.pas
mm.MNU_OTHERS_OPEN_TICKET
Dessa forma a comparação da string será efetuada corretamente independente do idioma.( veja abaixo ):
DM_RC
mm.MSG_CONFIRM_DELETE
Há muito o que fazer ainda e espero a colaboração de todos, pois, uso o google tradutor e nem sempre a tradução é fiel.
Sei que são muitos idiomas e não consegui adequar todos nesta versão, mas, demonstrei como é simples adicionar novos.
IMPORTANTE:
Na unit "mkm_translate" existem 2 pontos em que é feita a atualização do "MemIni". Leia o comentário acima.
Created with the Personal Edition of HelpNDoc: Free HTML Help documentation generator