Existe algum padrão de projeto ou metodologia para poder, usando as facildiades de internacionalização do Java, mudar o idioma de uma aplicação em tempo real?
Por exemplo, eu quero colocar um item de menu onde o usuário poderia escolher os idiomas disponíveis e aí a aplicação seria toda traduzida na hora. É possível fazer isso? Alguém tem alguma dica?
Ola, seu sistema é web ou desktop? Se for web, usando struts por exemplo, isso é tranquilamente possível.
Q
qwerty
É desktop mesmo, com Swing.
C
caiozanchetti
Cara, da uma olhada no spring, pq houvi comentários que ele tem um mvc para apps desktop, swing. Ai vc obterá o que precisa.
C
carneiro
qwerty,
Não sei se tem alguma coisa que facilite isso para Swing. De qualquer forma, o procedimento é simples. Basta você manter os textos em arquivos de propriedades e alterar o arquivo de acordo com um click do usuário.
A
Anderson_Schmidt
carneiro:
qwerty,
Não sei se tem alguma coisa que facilite isso para Swing. De qualquer forma, o procedimento é simples. Basta você manter os textos em arquivos de propriedades e alterar o arquivo de acordo com um click do usuário.
Concordo, e mais, procure por i18n.
Flws!
Schmidt
M
marcelo_mococa
o mvc dele é só para web.
Q
qwerty
schmidt:
carneiro:
qwerty,
Não sei se tem alguma coisa que facilite isso para Swing. De qualquer forma, o procedimento é simples. Basta você manter os textos em arquivos de propriedades e alterar o arquivo de acordo com um click do usuário.
Concordo, e mais, procure por i18n.
Flws!
Schmidt
Eu já andei dando uma olhada no i18n e conheço o esquema de armazenamento em arquivos de propriedades. Mas o problema é que quero fazer a tradução da aplicação em tempo real, ou seja, assim que o usuário selecionar a nova linguagem toda a aplicação (janelas já construídas…) serão traduzidas. Usando o esquema dos properties com ResourceBundles apenas as novas janelas e mensagens seriam alteradas, não?
Eu estou interssado em algo que me facilite o trabalho de recarregar/alterar os textos do componentes que já estão sendo exibidos na tela.
Vou dar uma procurada por Spring.
A
Anderson_Schmidt
qwerty,
Yep, é isso mesmo.
Não posso falar por apps swing. = /
Em projetos web, eu uso isso com JSF, fica muito feroz. De acordo com o idioma do navegador (hj já pre-configurado de acordo com o idioma do local onde se está fazendo o acesso), o site já faz um load no arquivo .properties específico daquele idioma. Dá até pra ficar brincando, trocar o idioma do Firefox e dar F5!
Flws!
Schmidt
C
carneiro
qwerty,
Bem, basta você setar novamente os valores… a classe JLabel, por exemplo, tem o setText(String text).
Ou redesenhar a tela, talvez funcione.
N
neohacker
eu fiz ja isso numa aplicação pra facul…utilizei com arquivos properties e tive o ms problema, mas consegui contornalo, mas me diga vc esta trabalhando em cima do Eclipse?? mais uma pergunta vc utiliza métodos gets para criar os componentes??
Q
qwerty
Estou trabalhando em cima do Eclipse sim. Como ainda não sei direito como organizar o projeto pra atender essa necessidade ainda não comecei a codificar, então não estou usando métodos gets para criar os componentes.
N
neohacker
então não sei se vão considerar isso como POG mas…
eu uso dessa forma
private JLabel getLblText() {
if (lblText == null) {
lblFunction = new JLabel();
} // if
lblText .setText("Text:"); // no texto do componente vc usará o properties
return lblFunction;
}
este modo funciona mais ou menos assim
quando vc for adicionar este JLabel em algum lugar vc utiliza o método get, pois se vc estiver pela primeira vez chamando o label ele o criará,
se for no momento da troca de idioma ele simplesmente apenas executará o setText com o novo idioma.
bem basicamente seria isso, se isso te ajudar blz, se não continua postando que agente arruma outro jeito.
Obs: como citei não sei se isso é considerado POG, mas ta valendo 8)
Q
qwerty
Neohacker valeu, eu estava pensando em algo parecido com o que você postou.
Mas como são diversos componentes, (internal frames, com vários labels, buttons, etc…) a grande dificuldade seria como a partir de um um único ponto (um item de menu) sair disparanda/chamando novamente o getLabelText de cada um desses componentes.
Estou pensando então em dotar cada “componente principal” de inteligencia para reescrever os seus textos e de seus subcomponentes. Aí em uma especie de camada de gerencia do idioma eu iria armazenando esses componentes em um pool de componentes. Quando o usuario clicar no botao para trocar a linguagem os componentes do pool vao sendo recuperados um a um e solicitados a se reescreverem.
Acho que vou acabar fazendo assim.
N
neohacker
então qwerty no meu caso acabou acontecendo um efeito cascata q deu td certo (tem alguns BUGs mas num eh problema ) assim
por exemplo o meu começa num JFrame com setTitle, depois ele começa a criar os menus então por exemplo getMnFile() então ele vai mudar de “File” para “Arquivo”, depois ele vai chamar o getMniExit() logo ele mudará o setText para “Sair”… e assim por diante faiz certinho kra…
bem como minha explicação não foi muito boa…(eu msm percebi isso) vou tentar colocar alguns códigos aki de exemplos
espero q vc tenha entendido a lógica, pode ser q se vc precisar alterar isso fique complicado, mas se vc ja ir desenvolvendo assim vc vai ver q acaba ficando mtu fácil, bem eu achei né…
mas dai vc ver o q vai ficar melhor pra vc…