Unterstützen Ressourcenbündel in Java die Verwendung von Laufzeitzeichenfolgen?
Können Sie die folgenden mit einem Java-ResourceBundle?
In der properties Datei...
example.dynamicresource=You currently have {0} accounts.
Zur Laufzeit...
int accountAcount = 3;
bundle.get("example.dynamicresource",accountCount,param2,...);
Geben ein Ergebnis von
"Sie haben momentan 3 Konten."
InformationsquelleAutor der Frage benstpierre | 2010-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht ohne die MessageFormat Klasse, wie zum Beispiel:
InformationsquelleAutor der Antwort David Sykes
Auf Ihre eigenen,
ResourceBundle
unterstützt nicht die Eigenschaft Platzhalter. Die übliche Idee ist, nehmen Sie die Zeichenfolge, die Sie aus den bündeln, und kleben Sie es in einMessageFormat
und dann verwenden, um Ihre parametrisierte Nachricht.Wenn Sie JSP/JSTLdann können Sie kombinieren
<fmt:message>
und<fmt:param>
um dies zu tun, die verwendetResourceBundle
undMessageFormat
unter der Decke.Wenn Sie geschehen, werden mit Frühjahrdann hat es die
ResourceBundleMessageSource
die etwas ähnliches machtund kann verwendet werden, überall in Ihrem Programm. DieseMessageSource
Abstraktion (kombiniert mitMessageSourceAccessor
) ist viel schöner zu bedienen alsResourceBundle
.InformationsquelleAutor der Antwort skaffman
Gibt es verschiedene Möglichkeiten, abhängig von der view-Technologie, die Sie verwenden. Wenn Sie mit "plain-vanilla" Java (z.B. Swing), dann verwenden Sie
MessageFormat
API wie zuvor beantwortet. Wenn Sie eine webapplication framework (was auch stimmt, wenn ich Richter Ihre Frage, die die Geschichte hier richtig), dann ist der Weg hängt vom view-Technologie und/oder MVC-framework, die Sie verwenden. Wenn es zum Beispiel "plain-vanilla" JSP, dann können Sie JSTLfmt:message
.Wenn es zum Beispiel JSF, können Sie
h:outputFormat
.Beste Ort ist, um Sie nur in der Dokumentation des Technologie/framework, die Sie verwenden (oder erzählen Sie es hier, so dass wir geben können, besser geeignet und ausführliche Antworten).
InformationsquelleAutor der Antwort BalusC
Stützen haben einen schönen util genannt
MessageResources
die genau das tut, was Sie Fragen....z.B.
Einschränkung
Es erlaubt nur maximal 3 Parameter (d.h. Ressourcen-Attribut, param1, ..., param3).
Schlage ich vor, mit MessageFormat (wenn Sie möchten, um mehr als 3 parameter) wie vorgeschlagen von David Sykes.
PS die
getResources
Methode ist nur verfügbar in den StrebenAction
Klasse.InformationsquelleAutor der Antwort Buhake Sindi
Ich glaube nicht, können Sie machen diese Arbeit für Nicht-Englisch-properties-Datei.
Meine Botschaft.Eigenschaften der Datei die folgende Zeile:
info.fomat.log.Nachricht.start=Start-zum analysieren von log-Meldung, in der {0} - format.
Und meine message_fr_FR.Eigenschaften der Datei die folgende Zeile:
info.fomat.log.Nachricht.start=A partir d'analyser 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));
Tut es NICHT ersetzen Sie den Platzhalter mit dem Wert, wenn meine Sprache /Gebietsschema Französisch 🙁
Sogar MessageFormat.fomat() ist nicht gut
InformationsquelleAutor der Antwort MRay
Ich glaube nicht, dass ResourceBundle tun können, dass Sie selbst, aber String können:
InformationsquelleAutor der Antwort tom
Denken Sie daran, dass bei der Verwendung von
MessageFormat.format()
müssen Sie die Verwendung von doppelten Anführungszeichen (''
) in Ihrem Ressource-bundle, wenn man Ausdrücken möchte, single quote ('
).InformationsquelleAutor der Antwort tleveque
MessageFormoat#format Arbeit wird für den Fall wie:
Können deklariert zwei Methoden, wie diese, in denen RB eine Instanz von ResourceBundle:
InformationsquelleAutor der Antwort Jaskey