2011-11-30 22 views
5

Java I18nの機能は素晴らしいです。サポートされていないJava I18nロケール

Locale ar = new Locale("ar","SA"); 
System.out.println(ar.getDisplayName(ar)); 

出力:العربية (السعودية)

しかしKazakh言語、言語名は、Javaの仕様に書かれたようEnlish(標準)で同じLANGが出力に表示されるようにロケールをサポートしていないために は完璧に動作しlocalesサポートされています。

Locale locale = new Locale("kk","KZ"); 
System.out.println(kk.getDisplayLanguage(kk)); 

出力:Қазақша (Қазақстан)Kazakh (Kazakhstan)

私はこの問題を解決しようとしている、最後のコードは次のように出力しています。

誰もが解決策を知っていますか?

どれ推測(またはJava SE開発者に連絡する方法、またはアルゴリズムを知っている人との)私は答えとして注意されます。)

ありがとうございます!

答えて

1

Windowsで実行すると仮定すると、OSの地域設定でロケールを変更する必要があります。 thisリンクを参照してください。 (2000年にはカザフが勝つと勝つと7になるが、リストには登場しない...)。 Linuxではlocaledef utilityでロケールを設定できます。

Good Luck!

+0

決して遅くない^^ – erko

2

最も明白な解決策は、言語と国のプロパティの値に基づいてロケールを外部化し、ListResourceBundleインスタンスに配置することです。これが多くの作業のように見える場合、それは... チェックアウトの価値のある他の解決策はICUを使用しています。
ロケールの表示名は直接表示されませんが、ロケールに基づいてULocaleオブジェクトを作成することができます。
ICUトリックがうまくいかない場合は、おそらくCLDR言語リストに行き、翻訳を自分で提供することを余儀なくされるでしょう。 BTW。セルビアンはまったく同じ問題を抱えていましたが、JDK7用に修正したかどうかわかりません...

関連する問題