2016-12-13 10 views
0

Javaリソースバンドルのデフォルト動作を変更する必要があります。 デフォルトの動作では、キーが現在の言語で利用できない場合は、デフォルトの言語ファイルを使用します。翻訳されていない文字列のデフォルトをResourceBundleに設定する方法は?

私のすべてのressourceBundlesはResourceBundle.getBundle(...)でロードされており、これを変更することはできません。

デフォルトの言語値の代わりにキーを使用するには、デフォルトを変更する必要があります。 例:mb.propertiesにはhello.string = hello worldが含まれていますが、現在のロケールはhello.stringというキーを含まないファイルmb_de.propertiesを使用します。 getString("hello.string")を呼び出すと、「hello world」ではなく「hello.string」が返されます。

私はこの機能を実装できるカスタムリソースバンドルラッパーの作成方法を教えてください。

+0

あなたはデフォルト値をどのバンドルの定義された値ではない? – VGR

+0

はい、それは私が達成したいことです。 – gorootde

+0

あなたが直接変更する権限がないResourceBundle.getBundle呼び出しの動作を変更しようとしていますか? – VGR

答えて

0

あなたはresoursebundleをこのように、その後

public class CustomResourceBundle_en extends ResourceBundle { 


    public CustomResourceBundle_en() { 
     setParent(ResourceBundle.getBundle("messages_en")); 
    } 

    @Override 
    protected Object handleGetObject(String key) { 
     if (parent.keySet().contains(key)) { 
      return parent.getObject(key); 
     } else { 
      return key; 
     } 

    } 

    @Override 
    public Enumeration getKeys() { 
     return parent.getKeys(); 
    } 

} 

他には例えば専用のロケールのため

public class CustomResourceBundle_it extends CustomResourceBundle_en { 
    public CustomResourceBundle_it() { 
     setParent(ResourceBundle.getBundle("messages_it")); 
    } 
} 

は、2つのプロパティを作成したファイルを拡張することができ message_en.properties

hello.world=Hello World 

message_it.propertiesは、それ以外の場合は

ResourceBundle messages = ResourceBundle.getBundle("CustomResourceBundle", Locale.ITALIAN); 
    System.out.println(messages.getString("hello.world")); 

ロケールでそれがキーこんにちはが印刷されます、それはこんにちはを出力します空

を離れた後、このよう

ResourceBundle messages = ResourceBundle.getBundle("CustomResourceBundle", Locale.ENGLISH); 
System.out.println(messages.getString("hello.world")); 

それを使用しています。世界

関連する問題