2017-11-04 4 views
1

プログラムでI18Nを使用しようとしていますが、正しく動作しません。コンソールにドイツ語のシンボルは表示されず、「?」と表示されます。ここでJavaの国際化

は私のコードです:

import java.util.Locale; 
import java.util.ResourceBundle; 

public class LocaleDemo { 

public static void main(String[] args) { 

      Locale l = new Locale("ge", "GE"); 
      ResourceBundle r = ResourceBundle.getBundle("Bundle_ge"); 
      displayValues(r); 
     } 

public static void displayValues(ResourceBundle bundle) { 
    System.out.println("hello message:" + bundle.getString("wish")); 
} 
} 

ファイルBundle_ge.propertiesは、このテキストを持っていますwish=großer

そして、ここではその結果です:

enter image description here

私のミスですか?前もって感謝します。

+0

コードページとエンコーディングに関するいくつかの調査を行いたいとします。 – GhostCat

+0

あなたの問題とは関係ありませんが、ロケールを作成していますが、使用していない状態で、Bundleをロードする代わりにBundle_geをロードし、getBundleメソッドにロケールに基づいて適切なファイルをロードさせます。 'ResourceBundle.getBundle(" Bundle "、l)' –

+0

申し訳ありませんが、なぜ私は 'Bundle_ge'の代わりに' Bundle'を使うべきか理解できません。私のプロパティファイルにはそのようなタイトルがあります: 'Bundle_ge.properties'また、さまざまな言語のプロパティファイルがたくさんあるかもしれません。 – LuckyProgrammer

答えて

2

メッセージバンドルはISO-8859-1エンコーディングで読み込まれます。 ISO-8859-1に格納する必要があります。それらが確実であることを確認してください。おそらくあなたのものはUTF-8として保存されていますか?

また、特殊文字にUnicodeコードを使用してください。 は、ドイツ語のウムラウトとSZの場合:

ä = \u00e4 
Ä = \u00c4 
ö = \u00f6 
Ö =\u00d6 
ü = \u00fc 
Ü = \u00dc 
ß = \u00df 

自動的にリソースバンドルを変換するツールがあります。私。 IntelliJのリソースバンドルエディターがそれを行います。

これが問題を解決するかどうかを確認してください。

+0

私のプログラムでは奇妙だがロシアのシンボルが表示されますが、ドイツ語では表示されません – LuckyProgrammer