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).
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 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.
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.