Frage

Können Sie Folgendes tun mit einem Java Resource?

In der Eigenschaftendatei ...

example.dynamicresource=You currently have {0} accounts.

Zur Laufzeit ...

int accountAcount = 3;
bundle.get("example.dynamicresource",accountCount,param2,...);

ein Ergebnis geben

"Sie haben zur Zeit 3-Konten."

War es hilfreich?

Lösung

Nicht ohne die Verwendung von Message Klasse , wie zum Beispiel:

String pattern = bundle.getString("example.dynamicresource");
String message = MessageFormat.format(pattern, accountCount);

Andere Tipps

Auf ihrem eigenen, nicht ResourceBundle nicht Eigenschaft Platzhalter unterstützen. Die übliche Idee ist, den String Sie aus dem Bündel bekommen zu nehmen und es in eine MessageFormat kleben, und dann verwenden Sie Ihre parametrisierte Nachricht zu erhalten.

Wenn Sie mit JSP / JSTL , dann können Sie <fmt:message> und <fmt:param> verbinden, dies zu tun, was ResourceBundle und MessageFormat unter der Decke verwendet.

Wenn Sie geschehen, werden mit Frühling , dann hat es die ResourceBundleMessageSource, die a href <= "http://static.springsource.org/spring/docs/3.0.x/reference/html /beans.html#context-functionality-messagesource“rel =‚nofollow noreferrer‘> macht etwas ähnliches und kann überall in Ihrem Programm verwendet werden. Diese MessageSource Abstraktion (mit MessageSourceAccessor kombiniert) ist viel schöner zu benutzen als ResourceBundle.

Es gibt verschiedene Möglichkeiten, je nach Ansicht Technologie Sie verwenden. Wenn Sie "Plain Vanilla" Java (zB Swing) verwenden, dann verwenden MessageFormat API als beantwortet vor. Wenn Sie eine Webapplikation Framework verwenden (was wahr ist, wenn ich Ihre Frage Geschichte hier richtig beurteilen), dann hängt die Art und Weise auf der View-Technologie und / oder MVC-Framework Sie verwenden. Wenn es zum Beispiel "Plain Vanilla" JSP ist, dann können Sie JSTL fmt:message für diese.

<fmt:message key="example.dynamicresource">
    <fmt:param value="${bean.accountCount}">
</fmt:message>

Wenn es zum Beispiel JSF ist, können Sie h:outputFormat für diese.

<h:outputFormat value="#{bundle['example.dynamicresource']}">
    <f:param value="#{bean.accountCount}">
</h:outputFormat>

Der beste Ort ist, um nur die Dokumentation der Technologie / framework konsultieren Sie verwenden (oder es hier zu sagen, so dass wir besser und detailliertere Antworten geben kann).

Struts haben eine schöne util genannt MessageResources welche tut genau das, was man sich wünschen ....

z.

MessageResources resources = getResources(request, "my_resource_bundle"); // Call your bundle exactly like ResourceBundle.getBundle() method
resources.getMessage("example.dynamicresource",accountCount,param2,...);

Begrenzung Es ermöglicht nur maximal 3 Parameter (d.h. Ressourcenattribut, param1, ..., param3).

Ich schlage vor, mit Message (wenn Sie möchten mehr als 3 Parameterwerte verwenden), wie von David Sykes vorgeschlagen.

PS die getResources Methode ist nur in der Struts Action Klasse.

Ich glaube nicht, dass Sie diese Arbeit für Nicht-Englisch-Properties-Datei machen.

Meine message.properties Datei hat die folgende Zeile:

info.fomat.log.message.start = Start zu Parsingprotokoll Nachricht in {0} Format.

Und meine message_fr_FR.properties Datei hat die folgende Zeile:

info.fomat.log.message.start = A partir d'Analysator le message connecter {0} Format.

Dieser Code funktioniert nur für die englische

String.format ((String) Nachrichten .getString (GlobalConstants.MESSAGE_FORMAT_START), GlobalConstants.STR_JSON));

Es tut nicht ersetzen Sie den Platzhalter mit dem Wert, wenn meine Sprache / Locale Französisch ist: - (

Auch MessageFormat.fomat () ist nicht gut

Ich glaube nicht, Resource tun kann, dass selbst, sondern String kann:

String.format(bundle.getString("example.dynamicresource"), accountCount);

Beachten Sie, dass, wenn MessageFormat.format() verwenden Sie doppelte Anführungszeichen ('') in Ihrem Ressourcenpaket verwenden müssen, wenn Sie Apostroph (') zum Ausdruck bringen wollen.

MessageFormoat # Format wird wie für den Fall arbeiten:

greetingTo=Have Param, saying hello {0}

Sie können erklären zwei Methoden wie diese, wo RB eine Instanz von Resource ist:

/**This is a method that takes the param to substitute the placeholder**/
public String getString(String key, Object... params  ) {
    try {
        return MessageFormat.format(this.RB.getString(key), params);
    } catch (MissingResourceException e) {
        return "[" + key + "]";
    }
}

/**Without a param, this will derectly delegate to ResourceBundle#getString**/
public String getString(String key) {
    try {
        return this.RB.getString(key);
    } catch (MissingResourceException e) {
        return "[" + key + "]";
    }
} 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top