l10n (Localization) e i18n (internationalization) no Java

O Rafael Steil escreveu, no tópico “Tradução botão JOptionPane” (http://www.guj.com.br/forum/viewtopic.php?p=5289#5289) que o Java não tem suporte à Localização.

Como pode ser isso? E a classe java.util.Locale e os ResourceBundles? Eu nunca usei pra valer, mas eu sei que a JVM da sun determina os defaults de formatos de data, por exemplo, baseados no Locale do seu Unix!!

Será que eu entendi errado??

Abraços,
Tiago.

Me expressei mal. O que eu queria dizer eh que, para a situacao em questao ( componentes Swing com mensagens com base no SO onde esta sendo rodado ), isso ainda nao eh suportado.

Rafael

Acho que o que ele quis dizer é sobre ser automático. Para trocar o texto de um botão, tem que implementar na mão.
Em programas escritos em outras linguagens dá pra ver claramente que mensagens que pedem a confirmação de um Sim / Não vem com o texto traduzido nos botões caso o sistema operacional seja em português.
Mas realmente Java funciona muito bem para internacionalização. Aqui mesmo onde eu trabalho tem um projeto relativamente grande a respeito, e eles conseguem internacionalizar sem maiores problemas, porque o Java já é bem preparado para isso (até mesmo nos pequenos detalhes tipo usar unicode ao invés de ascii)

DEUS SEJA LOUVADO!

Uma vez eu mudei o idioma do meu rwindows para Alemao. Os botoes do JOptionPane traduziram. Mas quando eu mudo para portugues, ele fica em ingles…

hehe! maneiro!

Valeu, Adler!!

Se vc colocar um arquivo Properties acessível como SystemResource, o Swing faz a localização automaticamente pra vc!! :wink:

Tudo de bom!!

Fala galera…

Vcs estão fazendo um pouco de confusão entre Localization e i18n.

Mas sobre o assunto dos botões, tem um jeito de fazer sem ter que depeder de arquivos do jdk.

Aqui vai o exemplo para trocar os botões dos JOptionPane :

		UIManager.put("OptionPane.yesButtonText", langBundle.getString("optionpane_yesButtonText"));
		UIManager.put("OptionPane.noButtonText", langBundle.getString("optionpane_noButtonText"));
		UIManager.put("OptionPane.cancelButtonText",
		    langBundle.getString("optionpane_cancelButtonText"));
		UIManager.put("OptionPane.okButtonText", langBundle.getString("optionpane_okButtonText"));

Notem que langBundle é um ResourceBundle que usa um arquivo “propertiies”.

[]'s

Marco