MessageFormat Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
<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
- Herança
- Atributos
Comentários
<strong>[icu enhancement]</strong> ICU's replacement for java.text.MessageFormat. Métodos, campos e outras funcionalidades específicas da UTI são rotulados como '<strong>[icu]</strong>'.
MessageFormat prepara cadeias de caracteres para exibição aos usuários, com argumentos opcionais (variáveis/espaços reservados). Os argumentos podem ocorrer em qualquer ordem, o que é necessário para tradução em idiomas com gramáticas diferentes.
Um MessageFormat é construído a partir de uma <cadeia de caracteres em>pattern</em> com argumentos em {chaves} que serão substituídos por valores formatados.
MessageFormat difere das outras Format classes em que você cria um MessageFormat objeto com um de seus construtores (não com um getInstance método de fábrica de estilos). Os métodos de fábrica não são necessários porque MessageFormat ele não implementa o comportamento específico da localidade. Qualquer comportamento específico de localidade é definido pelo padrão que você fornece e pelos subformas usados para argumentos inseridos.
Os argumentos podem ser nomeados (usando identificadores) ou numerados (usando números inteiros de dígitos ASCII pequenos). Alguns dos métodos de API funcionam apenas com números de argumento e geram uma exceção se o padrão tiver argumentos nomeados (consulte #usesNamedArguments()).
Um argumento pode não especificar nenhum tipo de formato. Nesse caso, um valor Number é formatado com um NumberFormat padrão (para a localidade), um valor Date é formatado com um DateFormat padrão (para a localidade) e, para qualquer outro valor, seu valor toString() é usado.
Um argumento pode especificar um tipo "simples" para o qual o objeto Format especificado é criado, armazenado em cache e usado.
Um argumento pode ter um tipo "complexo" com sub-padrões MessageFormat aninhados. Durante a formatação, uma dessas sub-mensagens é selecionada de acordo com o valor do argumento e formatada recursivamente.
Após a construção, um objeto Format personalizado pode ser definido para um argumento de nível superior, substituindo a formatação padrão e o comportamento de análise desse argumento. No entanto, a formatação personalizada pode ser obtida mais simplesmente escrevendo um argumento sem tipo na cadeia de caracteres padrão e fornecendo-lhe um valor de cadeia de caracteres pré-formatado.
Ao formatar, MessageFormat usa uma coleção de valores de argumento e grava uma cadeia de caracteres de saída. Os valores de argumento podem ser passados como uma matriz (quando o padrão contém apenas argumentos numerados) ou como um Mapa (que funciona para argumentos nomeados e numerados).
Cada argumento é correspondido com um dos valores de entrada por índice de matriz ou chave de mapa e formatado de acordo com sua especificação de padrão (ou usando um objeto Format personalizado se um foi definido). Um argumento de padrão numerado é correspondido com uma chave de mapa que contém esse número como uma cadeia de caracteres ASCII-decimal-digit (sem zero à esquerda).
<h3>"patterns">Patterns and Their Interpretation</h3>
MessageFormat usa padrões do seguinte formulário: <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 pode conter cadeias de caracteres literais entre aspas, incluindo caracteres de sintaxe. Uma cadeia de caracteres literal entre aspas começa com um apóstrofo ASCII e um caractere de sintaxe (geralmente uma {chaves}) e continua até o próximo apóstrofo único. Um apóstrofo ASCII duplo dentro ou fora de uma cadeia de caracteres entre aspas representa um apóstrofo literal.
<os caracteres de sintaxe li>Quotable são o {chaves} em todas as partes messageText, além do sinal '#' em um messageText imediatamente dentro de um pluralStyle e o símbolo '|' em um messageText imediatamente dentro de um choiceStyle.
<li>See also MessagePattern.ApostropheMode<li>In argStyleText, every single ASCII apostrophe begins and ends quoted literal text, and unquoted {curly braces} must occur in matched pairs.
</ul>
Recomendação: use o caractere apóstrofo real (aspa única) \\u2019 para texto legível por humanos e use o apóstrofo ASCII (\\u0027 ' ) apenas na sintaxe do programa, como aspas em MessageFormat. Confira as anotações de Apóstrofo U+0027 no Padrão Unicode.
O choice tipo de argumento foi preterido. Use plural argumentos para seleção plural adequada e select argumentos para seleção simples entre um conjunto fixo de opções.
Os argType valores e os argStyle valores são usados para criar uma Format instância para o elemento de formato. A tabela a seguir mostra como os valores são mapeados para instâncias de formato. Combinações não mostradas na tabela são ilegais. Qualquer argStyleText um deve ser uma cadeia de caracteres padrão válida para a subclasse Format usada.
<table border=1><tr><th>argType <th>argStyle <th>resulting Format object <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 td>currency<>NumberFormat.getCurrencyInstance(getLocale())<tr><td 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 td>short<>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>full<tr>DateFormat.getDateInstance(DateFormat.FULL, getLocale())td<><>argStyleText <td>new SimpleDateFormat(argStyleText, getLocale())<tr><td rowspan=6>time<td>(none)<td>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())<tr><td td>short<>DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())<tr><td td>medium<td>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())<><td>long<td>DateFormat.getTimeInstance(DateFormat.LONG, getLocale())<tr><td>full<td>DateFormat.getTimeInstance(DateFormat.FULL, getLocale())<tr><td>argStyleText<td>new SimpleDateFormat(argStyleText, getLocale())<tr><td td>spellout<>argStyleText (opcional)<td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.SPELLOUT) <br> .setDefaultRuleset(argStyleText);<tr><td td>ordinal<>argStyleText (opcional)<td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.ORDINAL) <br> .setDefaultRuleset(argStyleText);<tr><td td>duration<>argStyleText (opcional)<td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.DURATION) <br> .setDefaultRuleset(argStyleText);</table>
<h4>"diffsjdk">Diferenças de java.text.MessageFormat</h4>
O MessageFormat da UTI dá suporte a argumentos nomeados e numerados, enquanto o JDK MessageFormat dá suporte apenas a argumentos numerados. Argumentos nomeados tornam os padrões mais legíveis.
A UTI implementa uma sintaxe de citação de apóstrofo mais amigável. No texto da mensagem, um apóstrofo só começa a citar texto literal se ele imediatamente precede um caractere de sintaxe (principalmente {chaves}).<br> No JDK MessageFormat, um apóstrofo sempre começa a citar, o que exige que textos comuns como "não" e "aujourd'hui" sejam escritos com apóstrofos duplicados como "não" e "aujourd''hui". Para obter mais detalhes, consulte MessagePattern.ApostropheMode.
A UTI não cria um objeto ChoiceFormat para um choiceArg, pluralArg ou selectArg, mas manipula esses argumentos em si. O JDK MessageFormat cria e usa um objeto ChoiceFormat (new ChoiceFormat(argStyleText)). O JDK não dá suporte a argumentos plural e selecionados.
<Informações> de uso h4</h4>
Aqui estão alguns exemplos de uso: <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> Normalmente, o formato da mensagem virá dos recursos e os argumentos serão definidos dinamicamente em runtime.
Exemplo 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>
Para mensagens que incluem formulários plural, você pode usar um argumento plural:
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".
Consulte PluralFormat e PluralRules para obter detalhes.
<h4>"synchronization">Synchronization</h4>
MessageFormats não são sincronizados. É recomendável criar instâncias de formato separadas para cada thread. Se vários threads acessarem um formato simultaneamente, ele deverá ser sincronizado externamente.
Java documentação para android.icu.text.MessageFormat.
Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Project Open Source do Open Source e usadas de acordo com os termos descritos na Creative Commons 2.5.
Construtores
| Nome | Description |
|---|---|
| MessageFormat(IntPtr, JniHandleOwnership) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| MessageFormat(String, Locale) |
Constrói um MessageFormat para a localidade e o padrão especificados. |
| MessageFormat(String, ULocale) |
Constrói um MessageFormat para a localidade e o padrão especificados. |
| MessageFormat(String) |
Constrói um MessageFormat para a localidade padrão |
Propriedades
| Nome | Description |
|---|---|
| ApostropheMode |
<strong>[icu enhancement]</strong> ICU's replacement for |
| ArgumentNames |
<strong>[icu]</strong> Retorna os nomes de argumento de nível superior. |
| Class |
Retorna a classe de runtime deste |
| Handle |
O identificador para a instância subjacente do Android. (Herdado de Object) |
| JniIdentityHashCode |
Obtém o código de hash de identidade atribuído a esse par Java pelo runtime de interoperabilidade. (Herdado de Object) |
| JniManagedPeerState |
<strong>[icu enhancement]</strong> ICU's replacement for |
| JniPeerMembers |
<strong>[icu enhancement]</strong> ICU's replacement for |
| Locale |
Retorna a localidade usada ao criar ou comparar subformatações. -ou- Define a localidade a ser usada para criar objetos de formato de argumento. |
| PeerReference |
Obtém a referência de objeto JNI para este par Java. (Herdado de Object) |
| ThresholdClass |
<strong>[icu enhancement]</strong> ICU's replacement for |
| ThresholdType |
<strong>[icu enhancement]</strong> ICU's replacement for |
| ULocale |
<strong>[icu]</strong> Retorna a localidade usada ao criar objetos de formato de argumento. |
Métodos
| Nome | Description |
|---|---|
| ApplyPattern(String, MessagePattern+ApostropheMode) |
[UTI] Define o ApostropheMode e o padrão usado por esse formato de mensagem. |
| ApplyPattern(String) |
Define o padrão usado por este formato de mensagem. |
| AutoQuoteApostrophe(String) |
<strong>[icu]</strong> Converte um padrão 'apostrophe-friendly' em um padrão padrão. |
| Clone() |
Cria e retorna uma cópia desse objeto. (Herdado de _Format) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| Dispose() |
Libera os recursos mantidos por esse par Java. (Herdado de Object) |
| Dispose(Boolean) |
Libera os recursos mantidos por esse par Java. (Herdado de Object) |
| DisposeUnlessReferenced() |
<strong>[icu enhancement]</strong> ICU's replacement for |
| Equals(Object) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| Equals(Object) |
Indica se algum outro objeto é "igual a" este. (Herdado de Object) |
| Format(IDictionary<String,Object>, StringBuffer, FieldPosition) |
Formata um mapa de objetos e acrescenta o |
| Format(Object, StringBuffer, FieldPosition) |
Formata um mapa ou matriz de objetos e acrescenta o |
| Format(Object) |
Formata um objeto para produzir uma cadeia de caracteres. (Herdado de _Format) |
| Format(Object[], StringBuffer, FieldPosition) |
Formata uma matriz de objetos e acrescenta o |
| Format(String, IDictionary<String,Object>) |
Cria um MessageFormat com o padrão fornecido e o usa para formatar os argumentos fornecidos. |
| Format(String, Object[]) |
Cria um MessageFormat com o padrão fornecido e o usa para formatar os argumentos fornecidos. |
| FormatToCharacterIterator(Object) |
Formata um objeto que produz um |
| GetFormatByArgumentName(String) |
<strong>[icu]</strong> Retorna o primeiro formato de nível superior associado ao nome do argumento fornecido. |
| GetFormats() |
Retorna os objetos Format usados para os elementos de formato na cadeia de caracteres de padrão definida anteriormente. |
| GetFormatsByArgumentIndex() |
Retorna os objetos Format usados para os valores passados em |
| GetHashCode() |
Retorna um valor de código hash para o objeto. (Herdado de Object) |
| JavaFinalize() |
Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto. (Herdado de Object) |
| Notify() |
Ativa um único thread que está aguardando no monitor deste objeto. (Herdado de Object) |
| NotifyAll() |
Ativa todos os threads que estão aguardando no monitor deste objeto. (Herdado de Object) |
| Parse(String, ParsePosition) |
Analisa a cadeia de caracteres. |
| Parse(String) |
Analisa o texto desde o início da cadeia de caracteres fornecida para produzir uma matriz de objetos. |
| ParseObject(String, ParsePosition) |
Analisa o texto de uma cadeia de caracteres para produzir uma matriz de objetos ou Mapa. |
| ParseObject(String) |
Analisa o texto desde o início da cadeia de caracteres fornecida para produzir um objeto. (Herdado de _Format) |
| ParseToMap(String, ParsePosition) |
<strong>[icu]</strong> Analisa a cadeia de caracteres, retornando os resultados em um Mapa. |
| ParseToMap(String) |
<strong>[icu]</strong> Parses text from the beginning of the given string to produce a map from argument to values. |
| SetFormat(Int32, _Format) |
Define o objeto Format a ser usado para o elemento de formato com o índice de elemento de formato fornecido dentro da cadeia de caracteres de padrão definida anteriormente. |
| SetFormatByArgumentIndex(Int32, _Format) |
Define o objeto Format a ser usado para os elementos de formato dentro da cadeia de caracteres de padrão definida anteriormente que usa o índice de argumento fornecido. |
| SetFormatByArgumentName(String, _Format) |
<strong>[icu]</strong> Define o objeto Format a ser usado para os elementos de formato dentro da cadeia de caracteres de padrão definida anteriormente que usam o nome do argumento fornecido. |
| SetFormats(_Format[]) |
Define os objetos Format a serem usados para os elementos de formato na cadeia de caracteres de padrão definida anteriormente. |
| SetFormatsByArgumentIndex(_Format[]) |
Define os objetos Format a serem usados para os valores passados em |
| SetFormatsByArgumentName(IDictionary<String,_Format>) |
<strong>[icu]</strong> Define os objetos Format a serem usados para os valores passados em |
| SetHandle(IntPtr, JniHandleOwnership) |
Define a propriedade Handle (Herdado de Object) |
| SetLocale(ULocale) |
Define a localidade a ser usada para criar objetos de formato de argumento. |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| ToArray<T>() |
Cria uma matriz gerenciada com base nesse wrapper de matriz Java. (Herdado de Object) |
| ToPattern() |
Retorna a cadeia de caracteres de padrão aplicada. |
| ToString() |
Retorna uma representação de cadeia de caracteres do objeto. (Herdado de Object) |
| UnregisterFromRuntime() |
Cancela o registro desse par Java do runtime de interoperabilidade. (Herdado de Object) |
| UsesNamedArguments() |
<strong>[icu]</strong> Retorna true se este MessageFormat usa argumentos nomeados e false caso contrário. |
| Wait() |
Faz com que o thread atual aguarde até ser despertado, normalmente por ser <notificado/em> ou <em>interrompido</em>.<> (Herdado de Object) |
| Wait(Int64, Int32) |
Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido. (Herdado de Object) |
| Wait(Int64) |
Faz com que o thread atual aguarde até que ele seja despertado, normalmente por ser <>notificado</em> ou <em>interrompido</em>, ou até que uma determinada quantidade de tempo real tenha decorrido. (Herdado de Object) |
Implantações explícitas de interface
| Nome | Description |
|---|---|
| IJavaPeerable.Disposed() |
<strong>[icu enhancement]</strong> ICU's replacement for |
| IJavaPeerable.Finalized() |
<strong>[icu enhancement]</strong> ICU's replacement for |
| IJavaPeerable.JniObjectReferenceControlBlock |
<strong>[icu enhancement]</strong> ICU's replacement for |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| IJavaPeerable.UnregisterFromRuntime() |
<strong>[icu enhancement]</strong> ICU's replacement for |
Métodos de Extensão
| Nome | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtém o nome JNI do tipo da instância |
| JavaAs<TResult>(IJavaPeerable) |
Tente coagir a digitar |
| JavaCast<TResult>(IJavaObject) |
Executa uma conversão de tipo marcada por runtime do Android. |
| JavaCast<TResult>(IJavaObject) |
<strong>[icu enhancement]</strong> ICU's replacement for |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Tente coagir a digitar |