MessageFormat Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
<strong>[icu усовершенствования]</строго> ICU для замены 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
- Наследование
- Атрибуты
Комментарии
<strong>[icu усовершенствования]</строго> ICU замены для java.text.MessageFormat.> Методы, поля и другие функциональные возможности, относящиеся к ICU, помечены как< strong>[icu]</strong>.
MessageFormat подготавливает строки для отображения пользователям с необязательными аргументами (переменными и заполнителями). Аргументы могут выполняться в любом порядке, что необходимо для перевода на языки с разными грамматиками.
MessageFormat создается из <строки em>pattern</em> с аргументами в {фигурные скобки}, которые будут заменены форматированными значениями.
MessageFormat отличается от других Format классов, в том, что вы создаете MessageFormat объект с одним из его конструкторов (не с методом фабрики стилей getInstance ). Методы фабрики не нужны, так как MessageFormat сама по себе не реализует поведение конкретного языкового стандарта. Любое поведение, зависящее от языкового стандарта, определяется предоставленным шаблоном и подформатами, используемыми для вставленных аргументов.
Аргументы можно назвать (с помощью идентификаторов) или нумеровать (с помощью небольших целых чисел ASCII). Некоторые методы API работают только с номерами аргументов и вызывают исключение, если шаблон имеет именованные аргументы (см. раздел #usesNamedArguments()).
Аргумент может не указывать какой-либо тип формата. В этом случае значение Number отформатировано по умолчанию (для языкового стандарта) NumberFormat, значение Date отформатировано по умолчанию (для языкового стандарта) DateFormat, а для любого другого значения используется значение toString().
Аргумент может указать "простой" тип, для которого создается указанный объект Format, кэшируется и используется.
Аргумент может иметь "сложный" тип с вложенными вложенными шаблонами MessageFormat. Во время форматирования один из этих вложенных сообщений выбирается в соответствии со значением аргумента и рекурсивно отформатирован.
После создания настраиваемый объект Format можно задать для аргумента верхнего уровня, переопределяя поведение форматирования и синтаксического анализа по умолчанию для этого аргумента. Однако настраиваемое форматирование можно сделать проще, написав бестипный аргумент в строке шаблона и предоставив его предварительно сформированным строковым значением.
При форматировании MessageFormat принимает коллекцию значений аргументов и записывает выходную строку. Значения аргументов могут передаваться в виде массива (если шаблон содержит только нумерованные аргументы) или в виде карты (которая работает как для именованных, так и нумерованных аргументов).
Каждый аргумент сопоставляется с одним из входных значений по индексу массива или ключу карты и отформатирован в соответствии со спецификацией шаблона (или с помощью пользовательского объекта Format, если он был задан). Аргумент нумерованного шаблона сопоставляется с ключом карты, который содержит это число в виде строки ASCII-десятичной цифры (без начального нуля).
<h3>"patterns">Patterns and Их Интерпретация</h3>
MessageFormat использует шаблоны следующей формы: <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 может содержать кавычек литеральные строки, включая символы синтаксиса. Процитированная строка литерала начинается с апострофа ASCII и синтаксического символа (обычно {curly brace}) и продолжается до следующего апострофа. Двойной apostrophe ASCII внутри или за пределами кавычек представляет один литерал апостроф.
<Символы>синтаксиса квоты — это {фигурные скобки} во всех частях messageText, а также вход "#" в messageText непосредственно внутри pluralStyle и символ "|" в сообщенииText сразу внутри элемента choiceStyle.
<li>see также MessagePattern.ApostropheMode<li>In argStyleText, каждый отдельный apostrophe ASCII начинается и заканчивается кавычки литерального текста, и неквотированные {фигурные скобки} должны происходить в сопоставленных парах.
</ul>
Рекомендация. Используйте реальный символ апострофа (одинарный кавычки) \\u2019 для текста, доступного для чтения человека, и используйте apostrophe ASCII (\\u0027 ' ) только в синтаксисе программы, например при кавычках в MessageFormat. См. заметки для Apostrophe U+0027 в Стандарте Юникода.
Тип choice аргумента устарел. Используйте plural аргументы для правильного выбора множественного числа и select аргументов для простого выбора между фиксированным набором вариантов.
argType Значения argStyle используются для создания Format экземпляра для элемента форматирования. В следующей таблице показано, как значения сопоставляется с экземплярами Format. Сочетания, не отображаемые в таблице, являются незаконными. Любое argStyleText должно быть допустимой строкой шаблона для используемого подкласса Format.
<table border=1><tr><th>argType <th argStyle >th<>результирующий объект <Format tr><td colspan=2>(none)<>null<td tr><td rowspan=5>number<td>(none)<>NumberFormat.getInstance(getLocale())<td tr><>integer<>NumberFormat.getIntegerInstance(getLocale())<td td tr><>currency<>NumberFormat.getCurrencyInstance(getLocale())<td td tr><>percent<>NumberFormat.getPercentInstance(getLocale())<> td<td>argStyleText<td>new DecimalFormat(argStyleText, new DecimalFormatSymbols(getLocale()))<tr><td rowspan=6>date<td>(none)<>DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())<><>short<>DateFormat.getDateInstance(DateFormat.SHORT, getLocale())<><>medium<>DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())<><>long<>DateFormat.getDateInstance(DateFormat.LONG, getLocale())<><>full<>DateFormat.getDateInstance(DateFormat.FULL, getLocale())<td tr td td trd td trd trd><>argStyleText td<>new SimpleDateFormat(argStyleText, getLocale())<tr><td rowspan=6>time<td>(none)<td>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())<tr><>short<>DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())<td td><>medium<>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())<><>long<>DateFormat.getTimeInstance(DateFormat.LONG, getLocale())<><>full<>DateFormat.getTimeInstance(DateFormat.FULL, getLocale())<trd><> argStyleText <td>new SimpleDateFormat(argStyleText, getLocale())<><>spellout<td td>argStyleText (необязательно)<td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.SPELLOUT) <br> .setDefaultRuleset(argStyleText);<trd td>< argStyleText (необязательно)td tr>ordinal<><>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.ORDINAL) <br> .setDefaultRuleset(argStyleText);<>td td<> argStyleText (необязательно)duration<><td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.DURATION) <br> .setDefaultRuleset(argStyleText);</table>
<h4>"diffsjdk">Отличия от java.text.MessageFormat</h4>
ICU MessageFormat поддерживает как именованные, так и нумерованные аргументы, а JDK MessageFormat поддерживает только нумерованные аргументы. Именованные аргументы делают шаблоны более читаемыми.
ICU реализует более удобный для пользователя синтаксис кавыкания апострофа. В тексте сообщения апостроха начинается только кавычки литерального текста, если он сразу же предшествует синтаксису (в основном {фигурные скобки}).<br> В JDK MessageFormat апострофа всегда начинается цитата, которая требует общего текста, например "не" и "aujourd'hui", чтобы быть написаны с двойными апострофами, такими как "не" и "aujourd'hui". Дополнительные сведения см. в следующей статье: MessagePattern.ApostropheMode.
ICU не создает объект ChoiceFormat для выбораArg, pluralArg или selectArg, а скорее обрабатывает такие аргументы. JDK MessageFormat создает и использует объект ChoiceFormat (new ChoiceFormat(argStyleText)). JDK не поддерживает множественное число и выбирает аргументы вообще.
<сведения об> использовании h4</h4>
Ниже приведены некоторые примеры использования: <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> обычно формат сообщения будет поступать из ресурсов, и аргументы будут динамически задаваться во время выполнения.
Пример 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>
Для сообщений, включающих формы множественного числа, можно использовать аргумент 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".
См PluralFormat . и PluralRules дополнительные сведения.
<h4>"синхронизация">Синхронизация</h4>
MessageFormats не синхронизированы. Рекомендуется создать отдельные экземпляры формата для каждого потока. Если несколько потоков одновременно обращаются к формату, он должен быть синхронизирован вневне.
Java документации по android.icu.text.MessageFormat.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Конструкторы
| Имя. | Описание |
|---|---|
| MessageFormat(IntPtr, JniHandleOwnership) |
<strong>[icu усовершенствования]</строго> ICU для замены |
| MessageFormat(String, Locale) |
Создает MessageFormat для указанного языкового стандарта и шаблона. |
| MessageFormat(String, ULocale) |
Создает MessageFormat для указанного языкового стандарта и шаблона. |
| MessageFormat(String) |
Создает MessageFormat для языкового стандарта по умолчанию |
Свойства
| Имя. | Описание |
|---|---|
| ApostropheMode |
<strong>[icu усовершенствования]</строго> ICU для замены |
| ArgumentNames |
<strong>[icu]</strong> Возвращает имена аргументов верхнего уровня. |
| Class |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
<strong>[icu усовершенствования]</строго> ICU для замены |
| JniPeerMembers |
<strong>[icu усовершенствования]</строго> ICU для замены |
| Locale |
Возвращает языковой стандарт, используемый при создании или сравнении подформатов. -или- Задает языковой стандарт, используемый для создания объектов аргумента Format. |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
<strong>[icu усовершенствования]</строго> ICU для замены |
| ThresholdType |
<strong>[icu усовершенствования]</строго> ICU для замены |
| ULocale |
<strong>[icu]</strong> Возвращает языковой стандарт, используемый при создании объектов format. |
Методы
| Имя. | Описание |
|---|---|
| ApplyPattern(String, MessagePattern+ApostropheMode) |
[icu] Задает ApostropheMode и шаблон, используемый в этом формате сообщения. |
| ApplyPattern(String) |
Задает шаблон, используемый этим форматом сообщения. |
| AutoQuoteApostrophe(String) |
<strong>[icu]</strong> преобразует шаблон apostrophe-friendly в стандартный шаблон. |
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от _Format) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
<strong>[icu усовершенствования]</строго> ICU для замены |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
<strong>[icu усовершенствования]</строго> ICU для замены |
| Equals(Object) |
<strong>[icu усовершенствования]</строго> ICU для замены |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| Format(IDictionary<String,Object>, StringBuffer, FieldPosition) |
Форматирует |
| Format(Object, StringBuffer, FieldPosition) |
Форматирует |
| Format(Object) |
Форматирует объект для создания строки. (Унаследовано от _Format) |
| Format(Object[], StringBuffer, FieldPosition) |
Форматирует |
| Format(String, IDictionary<String,Object>) |
Создает MessageFormat с заданным шаблоном и использует его для форматирования заданных аргументов. |
| Format(String, Object[]) |
Создает MessageFormat с заданным шаблоном и использует его для форматирования заданных аргументов. |
| FormatToCharacterIterator(Object) |
Форматирует объект, создающий |
| GetFormatByArgumentName(String) |
<strong>[icu]</strong> Возвращает первый формат верхнего уровня, связанный с заданным именем аргумента. |
| GetFormats() |
Возвращает объекты Format, используемые для элементов формата в ранее заданной строке шаблона. |
| GetFormatsByArgumentIndex() |
Возвращает объекты Format, используемые для значений, переданных в |
| GetHashCode() |
Возвращает хэш-значение кода для объекта. (Унаследовано от Object) |
| JavaFinalize() |
Устаревшие.
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| Notify() |
Просыпается один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| Parse(String, ParsePosition) |
Анализирует строку. |
| Parse(String) |
Анализирует текст с начала заданной строки для создания массива объектов. |
| ParseObject(String, ParsePosition) |
Анализирует текст из строки для создания массива объектов или map. |
| ParseObject(String) |
Анализирует текст с начала заданной строки для создания объекта. (Унаследовано от _Format) |
| ParseToMap(String, ParsePosition) |
<strong>[icu]</strong> анализирует строку, возвращая результаты в карте. |
| ParseToMap(String) |
<strong>[icu]</strong> Parses text с начала заданной строки для создания карты из аргумента в значения. |
| SetFormat(Int32, _Format) |
Задает объект Format, используемый для элемента форматирования с заданным индексом элементов формата в строке шаблона, заданной ранее. |
| SetFormatByArgumentIndex(Int32, _Format) |
Задает объект Format, используемый для элементов форматирования в строке шаблона, которая использует заданный индекс аргументов. |
| SetFormatByArgumentName(String, _Format) |
<strong>[icu]</strong> Задает объект Format, используемый для элементов форматирования в строке шаблона, которая использует заданное имя аргумента. |
| SetFormats(_Format[]) |
Задает объекты Format, которые будут использоваться для элементов форматирования в строке шаблона, заданной ранее. |
| SetFormatsByArgumentIndex(_Format[]) |
Задает объекты Format, которые будут использоваться для значений, переданных в |
| SetFormatsByArgumentName(IDictionary<String,_Format>) |
<strong>[icu]</strong> Задает объекты Format для использования для значений, передаваемых в |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetLocale(ULocale) |
Задает языковой стандарт, используемый для создания объектов format. |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
<strong>[icu усовершенствования]</строго> ICU для замены |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToPattern() |
Возвращает примененную строку шаблона. |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| UsesNamedArguments() |
<strong>[icu]</strong> Возвращает значение true, если этот аргумент MessageFormat использует именованные аргументы и false в противном случае. |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя. | Описание |
|---|---|
| IJavaPeerable.Disposed() |
<strong>[icu усовершенствования]</строго> ICU для замены |
| IJavaPeerable.Finalized() |
<strong>[icu усовершенствования]</строго> ICU для замены |
| IJavaPeerable.JniObjectReferenceControlBlock |
<strong>[icu усовершенствования]</строго> ICU для замены |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
<strong>[icu усовершенствования]</строго> ICU для замены |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
<strong>[icu усовершенствования]</строго> ICU для замены |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
<strong>[icu усовершенствования]</строго> ICU для замены |
| IJavaPeerable.UnregisterFromRuntime() |
<strong>[icu усовершенствования]</строго> ICU для замены |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
<strong>[icu усовершенствования]</строго> ICU для замены |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |