0

プロパティファイルのキー値を次のように再利用できますか?

key1=hello
key2=#{key1} world!

ありがとう、


更新:以下は、キー値を再利用可能にするResourceBundleをオーバーライドするコードです。

public class Messages extends ResourceBundle {

    public Messages() {
       setParent(getBundle("resources.test", FacesContext.getCurrentInstance().getViewRoot().getLocale()));
           }

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


    @Override
    protected Object handleGetObject(String key) {

        try {
               return replaceKey(parent, key, 3);
        } catch (Exception e) {        }
    try { return parent.getObject(key);
    } catch (MissingResourceException e) {
        return key;
    }
    catch (Exception e) {
        return key;
    }
}
    private Pattern Pattern = Pattern.compile("\\$\\{([\\w\\.\\-]+)\\}");

    private String replaceKey(ResourceBundle bundle, String key, int iteration) {
    String message = bundle.getString(key);
    if (message != null) {
      StringBuffer sb = new StringBuffer();
      Matcher matcher = Pattern.matcher(message);
      while (matcher.find() && iteration > 0) {
        // the magic
        matcher.appendReplacement(sb, replaceKey(bundle, matcher.group(1), iteration - 1));
      }
      matcher.appendTail(sb);
      return sb.toString();
    }
    return null;
  }

}

参照については、以下を参照してください

基本的な実装

操作

4

1 に答える 1

1

これは、取得したバンドル値に特定の構文が含まれていないかどうかをチェックするためにメソッドをResourceBundleオーバーライドするカスタムでのみ可能であり、それに応じて別のバンドル値に置き換える必要があります。handleGetObject()

最後に、ResourceBundle代わりに<resource-bundle>またはにカスタムを登録し<f:loadBundle>ます。

于 2012-07-27T14:34:02.887 に答える