Frage

Ist es möglich, mit Ressourcenbündel und Message das folgende Ergebnis zu haben?

  • wenn ich getBundle("message.07", "test") nennen "Group test"
  • bekommen
  • wenn ich getBundle("message.07", null) nennen "No group selected"
  • bekommen

Jedes Beispiel, das ich im Internet ist mit Planeten, mit Dateien auf der Festplatte und so weiter.

Ich brauche nur zu prüfen, ob ein Parameter null ( oder existiert nicht ) in dem Eigenschaften-Datei des Ressourcenbündels. Ich hoffe, ein spezielles Format für den Null-Parameter so etwas wie {0,choice,null#No group selected|notnull#Group {0}} zu finden.

Die Methode, die ich verwende, um die Pakete zu bekommen, ist:

public String getBundle(String key, Object... params) {
  try {
    String message = resourceBundle.getString(key);
    if (params.length == 0) {
      return message;
    } else {
      return MessageFormat.format(message, params);
    }
  } catch (Exception e) {
    return "???";
  }
}

Ich nenne diese Methode auch für andere Bundles, wie

  • getBundle("message.08", 1, 2) => "Page 1 of 2" (immer Parameter, keine Notwendigkeit für null zu überprüfen)
  • getBundle("message.09") => "Open file" (keine Parameter, keine Notwendigkeit für null zu überprüfen)

Was soll ich in meiner .properties-Datei für message.07 schreiben das Ergebnis zu haben, beschrieben?
Was ich jetzt habe, ist:

message.07=Group {0} 
message.08=Page {0} of {1}    # message with parameters where I always send them
message.09=Open file          # message without parameters
War es hilfreich?

Lösung

Ihre .properties Datei,

message.07=Group {0} 
message.08=Page {0} of {1}
message.09=Open file
message.null = No group selected

Und dann müssen Sie Ihren Code ändern, um eine explizite Kontrolle params für null zu setzen. Und wenn null dann können Sie so etwas wie resourceBundle.getString(NULL_MSG) tun. Wo NULL_MSG wird dies,

private static final String NULL_MSG = "message.null";

So, jetzt Ihre ursprüngliche Methode so etwas wie diese werden würde.

public String getBundle(String key, Object... params) {
  String message = null;
  try {
    if (params == null) {
      message = resourceBundle.getString(NULL_MSG);
    } else {
      message = MessageFormat.format(resourceBundle.getString(key), params);
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
  return message;
}

Der Aufruf meine Methode wie unten,

getBundle("message.07", "test") // returning 'Group test'
getBundle("message.07", null) // returning 'No group selected'
getBundle("message.08", 1, 2) // returning 'Page 1 of 2'
getBundle("message.08", null) // returning 'No group selected'
getBundle("message.09", new Object[0]) // returning 'Open file'
getBundle("message.09", null) // returning 'No group selected'

Nun sagen Sie mir, wo ist das Problem?

Andere Tipps

Ich werde empfehlen nicht versucht, das Bündel Funktionalität zu ändern (auch wenn Sie eine getBundle Methode haben sie einkapseln).

Sie einfach im Code tun:

getBundle(param == null? "message.07.null": "message.07", param)

oder ein anderes Verfahren machen:

getBundleOrNull("message.07", param, "message.07.null")

das tut

public String getBundleOrNull(String key, value, nullKey) {
   return getBundle(value == null? nullKey: key: value);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top