I18N Chinese

Pessoal.
To com uma app swing que deve ter i18n com chinês. Só que estou com alguns problemas em como guardar as informações que virão da china.
O teste que consegui fazer funcionar foi esse:

UIDefaults defaults = UIManager.getDefaults();
defaults.put("Label.font", new Font("Bitstream Cyberbit", Font.PLAIN,12));

JLabel l = new JLabel();		
l.setText("Hello world! - \u7535\u8111\u4F60\u597D\uFF01");

JFrame f = new JFrame();
f.setContentPane(l);
f.setBounds(100, 50, 500, 300);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);

Ou seja, mudo a fonte default para uma que sabe mostrar chinês e no label eu uso o código dos caracteres. Mas acontece que a chinesada não vai traduzir os resource bundles de .properties colocando os códigos, mas sim o caracteres chinês. Pesquisando vi que os resource bundles não pode ter nada além de ‘Unicode-encoded characters’ como diz aqui http://java.sun.com/javase/6/docs/technotes/tools/windows/native2ascii.html

Ok, então eu envio o .properties com as chave=valor pro chinês, ele traduz os valores e eu uso o native2ascii.
Mas não tá rolando esse native2ascii. Ele está editando a chave tb e não somente o valor, e mesmo separando e deixando um arquivo só com os valores, ele converte, mas na hora de mostrar na tela não mostra direito.

Agora não sei se é a fonte que não tem esses caracteres (pode isso?) ou esse native2ascii que não está convertendo direito (tentei com 2 chinese enconding, big5 e gb2312).

ae pessoal? alguma experiência?

Encontrei esse link:
http://www.coderanch.com/t/462173/Java-General/java/Please-help-with-Chinese-encoding#2063332

Ou seja, essa história de native2ascii e properties só com ‘Unicode-encoded characters’ é só pra versões antigas.
Testei com o java6 e basta carregar o .properties com UTF-8. Funcionou, estou persistindo em chinês no .properties.

A questão em aberto agora é se preciso carregar fontes chinesas como defaults nos componentes swing, como fiz no exemplo, ou se num SO com fontes chinesas habilitadas, o java é esperto o suficiente para usar um font chinese.

Não é por nada não, mas seria interessante você arranjar uma cópia do Windows (ou do SO que o chinês estiver usando) em chinês para você testar.
Não sei se o fonte “Dialog”, que é aquele padrão horrível do Java, em um SO em chinês use automaticamente o fonte default do seu SO.

Pois é, conseguirei um, mas só amanhã! :wink:

Pois bem, testei numa máquina com chinese habilitado e descobri que o java resolve sim a fonte numa máquina com fontes chinese, mas isso depende do Look and Feel.
Os laf do jdk funcionam, como o metal por exemplo, já o substance e o jgoodies looks (esse q usamos) não! Para esses é preciso escolher, para cada font, uma chinese font.
Segue uma figura.

Hum… é porque o LAF Metal usa por default a pseudo-fonte Dialog (que deve ser mapeada para alguma fonte chinesa), enquanto no caso do Substance e JGoodies Looks provavelmente você vai ter de checar que fonte eles acham melhor. Por exemplo, não sei se eles usam a SimHei, SimSun ou PMingLiu.

http://www.pinyinjoe.com/pinyin/pinyin_XPfonts.htm

Acho que é a PMingLiU, segundo o fontconfig.properties.
Instalei numa máquina essa fonte (e tb todas as fontes que o .properties referencia) e testei numa máquina com chinese e nesses laf não rolou.

Vou fazer um extensão no laf mesmo e definir essas fontes, dai funciona.