7

インターネットからのサンプル ttf ファイルを使用して、devanagari/hindi の Java で i18n を使用しようとしています。

リソース バンドル エントリをロードし、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
4

4 に答える 4

0

このhttps://stackoverflow.com/a/6995374/466250を試してみてください。 元の質問では、プロパティ ファイルはデフォルトで ISO-8859-1 であると言われています。

于 2012-09-24T18:35:48.707 に答える
0

SymbolText アプレットを実行してみて、900 の範囲を選択し、使用しようとしているフォントを選択します。Devanagari MT などの標準フォントを選択して結果を比較します。フォントのバージョンと JVM 上の TrueType 実装の間に互換性がない可能性があります。

getFontName()、getNumGlyphs()、canDisplay()、および canDisplayUpTo() を呼び出して、読み込んだフォントが期待どおりであることを確認してください。

Eclipse がデーバナーガリーをレンダリングできることがわかっているので、必要に応じて、Eclipse が使用するフォントを識別して使用するようにしてください。

于 2012-10-06T07:18:24.720 に答える
0

Unicode のラベルにフォントを設定しないでください。デフォルトのフォントで問題なくレンダリングできます。

于 2012-09-25T04:54:40.910 に答える