MessageFormat Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
<strong>[icu enhancement]</strong> ICU's replacement for java.text.MessageFormat.
[Android.Runtime.Register("android/icu/text/MessageFormat", ApiSince=24, DoNotGenerateAcw=true)]
public class MessageFormat : Android.Icu.Text.UFormat
[<Android.Runtime.Register("android/icu/text/MessageFormat", ApiSince=24, DoNotGenerateAcw=true)>]
type MessageFormat = class
inherit UFormat
- Ereditarietà
- Attributi
Commenti
<strong>[icu enhancement]</strong> ICU's replacement for java.text.MessageFormat. Metodi, campi e altre funzionalità specifiche dell'ICU sono etichettati come "<strong>[icu]</strong>".
MessageFormat prepara le stringhe per la visualizzazione agli utenti, con argomenti facoltativi (variabili/segnaposto). Gli argomenti possono verificarsi in qualsiasi ordine, necessario per la traduzione in lingue con grammatiche diverse.
MessageFormat viene costruito da una <stringa em>pattern</em> con argomenti in {parentesi graffe} che verranno sostituiti da valori formattati.
MessageFormat differisce dalle altre Format classi in quanto si crea un MessageFormat oggetto con uno dei relativi costruttori (non con un getInstance metodo factory di stile). I metodi factory non sono necessari perché MessageFormat non implementa un comportamento specifico delle impostazioni locali. Qualsiasi comportamento specifico delle impostazioni locali viene definito dal modello fornito e dai sottoformatti usati per gli argomenti inseriti.
Gli argomenti possono essere denominati (usando identificatori) o numerati (usando numeri interi ASCII di piccole dimensioni). Alcuni metodi API funzionano solo con i numeri di argomento e generano un'eccezione se il criterio ha argomenti denominati (vedere #usesNamedArguments()).
Un argomento potrebbe non specificare alcun tipo di formato. In questo caso, un valore Number viene formattato con un valore predefinito (per le impostazioni locali) NumberFormat, un valore Date viene formattato con un valore predefinito (per le impostazioni locali) DateFormat e per qualsiasi altro valore viene utilizzato il valore toString().
Un argomento può specificare un tipo "semplice" per il quale viene creato, memorizzato nella cache e utilizzato l'oggetto Format specificato.
Un argomento potrebbe avere un tipo "complesso" con modelli secondari MessageFormat annidati. Durante la formattazione, uno di questi sotto-messaggi viene selezionato in base al valore dell'argomento e formattato in modo ricorsivo.
Dopo la costruzione, è possibile impostare un oggetto Format personalizzato per un argomento di primo livello, ignorando il comportamento di formattazione e analisi predefinito per tale argomento. Tuttavia, la formattazione personalizzata può essere ottenuta più semplicemente scrivendo un argomento senza tipi nella stringa del modello e fornendolo con un valore stringa preformattato.
Durante la formattazione, MessageFormat accetta una raccolta di valori di argomento e scrive una stringa di output. I valori dell'argomento possono essere passati come matrice (quando il criterio contiene solo argomenti numerati) o come oggetto Map (che funziona sia per gli argomenti denominati che per gli argomenti numerati).
Ogni argomento viene confrontato con uno dei valori di input in base all'indice di matrice o alla chiave della mappa e formattato in base alla specifica del modello o usando un oggetto Format personalizzato, se impostato. Un argomento pattern numerato viene confrontato con una chiave della mappa che contiene tale numero come stringa di cifre decimali ASCII (senza zero iniziale).
<h3>"patterns">Patterns and Their Interpretation</h3>
MessageFormat utilizza i modelli del formato seguente: <blockquote>
message = messageText (argument messageText)*
argument = noneArg | simpleArg | complexArg
complexArg = choiceArg | pluralArg | selectArg | selectordinalArg
noneArg = '{' argNameOrNumber '}'
simpleArg = '{' argNameOrNumber ',' argType [',' argStyle] '}'
choiceArg = '{' argNameOrNumber ',' "choice" ',' choiceStyle '}'
pluralArg = '{' argNameOrNumber ',' "plural" ',' pluralStyle '}'
selectArg = '{' argNameOrNumber ',' "select" ',' selectStyle '}'
selectordinalArg = '{' argNameOrNumber ',' "selectordinal" ',' pluralStyle '}'
choiceStyle: see {@link ChoiceFormat}
pluralStyle: see {@link PluralFormat}
selectStyle: see {@link SelectFormat}
argNameOrNumber = argName | argNumber
argName = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
argNumber = '0' | ('1'..'9' ('0'..'9')*)
argType = "number" | "date" | "time" | "spellout" | "ordinal" | "duration"
argStyle = "short" | "medium" | "long" | "full" | "integer" | "currency" | "percent" | argStyleText
</blockquote>
<ul><li>messageText può contenere stringhe letterali tra virgolette, inclusi i caratteri di sintassi. Una stringa letterale tra virgolette inizia con un apostrofo ASCII e un carattere di sintassi (in genere una parentesi graffa}) e continua fino al successivo apostrofo singolo. Un apostrofo ASCII doppio all'interno o all'esterno di una stringa tra virgolette rappresenta un apostrofo letterale.
<I caratteri di sintassi tra virgolette li>sono le {parentesi graffe} in tutte le parti messageText, più il segno '#' in un messageText immediatamente all'interno di un pluralStyle e il simbolo '|' in un messageText immediatamente all'interno di un oggetto choiceStyle.
<li>Vedi anche MessagePattern.ApostropheMode<li>In argStyleText, ogni singolo apostrofo ASCII inizia e termina il testo letterale tra virgolette e {parentesi graffe} senza virgolette} deve verificarsi in coppie corrispondenti.
</ul>
Raccomandazione: usare il carattere apostrofo reale (virgolette singole) \\u2019 per il testo leggibile e usare l'apostrofo ASCII (\\u0027 ' ) solo nella sintassi del programma, come la citazione in MessageFormat. Vedere le annotazioni per U+0027 Apostrofo nello standard Unicode.
Il choice tipo di argomento è deprecato. Usare plural gli argomenti per la selezione plurale appropriata e select gli argomenti per la selezione semplice tra un set fisso di scelte.
I argType valori e argStyle vengono usati per creare un'istanza Format per l'elemento di formato. Nella tabella seguente viene illustrato il mapping dei valori alle istanze formatta. Le combinazioni non visualizzate nella tabella non sono valide. Qualsiasi argStyleText deve essere una stringa di pattern valida per la sottoclasse Format utilizzata.
<table border=1><tr><th argType >th<argStyle >th<>risultante Oggetto <Format tr><td colspan=2>(none)<td>null<tr><td rowspan=5>number<td>(none)<td tr>NumberFormat.getInstance(getLocale())td td<><>integer<>NumberFormat.getIntegerInstance(getLocale())<tr><td>currency<>NumberFormat.getCurrencyInstance(getLocale())<td tr><td td td tr td td tr>percent<>NumberFormat.getPercentInstance(getLocale())<><td>argStyleText<td>new DecimalFormat(argStyleText, new DecimalFormatSymbols(getLocale()))<tr><td rowspan=6>date<td>(none)<td>DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())<tr><td>short<td>DateFormat.getDateInstance(DateFormat.SHORT, getLocale())<tr><td>medium<td>DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())<tr><td>long<td>DateFormat.getDateInstance(DateFormat.LONG, getLocale())<tr><td td td>full<tr>DateFormat.getDateInstance(DateFormat.FULL, getLocale())td<><>argStyleText <td>new SimpleDateFormat(argStyleText, getLocale())<tr><td rowspan=6>time<td>(none)<td tr>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())td<><td>short<>DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())<tr><td>medium<>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())<td tr><td td>long<td>DateFormat.getTimeInstance(DateFormat.LONG, getLocale())<tr><td td>full<tr>DateFormat.getTimeInstance(DateFormat.FULL, getLocale())td<><> argStyleText <td tr>new SimpleDateFormat(argStyleText, getLocale())<><td td>spellout<>argStyleText (facoltativo)td<>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.SPELLOUT) <br> .setDefaultRuleset(argStyleText);tr<>td td<>ordinal<> argStyleText (facoltativo)td<>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.ORDINAL) <br> .setDefaultRuleset(argStyleText);tr<>td td<>duration<> argStyleText (facoltativo)<td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.DURATION) <br> .setDefaultRuleset(argStyleText);</table>
<h4>"diffsjdk">Differenze da java.text.MessageFormat</h4>
ICU MessageFormat supporta argomenti denominati e numerati, mentre JDK MessageFormat supporta solo argomenti numerati. Gli argomenti denominati rendono i modelli più leggibili.
L'ICU implementa una sintassi di apostrofo più intuitiva. Nel testo del messaggio, un apostrofo inizia solo tra virgolette di testo letterale se precede immediatamente un carattere di sintassi (principalmente {parentesi graffe}).<br> In JDK MessageFormat, un apostrofo inizia sempre tra virgolette, che richiede testo comune come "don't" e "aujourd'hui" per essere scritto con apostrofi doubled come "don't" e "aujourd''hui". Per altri dettagli, vedere MessagePattern.ApostropheMode.
L'ICU non crea un oggetto ChoiceFormat per un oggetto choiceArg, pluralArg o selectArg, ma gestisce tali argomenti. JDK MessageFormat crea e usa un oggetto ChoiceFormat (new ChoiceFormat(argStyleText)). JDK non supporta affatto argomenti plurali e di selezione.
<h4>Usage Information</h4>
Ecco alcuni esempi di utilizzo: <blockquote>
Object[] arguments = {
7,
new Date(System.currentTimeMillis()),
"a disturbance in the Force"
};
String result = MessageFormat.format(
"At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
arguments);
<em>output</em>: At 12:30 PM on Jul 3, 2053, there was a disturbance
in the Force on planet 7.
</blockquote> In genere, il formato del messaggio proviene dalle risorse e gli argomenti verranno impostati in modo dinamico in fase di esecuzione.
Esempio 2: <blockquote>
Object[] testArgs = { 3, "MyDisk" };
MessageFormat form = new MessageFormat(
"The disk \"{1}\" contains {0} file(s).");
System.out.println(form.format(testArgs));
// output, with different testArgs
<em>output</em>: The disk "MyDisk" contains 0 file(s).
<em>output</em>: The disk "MyDisk" contains 1 file(s).
<em>output</em>: The disk "MyDisk" contains 1,273 file(s).
</blockquote>
Per i messaggi che includono forme plurali, è possibile usare un argomento plurale:
MessageFormat msgFmt = new MessageFormat(
"{num_files, plural, " +
"=0{There are no files on disk \"{disk_name}\".}" +
"=1{There is one file on disk \"{disk_name}\".}" +
"other{There are # files on disk \"{disk_name}\".}}",
ULocale.ENGLISH);
Map args = new HashMap();
args.put("num_files", 0);
args.put("disk_name", "MyDisk");
System.out.println(msgFmt.format(args));
args.put("num_files", 3);
System.out.println(msgFmt.format(args));
<em>output</em>:
There are no files on disk "MyDisk".
There are 3 files on "MyDisk".
Vedere PluralFormat e PluralRules per informazioni dettagliate.
<h4>"synchronization">Synchronization</h4>
MessageFormats non è sincronizzato. È consigliabile creare istanze di formato separate per ogni thread. Se più thread accedono contemporaneamente a un formato, deve essere sincronizzato esternamente.
per android.icu.text.MessageFormat.
Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dalla e usati in base ai termini descritti in Creative License 2.5 Attribution License.
Costruttori
| Nome | Descrizione |
|---|---|
| MessageFormat(IntPtr, JniHandleOwnership) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| MessageFormat(String, Locale) |
Costruisce messageFormat per le impostazioni locali e il modello specificati. |
| MessageFormat(String, ULocale) |
Costruisce messageFormat per le impostazioni locali e il modello specificati. |
| MessageFormat(String) |
Costruisce messageFormat per le impostazioni locali predefinite |
Proprietà
| Nome | Descrizione |
|---|---|
| ApostropheMode |
<strong>[icu enhancement]</strong> ICU's replacement for |
| ArgumentNames |
<strong>[icu]</strong> Restituisce i nomi degli argomenti di primo livello. |
| Class |
Restituisce la classe di runtime di questo |
| Handle |
Handle per l'istanza di Android sottostante. (Ereditato da Object) |
| JniIdentityHashCode |
Ottiene il codice hash di identità assegnato a questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| JniPeerMembers |
<strong>[icu enhancement]</strong> ICU's replacement for |
| Locale |
Restituisce le impostazioni locali utilizzate durante la creazione o il confronto dei formati secondari. -oppure- Imposta le impostazioni locali da utilizzare per la creazione di oggetti Format argomento. |
| PeerReference |
Ottiene il riferimento all'oggetto JNI per questo peer Java. (Ereditato da Object) |
| ThresholdClass |
<strong>[icu enhancement]</strong> ICU's replacement for |
| ThresholdType |
<strong>[icu enhancement]</strong> ICU's replacement for |
| ULocale |
<strong>[icu]</strong> Restituisce le impostazioni locali usate durante la creazione di oggetti Format dell'argomento. |
Metodi
| Nome | Descrizione |
|---|---|
| ApplyPattern(String, MessagePattern+ApostropheMode) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| ApplyPattern(String) |
Imposta il modello utilizzato da questo formato di messaggio. |
| AutoQuoteApostrophe(String) |
<strong>[icu]</strong> Converte un modello "apostrophe-friendly" in un modello standard. |
| Clone() |
Crea e restituisce una copia di questo oggetto. (Ereditato da _Format) |
| Dispose() |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| Dispose(Boolean) |
Rilascia le risorse contenute in questo peer Java. (Ereditato da Object) |
| Equals(Object) |
Indica se un altro oggetto è "uguale a" questo. (Ereditato da Object) |
| Format(IDictionary<String,Object>, StringBuffer, FieldPosition) |
Formatta una mappa di oggetti e accoda il |
| Format(Object, StringBuffer, FieldPosition) |
Formatta una mappa o una matrice di oggetti e accoda il |
| Format(Object) |
Formatta un oggetto per produrre una stringa. (Ereditato da _Format) |
| Format(Object[], StringBuffer, FieldPosition) |
Formatta una matrice di oggetti e accoda il |
| Format(String, IDictionary<String,Object>) |
Crea un oggetto MessageFormat con il modello specificato e lo usa per formattare gli argomenti specificati. |
| Format(String, Object[]) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| FormatToCharacterIterator(Object) |
Formatta un oggetto che produce un oggetto |
| GetFormatByArgumentName(String) |
<strong>[icu]</strong> Restituisce il primo formato di primo livello associato al nome dell'argomento specificato. |
| GetFormats() |
Restituisce gli oggetti Format utilizzati per gli elementi di formato nella stringa del criterio impostata in precedenza. |
| GetFormatsByArgumentIndex() |
Restituisce gli oggetti Format utilizzati per i valori passati nei |
| GetHashCode() |
Restituisce un valore di codice hash per l'oggetto . (Ereditato da Object) |
| JavaFinalize() |
Chiamato dal Garbage Collector su un oggetto quando Garbage Collection determina che non sono presenti altri riferimenti all'oggetto . (Ereditato da Object) |
| Notify() |
Riattiva un singolo thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| NotifyAll() |
Riattiva tutti i thread in attesa del monitor dell'oggetto. (Ereditato da Object) |
| Parse(String, ParsePosition) |
Analizza la stringa. |
| Parse(String) |
Analizza il testo dall'inizio della stringa specificata per produrre una matrice di oggetti. |
| ParseObject(String, ParsePosition) |
Analizza il testo da una stringa per produrre una matrice di oggetti o una mappa. |
| ParseObject(String) |
Analizza il testo dall'inizio della stringa specificata per produrre un oggetto . (Ereditato da _Format) |
| ParseToMap(String, ParsePosition) |
<strong>[icu]</strong> Analizza la stringa, restituendo i risultati in una mappa. |
| ParseToMap(String) |
<strong>[icu]</strong> Analizza il testo dall'inizio della stringa specificata per produrre una mappa dall'argomento ai valori. |
| SetFormat(Int32, _Format) |
Imposta l'oggetto Format da utilizzare per l'elemento format con l'indice dell'elemento di formato specificato all'interno della stringa del criterio impostata in precedenza. |
| SetFormatByArgumentIndex(Int32, _Format) |
Imposta l'oggetto Format da utilizzare per gli elementi di formato all'interno della stringa del criterio impostata in precedenza che utilizzano l'indice dell'argomento specificato. |
| SetFormatByArgumentName(String, _Format) |
<strong>[icu]</strong> Imposta l'oggetto Format da usare per gli elementi di formato all'interno della stringa di criteri impostata in precedenza che utilizzano il nome dell'argomento specificato. |
| SetFormats(_Format[]) |
Imposta gli oggetti Format da utilizzare per gli elementi di formato nella stringa del criterio impostata in precedenza. |
| SetFormatsByArgumentIndex(_Format[]) |
Imposta gli oggetti Format da utilizzare per i valori passati nei |
| SetFormatsByArgumentName(IDictionary<String,_Format>) |
<strong>[icu]</strong> Imposta gli oggetti Format da utilizzare per i valori passati nei |
| SetHandle(IntPtr, JniHandleOwnership) |
Imposta la proprietà Handle. (Ereditato da Object) |
| SetLocale(ULocale) |
Imposta le impostazioni locali da utilizzare per la creazione di oggetti Format dell'argomento. |
| ToArray<T>() |
Crea una matrice gestita da questo wrapper di matrice Java. (Ereditato da Object) |
| ToPattern() |
Restituisce la stringa di pattern applicata. |
| ToString() |
Restituisce una rappresentazione di stringa dell'oggetto . (Ereditato da Object) |
| UnregisterFromRuntime() |
Annulla la registrazione di questo Java peer dal runtime di interoperabilità. (Ereditato da Object) |
| UsesNamedArguments() |
<strong>[icu]</strong> Restituisce true se messageFormat usa argomenti denominati e false in caso contrario. |
| Wait() |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo <>una notifica</em> o <em>interrotto</em>. (Ereditato da Object) |
| Wait(Int64, Int32) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
| Wait(Int64) |
Fa sì che il thread corrente attenda finché non viene risvegliato, in genere ricevendo<> una notifica</em> o <em>interrotto</em> o fino a quando non è trascorsa una determinata quantità di tempo reale. (Ereditato da Object) |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| IJavaPeerable.Disposed() |
Notifica al runtime di interoperabilità che il peer gestito è stato eliminato. (Ereditato da Object) |
| IJavaPeerable.DisposeUnlessReferenced() |
Rilascia questo Java peer a meno che non venga conservato da un altro riferimento gestito. (Ereditato da Object) |
| IJavaPeerable.Finalized() |
Notifica al runtime di interoperabilità che il peer gestito è stato finalizzato. (Ereditato da Object) |
| IJavaPeerable.JniManagedPeerState |
Ottiene lo stato che descrive la relazione tra questo peer gestito e il relativo riferimento JNI. (Ereditato da Object) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Imposta il codice hash dell'identità di interoperabilità per questo Java peer. (Ereditato da Object) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Imposta lo stato peer gestito e JNI per questo peer Java. (Ereditato da Object) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Imposta il riferimento all'oggetto JNI usato da questo peer gestito. (Ereditato da Object) |
Metodi di estensione
| Nome | Descrizione |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Ottiene il nome JNI del tipo dell'istanza |
| JavaAs<TResult>(IJavaPeerable) |
Provare a digitare |
| JavaCast<TResult>(IJavaObject) |
Esegue una conversione del tipo di tipo controllato dal runtime Android. |
| JavaCast<TResult>(IJavaObject) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Provare a digitare |