Язык

MessageFormat Класс

Определение

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

[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
Наследование
Атрибуты

Комментарии

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке. Используйте это для создания сообщений, отображаемых для конечных пользователей.

MessageFormat принимает набор объектов, форматирует их, а затем вставляет форматированные строки в шаблон в соответствующие места.

<strong>Note:</strong>MessageFormat отличается от других Format классов, в том, что вы создаете MessageFormat объект с одним из его конструкторов (не с методом getInstance фабрики стилей). Методы фабрики не нужны, так как MessageFormat сама по себе не реализует конкретное поведение языкового стандарта. Любое поведение языкового стандарта определяется предоставленным шаблоном, а также подформатами, используемыми для вставленных аргументов.

<h2>"patterns">Patterns and Их Интерпретация</h2>

MessageFormat использует шаблоны следующей формы: <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>

В строке пара одинарных кавычек может использоваться для кавычки любых произвольных символов, кроме отдельных кавычек. Например, строка шаблона представляет строку "'{0}'""{0}", а не FormatElement. Одна кавычка должна быть представлена двойными однократными кавычками '' в строке. Например, строка "'{''}'" шаблона интерпретируется как последовательность '{ (начало кавычки и левая фигурная скобка), '' (одна кавычка) и }' (правый фигурный скобка и конец кавычки), <em>not</em>'{' и '}' (кавычки слева и правые фигурные скобки): представляющий строку"{'}", <em not>/em<>"{}".

SubformatPattern интерпретируется соответствующим подформатом, и применяются правила шаблона, зависящие от подформата. Например, строка "{1,number,<u>$'#',##</u>}" шаблона (SubformatPattern с подчеркиванием) создаст числовой формат с кавычками фунта, с таким результатом, как: "$#31,45" Дополнительные сведения см. в документации по каждому Format подклассу.

Любая несовпадная цитата рассматривается как закрытая в конце заданного шаблона. Например, строка "'{0шаблона "} рассматривается как шаблон "'{0""}.

Все фигурные скобки в неквалированном шаблоне должны быть сбалансированы. Например, "ab {0} de" и "ab '}' de" являются допустимыми шаблонами, но "ab {0'}' de""ab } de" и "''{''" не являются.

<dl><dt><b>Предупреждение:</b><dd>Правила использования кавычки в шаблонах формата сообщения, к сожалению, были несколько запутанными. В частности, это не всегда очевидно для локализаторов, должны ли одинарные кавычки быть двойными или нет. Обязательно сообщите локалиизаторам о правилах и сообщите им (например, используя примечания в исходных файлах пакета ресурсов), какие строки будут обрабатываться MessageFormat. Обратите внимание, что локализация может потребоваться использовать одинарные кавычки в переведенных строках, где у исходной версии их нет. </dl>

Значение ArgumentIndex — это неотрицательное целое число, записанное с помощью цифр '0''9', и представляет индекс в arguments массив format , передаваемый методам или результирующий массив, parse возвращаемый методами.

Значения FormatType и FormatStyle используются для создания Format экземпляра для элемента форматирования. В следующей таблице показано, как значения сопоставляются с Format экземплярами. Сочетания, не отображаемые в таблице, являются незаконными. SubformatPattern должен быть допустимой строкой шаблона для используемого подклассаFormat.

<table class="plain"caption style="display:none">How FormatType and FormatStyle values map to Format instances</caption><thead><tr><th scope="col" class="TableHeadingColor"FormatType th scope="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"><>(нет)<th scope="row" style="text-weight: normal">(none)<td>null<tr><th scope="row" style="text-weight: normal" rowspan=5>number<th scope="row-style="text-weight: normal">(none)<td>NumberFormat#getInstance(Locale) NumberFormat.getInstance(getLocale())<><th scope="row"style="text-weight: normal"td>integer<>tr th scope="text-weight="text-weight: normal"NumberFormat#getIntegerInstance(Locale) NumberFormat.getIntegerInstance(getLocale())<tr><th scope="text-weight: normal>currency<"td>NumberFormat#getCurrencyInstance(Locale) NumberFormat.getCurrencyInstance(getLocale())<tr><th scope="row" style="text-weight: normal">percent<td tr>NumberFormat#getPercentInstance(Locale) NumberFormat.getPercentInstanceth scope="row" style="text-weight: normal"(getLocale())<>td<><>newDecimalFormat#DecimalFormat(String,DecimalFormatSymbols) DecimalFormat(subformatPattern,DecimalFormatSymbols#getInstance(Locale) DecimalFormatSymbols.getInstance(getLocale()))<tr th scope="row-weight:"text-weight: normal" rowspan=6><>th scope="row" style="text-weight: normal"text-weight: normal"date<(none)>td<>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#DEFAULTtr, getLocale())<><th scope="row" style="text-weight: normal">short<td tr th scope="row" style="text-weight: normal"td>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#SHORT, getLocale())<><>medium<>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(trDateFormat#DEFAULT, getLocale())th scope="<><row" style="text-weight: normal">long<td>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#LONG, getLocale())<tr th scope="text-weight: normal"><>tdfull<>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#FULLtr th, getLocale())<>< scope="row" style="text-weight: normal">SubformatPattern<td>newSimpleDateFormat#SimpleDateFormat(String,Locale) SimpleDateFormat(subformatPattern, getLocale())<th><scope="row" style="text-weight: normal" rowspan=6>time<th scope="row-weight:"text-weight: normal">(none)<td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstanceth scope="row"text-weight: normal"(DateFormat#DEFAULT, getLocale())td tr<><>short<>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#SHORT, getLocale())<><th scope="row" style="text-weight: normal">medium<td tr th scope="row" style="text-weight: normal">DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(tdDateFormat#DEFAULT, getLocale())<><>long<>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#LONGtr, getLocale())<th scope="row" style="text-weight: normal"><>tdfull<>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#FULLtr, getLocale())<><th scope="row" style="text-weight: normal">SubformatPattern <td>newSimpleDateFormat#SimpleDateFormat(String,Locale) SimpleDateFormat(subformatPattern, getLocale())<tr><th scope="row" style="text-weight: normal">choice<th scope="row" style="text-weight: normal">SubformatPattern <td>newChoiceFormat#ChoiceFormat(String) ChoiceFormat(subformatPattern)</tbody></table>

<Сведения об> использовании h3</h3>

Ниже приведены некоторые примеры использования. В реальных международных программах шаблон формата сообщения и другие статические строки, конечно, будут получены из пакетов ресурсов. Другие параметры будут динамически определяться во время выполнения.

В первом примере используется статический метод MessageFormat.format, который внутренне создает MessageFormat однократное использование: <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 Выходные данные: >blockquote<>

At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.

</blockquote>

В следующем примере создается MessageFormat экземпляр, который можно использовать многократно: <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 Выходные данные с различными значениями для >: fileCountblockquote<>

The disk "MyDisk" contains 0 file(s).
            The disk "MyDisk" contains 1 file(s).
            The disk "MyDisk" contains 1,273 file(s).

</blockquote>

Для более сложных шаблонов можно использовать ChoiceFormat для создания правильных форм для сингулярного и множественного числа: <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 Выходные данные с различными значениями для >: fileCountblockquote<>

The disk "MyDisk" contains no files.
            The disk "MyDisk" contains one file.
            The disk "MyDisk" contains 1,273 files.

</blockquote>

Вы можете создать ChoiceFormat программно, как в приведенном выше примере, или с помощью шаблона. См. ChoiceFormat для получения дополнительной информации. <blockquote>

{@code
            form.applyPattern(
               "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}.");
            }

</blockquote>

<strong>Note:</strong> , как показано выше, строка, созданная в ней ChoiceFormatMessageFormat , рассматривается как специальная; вхождения "{" используются для указания подформатов и причины рекурсии. Если вы создаете и MessageFormatChoiceFormat программно (вместо использования шаблонов строк), будьте осторожны, чтобы не создавать формат, который рекурсирует на себя, что приведет к бесконечному циклу.

Если один аргумент анализируется несколько раз в строке, последний матч будет окончательным результатом синтаксического анализа. Например, <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>

Аналогичным образом синтаксический анализ объекта MessageFormat с использованием шаблонов, содержащих несколько вхождения одного и того же аргумента, вернет последнее совпадение. Например, <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>"синхронизация">Синхронизация</h3>

Форматы сообщений не синхронизируются. Рекомендуется создать отдельные экземпляры формата для каждого потока. Если несколько потоков одновременно обращаются к формату, он должен быть синхронизирован вневне.

Добавлено в версии 1.1.

Java документации по java.text.MessageFormat.

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Конструкторы

Имя. Описание
MessageFormat(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

MessageFormat(String, Locale)

Создает MessageFormat для указанного языкового стандарта и шаблона.

MessageFormat(String)

Создает MessageFormat для языкового стандарта по умолчанию java.util.Locale.Category#FORMAT FORMAT и указанного шаблона.

Свойства

Имя. Описание
Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
JniIdentityHashCode

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

(Унаследовано от Object)
JniManagedPeerState

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
JniPeerMembers

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

Locale

Возвращает языковой стандарт, используемый при создании или сравнении подформатов. -или- Задает языковой стандарт, используемый при создании или сравнении подформатов.

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Имя. Описание
ApplyPattern(String)

Задает шаблон, используемый этим форматом сообщения.

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от _Format)
Construct(JniObjectReference, JniObjectReferenceOptions)

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
Dispose()

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
Dispose(Boolean)

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
DisposeUnlessReferenced()

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
Equals(Object)

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
Format(Object, StringBuffer, FieldPosition)

Форматирует MessageFormatмассив объектов и добавляет шаблон с элементами форматирования, замененными отформатированными объектами, в предоставленный StringBuffer.

Format(Object)

Форматирует объект для создания строки.

(Унаследовано от _Format)
Format(Object[], StringBuffer, FieldPosition)

Форматирует MessageFormatмассив объектов и добавляет шаблон с элементами форматирования, замененными отформатированными объектами, в предоставленный StringBuffer.

Format(String, Object[])

Форматирует <массив объектов и добавляет шаблон MessageFormat>/code< кода>с элементами форматирования, замененными отформатированными объектами, в предоставленный <код StringBuffer>/code<>.

FormatToCharacterIterator(Object)

Форматирует объект, создающий AttributedCharacterIteratorобъект.

(Унаследовано от _Format)
GetFormats()

Возвращает форматы, используемые для элементов формата в строке шаблона, заданной ранее.

GetFormatsByArgumentIndex()

Возвращает форматы, используемые для значений, передаваемых в format методы или возвращаемые из parse методов.

GetHashCode()

Возвращает хэш-значение кода для объекта.

(Унаследовано от Object)
JavaFinalize()
Устаревшие.

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
Notify()

Просыпается один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
Parse(String, ParsePosition)

Анализирует строку.

Parse(String)

Анализирует текст с начала заданной строки для создания массива объектов.

ParseObject(String, ParsePosition)

Анализирует текст из строки для создания массива объектов.

ParseObject(String)

Анализирует текст с начала заданной строки для создания объекта.

(Унаследовано от _Format)
SetFormat(Int32, _Format)

Задает формат, используемый для элемента форматирования с заданным индексом элементов формата в строке шаблона, заданной ранее.

SetFormatByArgumentIndex(Int32, _Format)

Задает формат, используемый для элементов форматирования в строке шаблона, которая использует заданный индекс аргументов.

SetFormats(_Format[])

Задает форматы, используемые для элементов формата в ранее заданной строке шаблона.

SetFormatsByArgumentIndex(_Format[])

Задает форматы, используемые для значений, передаваемых в format методы или возвращаемые из parse методов.

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
ToArray<T>()

Создает управляемый массив из этого Java оболочки массива.

(Унаследовано от Object)
ToPattern()

Возвращает шаблон, представляющий текущее состояние формата сообщения.

ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

(Унаследовано от Object)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.>

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

Имя. Описание
IJavaPeerable.Disposed()

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
IJavaPeerable.Finalized()

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от JavaObject)
IJavaPeerable.UnregisterFromRuntime()

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

(Унаследовано от _Format)

Методы расширения

Имя. Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

MessageFormat предоставляет средства для создания сцепленных сообщений в нейтральном языке.

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к