2017-08-09 10 views
0

Javaリソースバンドルを使用してアプリケーションをローカライズし、コードからリソースバンドルに従ってローカライズされたメッセージを返す関数を作成しました。コードからJavaリソースバンドルに新しいエントリを追加

public String getDescription(String code, ResourceBundle resBundle){ 
    String returnValue = null; 
    try{ 
     returnValue=resBundle.getString(code); 
    }catch(Exception ex){ 
     returnValue = null; 
    } 
} 

しかし、私は、渡されたコードが存在しない場合には、リソース・バンドルにエントリを追加することが可能である場合のようなものかを知りたい:

if(!resBundle.containsKey(code)){ 
    //This next line is pseudo-code... it is not valid at all 
    resBundle.addEntry(code, "xyz"); 
} 

任意の助けを?

+0

'ResourceBundles' aは実際にコードから変更するようには設計されていません。それらの背後にあるアイデアは、ローカライズされた値に静的なコードマップを提供することです。リソースバンドルにエントリを追加する理由を説明できますか?おそらく、あなたの問題を解決するための別のアプローチがあります。 –

答えて

0

あなたは、キーと値を持つMapのようなプロパティクラス機能するので、StreamクラスにするResourceBundleの鍵を変換することによってPropertiesクラスを使用し、それを移植しようとすることができます。たとえば:あなたはそれが指定されたキーが見つからない場合には第二引数で指定した値を返しますPropertiesgetProperty()方法を使用することができます

Properties props = new Properties(); 
    resBundle.keySet().stream().forEach(k -> props.put(k, resBundle.getString(k))); 

をしてから(あなたのケースに鍵がcodeです):

returnValue=props.getProperty(code,"xyz"); 
+0

私はあなたの解決策を理解していません...それは、リソースバンドルをキーで更新しません。私が必要とするのは、新しいキーを追加するリソースバンドルを更新することです。 –

+0

私はあなたがキーを見つけられなかった場合に実行時にデフォルト値を使うことができると考えました。ちょっと私はあなたが ' ResourceBundle自体は、読み込み専用です。しかし、前述のように、 'Properties'クラスを通して行うことができます:https://stackoverflow.com/questions/7571045/java-properties-add-new-keys-to-properties-file-in-run-time –

+0

ありがとうElton ...私は、どのエントリがリソースにないかを追跡する方法を欲しかったので、定期的に更新する必要があったエントリを確認することができました。 私が行ったことは、あなたのメソッドで、パラレルファイルを持っていて、見つからないエントリを保存したということです。 –

関連する問題