我正在尝试使用i18n在
java中使用来自互联网的示例ttf文件的devanagari / hindi.
我能够加载资源包条目,并加载ttf和设置字体,但它不会根据需要呈现jlabel.它显示了代替字符的块.如果我在eclipse中调试,我可以将鼠标悬停在unicode变量上,甚至可以渲染devanagari.下面是代码和资源包供参考.
package i18n; import java.awt.Font; import java.awt.GridLayout; import java.io.InputStream; import java.util.Locale; import java.util.ResourceBundle; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class MyNumbers extends JFrame { private ResourceBundle rb; private Font devanagariFont; public MyNumbers (String language,String fontFile) { loadResourceBundle(language); loadFont(fontFile); display(); } private void display() { String unicode = null; JPanel labels = new JPanel(new GridLayout(0,2)); JLabel uni = null; for(int i=0; i<=10; i++) { unicode = rb.getString("" +i); labels.add(new JLabel("" + i)); labels.add(uni = new JLabel(unicode)); uni.setFont(devanagariFont); } getContentPane().add(labels); setDefaultCloSEOperation(DISPOSE_ON_CLOSE); pack(); setVisible(true); } private void loadFont(String fontFile) { try { InputStream input = getClass().getResourceAsStream(fontFile); Font b = Font.createFont(Font.TRUETYPE_FONT,input); devanagariFont = b.deriveFont(Font.PLAIN,11); } catch(Exception e) { e.printStackTrace(); } } private void loadResourceBundle(String language) { String base = getClass().getName() + "rb"; rb = ResourceBundle.getBundle(base,new Locale(language)); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new MyNumbers("hi","Devnew.ttf"); } }
这是我创建的MyNumbersrb_hi.properties的资源包.
Default properties in Devnagari 0=\u0915\u0916\u0917: 1=\u090f\u0915: 2=\u0926\u094b: 3=\u0924\u0940\u0907: 4=\u091a\u093e\u0930: 5=\u092a\u093e\u091a: 6=\u091b\u0947: 7=\u0938\u093e\u0924: 8=\u0906\u093e\u0920: 9=\u0928\u094c: 10=\u0926\u0938: random=Random title=Key in numbers to match the words