MessageFormat Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
MessageFormat
bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen.
[Android.Runtime.Register("java/text/MessageFormat", DoNotGenerateAcw=true)]
public class MessageFormat : Java.Text._Format
[<Android.Runtime.Register("java/text/MessageFormat", DoNotGenerateAcw=true)>]
type MessageFormat = class
inherit _Format
- Vererbung
- Attribute
Hinweise
MessageFormat
bietet ein Mittel, um verkettete Nachrichten sprachneutral zu erzeugen. Verwenden Sie dies, um Meldungen zu erstellen, die für Endbenutzer angezeigt werden.
MessageFormat
nimmt eine Reihe von Objekten an, formatiert sie und fügt dann die formatierten Zeichenfolgen an den entsprechenden Stellen in das Muster ein.
<strong>Hinweis:</strong>MessageFormat
unterscheidet sich von den anderen Format
Klassen dadurch, dass Sie ein MessageFormat
Objekt mit einem seiner Konstruktoren (nicht mit einer getInstance
Style Factory-Methode) erstellen. Die Factorymethoden sind nicht erforderlich, da MessageFormat
selbst kein gebietsschemaspezifisches Verhalten implementiert wird. Jedes gebietsschemaspezifische Verhalten wird durch das von Ihnen bereitgestellte Muster und die für eingefügte Argumente verwendeten Unterformate definiert.
<h2>"patterns"Patterns">Patterns and Their Interpretation</h2>
MessageFormat
verwendet Muster der folgenden Form: <blockquote>
<i>MessageFormatPattern:</i>
<i>String</i>
<i>MessageFormatPattern</i> <i>FormatElement</i> <i>String</i>
<i>FormatElement:</i>
{ <i>ArgumentIndex</i> }
{ <i>ArgumentIndex</i> , <i>FormatType</i> }
{ <i>ArgumentIndex</i> , <i>FormatType</i> , <i>FormatStyle</i> }
<i>FormatType: one of </i>
number date time choice
<i>FormatStyle:</i>
short
medium
long
full
integer
currency
percent
<i>SubformatPattern</i>
</Blockquote>
Innerhalb einer Zeichenfolge kann ein Paar einzelner Anführungszeichen verwendet werden, um beliebige Zeichen mit Ausnahme einzelner Anführungszeichen anzuweisen. Die Musterzeichenfolge "'{0}'"
stellt beispielsweise eine Zeichenfolge "{0}"
dar, nicht ein FormatElement. Ein einzelnes Anführungszeichen selbst muss durch doppelte einzele Anführungszeichen ''
in einer Zeichenfolge dargestellt werden. Beispiel: Musterzeichenfolge "'{''}'"
wird als Sequenz von '{
(Anfang der Anführung und linke geschweifte Klammer), ''
(ein einzelnes Anführungszeichen) und }'
(rechte geschweifte Klammer und Ende der Anführung), <em>not</em>'{'
und '}'
(anführungszeichen links und rechts geschweifte Klammern): darstellen Zeichenfolge "{'}"
, <em>not</em>"{}"
.
Ein SubformatPattern wird durch das entsprechende Unterformat interpretiert, und es gelten unterformatabhängige Musterregeln. Die Musterzeichenfolge "{1,number,<u>$'#',##</u>}"
(SubformatPattern mit Unterstrich) erzeugt beispielsweise ein Zahlenformat mit dem Pfundzeichen mit einem Ergebnis wie: "$#31,45"
. Ausführliche Informationen finden Sie in der Dokumentation zu den einzelnen Format
Unterklassen.
Jedes nicht übereinstimmende Angebot wird am Ende des angegebenen Musters als geschlossen behandelt. Beispielsweise wird die Musterzeichenfolge "'{0
"} als Muster "'{0
'"} behandelt.
Alle geschweiften Klammern innerhalb eines nicht zitierungslosen Musters müssen ausgeglichen sein. Beispielsweise "ab {0} de"
sind und "ab '}' de"
gültige Muster, aber "ab {0'}' de"
, "ab } de"
und "''{''"
sind nicht.
<dl><dt><b>Warning:</b><dd>Die Regeln für die Verwendung von Anführungszeichen innerhalb von Nachrichtenformatmustern haben sich leider als etwas verwirrend erwiesen. Insbesondere ist es für Lokalisierungsexperten nicht immer offensichtlich, ob einzelne Anführungszeichen verdoppelt werden müssen oder nicht. Stellen Sie sicher, dass Sie Lokalisierer über die Regeln informieren und ihnen mitteilen (z. B. mithilfe von Kommentaren in Ressourcenbündelquelldateien), welche Zeichenfolgen von MessageFormat
verarbeitet werden. Beachten Sie, dass Lokalisierer möglicherweise einzelne Anführungszeichen in übersetzten Zeichenfolgen verwenden müssen, wo sie in der ursprünglichen Version nicht vorhanden sind. </Dl>
Der ArgumentIndex-Wert ist eine nicht negative ganze Zahl, die mithilfe der Ziffern '0'
über '9'
geschrieben wird, und stellt einen Index in das Array dar, das arguments
an die format
Methoden oder das von den parse
Methoden zurückgegebene Ergebnisarray übergeben wird.
Die Werte FormatType und FormatStyle werden verwendet, um eine Format
instance für das format-Element zu erstellen. Die folgende Tabelle zeigt, wie die Werte Instanzen zugeordnet Format
werden. Kombinationen, die in der Tabelle nicht angezeigt werden, sind unzulässig. SubformatPattern muss eine gültige Musterzeichenfolge für die Format
verwendete Unterklasse sein.
<table class="plain"><Untertitel style="display:none">Zeigt, wie FormatType- und FormatStyle-Werte zu Format instances</Untertitel<> thead<>tr><th scope="col" class="TableHeadingColor">FormatType <th scope="col" class="TableHeadingColor">FormatStyle <th scope="col" class="TableHeadingColor">Subformat Created </thead><tbody><tr><th scope="row" style="text-weight: normal">(none)<th scope="row" style="text-weight: normal">(none)<tdnull
><tr<>th scope="row" style="text-weight: normal" rowspan=5number
><th scope="row" style="text-weight: normal">(none)<td(getLocale())
><NumberFormat#getInstance(Locale) NumberFormat.getInstance
tr<>th scope="row" style="text-weight: normal"integer
<>td>NumberFormat#getIntegerInstance(Locale) NumberFormat.getIntegerInstance
(getLocale())
<tr><th scope="row" style="text-weight: normal"currency
><tdNumberFormat#getCurrencyInstance(Locale) NumberFormat.getCurrencyInstance
<(getLocale())
>tr><th scope="row" style="text-weight: normal"<percent
>td<NumberFormat#getPercentInstance(Locale) NumberFormat.getPercentInstance
>(getLocale())
tr<>th scope="row" style="text-weight: normal">SubformatPattern <tdnew
(subformatPattern,
(getLocale()))
DecimalFormat#DecimalFormat(String,DecimalFormatSymbols) DecimalFormat
<>DecimalFormatSymbols#getInstance(Locale) DecimalFormatSymbols.getInstance
tr><th scope="row" style="text-weight: normal" rowspan=6>date
<th scope="row" style=" text-weight: normal">(none)<td>(
DateFormat#DEFAULT
<DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance
, getLocale())
tr><th scope="row" style="text-weight: normal"><short
td(
, getLocale())
>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance
DateFormat#SHORT
<tr<>th scope="row" style="text-weight: normal"><medium
tdDateFormat#DEFAULT
(
DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance
<, getLocale())
>tr<>th scope="row" style="text-weight: normal"<>long
td tr>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance
(
DateFormat#LONG
, getLocale())
<><th scope="row" style="text-weight: normal">full
<tdDateFormat#FULL
(
><DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance
, getLocale())
tr><th scope="row" style="text-weight: normal">SubformatPattern <td<>(subformatPattern, getLocale())
SimpleDateFormat#SimpleDateFormat(String,Locale) SimpleDateFormat
new
tr><th scope="row" style="text-weight: normal" rowspan=6<time
>th scope="row" style="text-weight: normal">(none)<td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance
(
DateFormat#DEFAULT
, getLocale())
<Tr><th scope="row" style="text-weight: normal">short
<td<DateFormat#SHORT
(
>, getLocale())
DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance
tr><th scope="row" style="text-weight: normal"medium
<>td, getLocale())
<>DateFormat#DEFAULT
DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance
(
tr<>th scope="row" style="text-weight: normal"td tr th scope="row" style="text-weight: normal"long
><tdDateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance
DateFormat#LONG
><, getLocale())
(
tr<>th scope="row" style="text-weight: normal"<>full
td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance
(
DateFormat#FULL
, getLocale())
<tr><th scope="row" style="text-weight: normal">SubformatPattern<tdnew
(subformatPattern, getLocale())
<>SimpleDateFormat#SimpleDateFormat(String,Locale) SimpleDateFormat
tr<>th scope="row" style="text-weight: normal"><choice
th scope="row" style="text-weight: normal">SubformatPattern <td(subformatPattern)
<new
ChoiceFormat#ChoiceFormat(String) ChoiceFormat
>/tbody></table>
<h3>Nutzungsinformationen</h3>
Im Folgenden finden Sie einige Beispiele für die Verwendung. In realen internationalisierten Programmen werden das Nachrichtenformatmuster und andere statische Zeichenfolgen natürlich aus Ressourcenbündeln abgerufen. Andere Parameter werden zur Laufzeit dynamisch bestimmt.
Im ersten Beispiel wird die statische Methode MessageFormat.format
verwendet, die intern eine MessageFormat
für die einmalige Verwendung erstellt: <blockquote>
int planet = 7;
String event = "a disturbance in the Force";
String result = MessageFormat.format(
"At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
planet, new Date(), event);
</blockquote> Die Ausgabe lautet: <blockquote>
At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
</Blockquote>
Im folgenden Beispiel wird eine MessageFormat
instance erstellt, die wiederholt verwendet werden kann: <blockquote>
int fileCount = 1273;
String diskName = "MyDisk";
Object[] testArgs = {new Long(fileCount), diskName};
MessageFormat form = new MessageFormat(
"The disk \"{1}\" contains {0} file(s).");
System.out.println(form.format(testArgs));
</blockquote> Die Ausgabe mit unterschiedlichen Werten für fileCount
: <blockquote>
The disk "MyDisk" contains 0 file(s).
The disk "MyDisk" contains 1 file(s).
The disk "MyDisk" contains 1,273 file(s).
</Blockquote>
Für komplexere Muster können Sie ein ChoiceFormat
verwenden, um richtige Formulare für Singular und Plural zu erstellen: <blockquote>
MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0}.");
double[] filelimits = {0,1,2};
String[] filepart = {"no files","one file","{0,number} files"};
ChoiceFormat fileform = new ChoiceFormat(filelimits, filepart);
form.setFormatByArgumentIndex(0, fileform);
int fileCount = 1273;
String diskName = "MyDisk";
Object[] testArgs = {new Long(fileCount), diskName};
System.out.println(form.format(testArgs));
</blockquote> Die Ausgabe mit unterschiedlichen Werten für fileCount
: <blockquote>
The disk "MyDisk" contains no files.
The disk "MyDisk" contains one file.
The disk "MyDisk" contains 1,273 files.
</Blockquote>
Sie können das ChoiceFormat
programmgesteuert erstellen, wie im obigen Beispiel, oder mithilfe eines Musters. Weitere Informationen finden Sie unter ChoiceFormat
. <Blockquote>
{@code
form.applyPattern(
"There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.");
}
</Blockquote>
<strong>Hinweis:</strong> Wie wir oben sehen, wird die von einem ChoiceFormat
in MessageFormat
erzeugte Zeichenfolge als speziell behandelt. Vorkommen von '{' werden verwendet, um Unterformate anzugeben und eine Rekursion zu verursachen. Wenn Sie sowohl einen als MessageFormat
ChoiceFormat
auch programmgesteuert erstellen (anstatt die Zeichenfolgenmuster zu verwenden), sollten Sie darauf achten, kein Format zu erzeugen, das sich selbst wiedergibt, was zu einer Unendlichkeitsschleife führt.
Wenn ein einzelnes Argument mehr als einmal in der Zeichenfolge analysiert wird, ist die letzte Übereinstimmung das Endergebnis der Analyse. Beispiel <: blockquote>
MessageFormat mf = new MessageFormat("{0,number,#.##}, {0,number,#.#}");
Object[] objs = {new Double(3.1415)};
String result = mf.format( objs );
// result now equals "3.14, 3.1"
objs = null;
objs = mf.parse(result, new ParsePosition(0));
// objs now equals {new Double(3.1)}
</Blockquote>
Ebenso würde die Analyse mit einem MessageFormat
Objekt mithilfe von Mustern, die mehrere Vorkommen desselben Arguments enthalten, die letzte Übereinstimmung zurückgeben. Beispiel <: blockquote>
MessageFormat mf = new MessageFormat("{0}, {0}, {0}");
String forParsing = "x, y, z";
Object[] objs = mf.parse(forParsing, new ParsePosition(0));
// result now equals {new String("z")}
</Blockquote>
<h3>"synchronization"Synchronization</>h3>
Nachrichtenformate werden nicht synchronisiert. Es wird empfohlen, für jeden Thread separate Formatinstanzen zu erstellen. Wenn mehrere Threads gleichzeitig auf ein Format zugreifen, muss es extern synchronisiert werden.
In Version 1.1 hinzugefügt.
Java-Dokumentation für java.text.MessageFormat
.
Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In der Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
MessageFormat(IntPtr, JniHandleOwnership) |
Ein Konstruktor, der beim Erstellen verwalteter Darstellungen von JNI-Objekten verwendet wird; wird von der Runtime aufgerufen. |
MessageFormat(String) |
Erstellt ein MessageFormat für das Standardgebietsschema |
MessageFormat(String, Locale) |
Erstellt ein MessageFormat für das angegebene Gebietsschema und das angegebene Muster. |
Eigenschaften
Class |
Gibt die Laufzeitklasse dieses |
Handle |
Das Handle zum zugrunde liegenden Android-instance. (Geerbt von Object) |
JniIdentityHashCode |
|
JniPeerMembers |
|
Locale |
Ruft das Gebietsschema ab, das beim Erstellen oder Vergleichen von Unterformaten verwendet wird. - oder: Legt das Gebietsschema fest, das beim Erstellen oder Vergleichen von Unterformaten verwendet werden soll. |
PeerReference |
|
ThresholdClass |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |
ThresholdType |
Diese API unterstützt die Mono für Android-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |
Methoden
ApplyPattern(String) |
Legt das Muster fest, das von diesem Nachrichtenformat verwendet wird. |
Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von _Format) |
Dispose() |
|
Dispose(Boolean) |
|
Equals(Object) |
Gibt an, ob ein anderes Objekt diesem "gleich" ist. (Geerbt von Object) |
Format(Object) |
Formatiert ein Objekt, um eine Zeichenfolge zu erzeugen. (Geerbt von _Format) |
Format(Object, StringBuffer, FieldPosition) |
Formatiert ein Array von -Objekten und fügt das |
Format(Object[], StringBuffer, FieldPosition) |
Formatiert ein Array von -Objekten und fügt das |
Format(String, Object[]) |
Formatiert ein Array von Objekten und fügt das <Codemuster>MessageFormat</code> an, wobei Formatelemente durch die formatierten Objekte ersetzt werden, an den bereitgestellten <Code>StringBuffer</code> an. |
FormatToCharacterIterator(Object) |
Formatiert ein Objekt, das einen erzeugt |
GetFormats() |
Ruft die Formate ab, die für die Formatelemente in der zuvor festgelegten Musterzeichenfolge verwendet werden. |
GetFormatsByArgumentIndex() |
Ruft die Formate ab, die für die Werte verwendet werden, die an |
GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
JavaFinalize() |
Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind. (Geerbt von Object) |
Notify() |
Aktiviert einen einzelnen Thread, der auf dem Monitor dieses Objekts wartet. (Geerbt von Object) |
NotifyAll() |
Aktiviert alle Threads, die auf dem Monitor dieses Objekts warten. (Geerbt von Object) |
Parse(String) |
Analysiert Text vom Anfang der angegebenen Zeichenfolge, um ein Objektarray zu erzeugen. |
Parse(String, ParsePosition) |
Analysiert die Zeichenfolge. |
ParseObject(String) |
Analysiert Text vom Anfang der angegebenen Zeichenfolge, um ein Objekt zu erzeugen. (Geerbt von _Format) |
ParseObject(String, ParsePosition) |
Analysiert Text aus einer Zeichenfolge, um ein Objektarray zu erzeugen. |
SetFormat(Int32, _Format) |
Legt das Format fest, das für das format-Element mit dem angegebenen Formatelementindex innerhalb der zuvor festgelegten Musterzeichenfolge verwendet werden soll. |
SetFormatByArgumentIndex(Int32, _Format) |
Legt das Format fest, das für die Formatelemente in der zuvor festgelegten Musterzeichenfolge verwendet werden soll, die den angegebenen Argumentindex verwenden. |
SetFormats(_Format[]) |
Legt die Formate fest, die für die Formatelemente in der zuvor festgelegten Musterzeichenfolge verwendet werden sollen. |
SetFormatsByArgumentIndex(_Format[]) |
Legt die Formate fest, die für die Werte verwendet werden sollen, die an |
SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
ToArray<T>() |
|
ToPattern() |
Gibt ein Muster zurück, das den aktuellen Zustand des Nachrichtenformats darstellt. |
ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
UnregisterFromRuntime() |
|
Wait() |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel durch em benachrichtigen/em> oder <em>interrupted</em>.<>< (Geerbt von Object) |
Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert wird, in der Regel, indem <er>benachrichtigt</em> oder <em>interrupted</em> oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
IJavaPeerable.Disposed() |
|
IJavaPeerable.DisposeUnlessReferenced() |
|
IJavaPeerable.Finalized() |
|
IJavaPeerable.JniManagedPeerState |
|
IJavaPeerable.SetJniIdentityHashCode(Int32) |
|
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
|
IJavaPeerable.SetPeerReference(JniObjectReference) |
|
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine Für Android-Runtime überprüfte Typkonvertierung aus. |
JavaCast<TResult>(IJavaObject) |
|
GetJniTypeName(IJavaPeerable) |
|