Devanagari i18n in java

I am trying to use i18n in java for devanagari / hindi using sample ttf files from the internet.

I can download resource package entries as well as download ttf and install the font, but it will not display jlabel as desired. It shows blocks instead of characters. If I'm debugging in eclipse, I can hover over the unicode variable, and it even displays devanagari. Below is the code and resource kit for reference.

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"); } } 

Here is the resource pack for MyNumbersrb_hi.properties created.

 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 
+7
source share
4 answers

Just donโ€™t put the font on the Unicode label, and the default font can make it look beautiful.

0
source

try it with this https://stackoverflow.com/a/16718/ ... since the original question says that the default property files are ISO-8859-1.

0
source

Try running the SymbolText applet, select the range 900, and select the font you are trying to use. Compare the results with a selection of a standard font such as Devanagari MT. There may be an incompatibility between your version of the font and the implementation of TrueType on your JVM.

Try calling getFontName (), getNumGlyphs (), canDisplay () and canDisplayUpTo () to check what font you downloaded is what you expect.

Since you know that Eclipse can display Devanagari, try defining and using the Eclipse font if necessary.

0
source

Download a resource using utf-8

Messages ResourceBundle = ResourceBundle.getBundle ("resources / MenuBarResources", locale, new UTF8Control ());

 public class UTF8Control extends Control { public ResourceBundle newBundle (String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IllegalAccessException, InstantiationException, IOException { // The below is a copy of the default implementation. String bundleName = toBundleName(baseName, locale); String resourceName = toResourceName(bundleName, "properties"); ResourceBundle bundle = null; InputStream stream = null; if (reload) { URL url = loader.getResource(resourceName); if (url != null) { URLConnection connection = url.openConnection(); if (connection != null) { connection.setUseCaches(false); stream = connection.getInputStream(); } } } else { stream = loader.getResourceAsStream(resourceName); } if (stream != null) { try { // Only this line is changed to make it to read properties files as UTF-8. bundle = new PropertyResourceBundle(new InputStreamReader(stream, "UTF-8")); } finally { stream.close(); } } return bundle; } } 
0
source

All Articles