MessageFormat クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
<strong>[icu enhancement]</strong> 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 enhancement]</strong> ICU の java.text.MessageFormat の置き換え。 ICU に固有のメソッド、フィールド、およびその他の機能には、"<strong>[icu]</strong>' というラベルが付けられます。
MessageFormat は、省略可能な引数 (変数/プレースホルダー) を使用して、ユーザーに表示する文字列を準備します。 引数は任意の順序で行うことができます。これは、文法が異なる言語への翻訳に必要です。
MessageFormat は、{中かっこ} の引数を含む <em>pattern</em> 文字列から作成され、書式設定された値に置き換えられます。
MessageFormat他のFormatクラスとは異なり、(MessageFormatスタイルのファクトリメソッドではなく) コンストラクターのいずれかを使用してgetInstanceオブジェクトを作成します。
MessageFormat自体はロケール固有の動作を実装していないため、ファクトリ メソッドは必要ありません。 ロケール固有の動作は、指定したパターンと、挿入された引数に使用されるサブフォーマットによって定義されます。
引数には、(識別子を使用して) 名前を付けるか、番号を付けることができます (小さな ASCII 桁の整数を使用)。 一部の API メソッドは引数番号でのみ動作し、パターンに名前付き引数がある場合は例外をスローします ( #usesNamedArguments()を参照)。
引数で書式の種類が指定されていない場合があります。 この場合、数値の値は既定の (ロケールの場合) NumberFormat で書式設定され、Date 値は既定の (ロケールの場合) DateFormat で書式設定され、その他の値には toString() 値が使用されます。
引数には、指定した Format オブジェクトを作成、キャッシュ、および使用する "simple" 型を指定できます。
引数には、入れ子になった MessageFormat サブパターンを持つ "複合" 型が含まれます。 書式設定中に、これらのサブメッセージの 1 つが引数の値に従って選択され、再帰的に書式設定されます。
構築後、最上位レベルの引数にカスタム Format オブジェクトを設定し、その引数の既定の書式設定と解析動作をオーバーライドできます。 ただし、パターン文字列に型指定なしの引数を記述し、書式設定済みの文字列値を指定するだけで、カスタム書式設定をより簡単に行うことができます。
書式設定時に、MessageFormat は引数値のコレクションを受け取り、出力文字列を書き込みます。 引数の値は、配列 (パターンに番号付き引数のみが含まれている場合) または Map (名前付き引数と番号付き引数の両方で機能する) として渡すことができます。
各引数は、配列インデックスまたはマップ キーによって入力値の 1 つと照合され、そのパターン仕様に従って書式設定されます (または、設定されている場合はカスタム Format オブジェクトを使用します)。 番号付きパターン引数は、その数値を ASCII 10 進数の文字列 (先頭に 0 を付けずに) を含むマップ キーと一致します。
<h3>"patterns">Patterns とその解釈</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 アポストロフィと構文文字 (通常は {中かっこ}) で始まり、次の単一アポストロフィまで続きます。 引用符で囲まれた文字列の内側または外側の二重 ASCII アポストロフィは、1 つのリテラル アポストロフィを表します。
<li>Quotable 構文文字は、すべての messageText 部分の {中かっこ} に加えて、pluralStyle 内の messageText の '#' 記号と、choiceStyle 内の messageText 内の '|' 記号です。
<li>See も MessagePattern.ApostropheMode<li>In argStyleText では、ASCII アポストロフィが引用符で囲まれたリテラル テキストの開始と終了を行い、引用符で囲まれていない {中かっこ} は一致するペアで行う必要があります。
</ul>
推奨事項: 人間が判読できるテキストには実際のアポストロフィ (単一引用符) 文字 \\u2019 を使用し、MessageFormat での引用符のように、プログラム構文でのみ ASCII アポストロフィ (\\u0027 ' ) を使用します。 Unicode 標準の U+0027 アポストロフィの注釈を参照してください。
choice引数の型は非推奨です。 適切な複数形の選択には plural 引数を使用し、固定の選択肢の中から単純な選択を行うには select 引数を使用します。
argType値とargStyle値は、format 要素のFormat インスタンスを作成するために使用されます。 次の表は、値が Format インスタンスにどのようにマップされるかを示しています。 表に示されていない組み合わせは無効です。 すべての argStyleText は、使用する Format サブクラスの有効なパターン文字列である必要があります。
<table border=1><tr><th>argType <th>argStyle <th>resulting Format オブジェクト <tr><td colspan=2>(none)<td>null<tr><>number<td=5td>(none)<td>NumberFormat.getInstance(getLocale())<tr><td>integer<tr>NumberFormat.getIntegerInstance(getLocale())<td><>currency<td>NumberFormat.getCurrencyInstance(getLocale())<tr><td>percent<td>NumberFormat.getPercentInstance(getLocale())<tr><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>full<tr>DateFormat.getDateInstance(DateFormat.FULL, getLocale())td<><td><>new SimpleDateFormat(argStyleText, getLocale())<tr><td rowspan=6>time<td>(none)<td>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())<tr><td>short<>DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())<tr><td>medium<>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())<tr><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>spellout<td>argStyleText (省略可能)<td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.SPELLOUT) <br> .setDefaultRuleset(argStyleText);<tr><td>ordinal<td>argStyleText (省略可能)<td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.ORDINAL) <br> .setDefaultRuleset(argStyleText);<tr><td>duration<td>argStyleText (省略可能)<td>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.DURATION) <br> .setDefaultRuleset(argStyleText);</table>
<h4>"diffsjdk">differences from java.text.MessageFormat</h4>
ICU MessageFormat では名前付き引数と番号付き引数の両方がサポートされますが、JDK MessageFormat では番号付き引数のみがサポートされます。 名前付き引数を指定すると、パターンの読みやすさが高くなります。
ICU は、よりわかりやすいアポストロフィ引用符構文を実装します。 メッセージ テキストでは、アポストロフィは、構文文字 (主に {中かっこ}) の直前にある場合にのみリテラル テキストの引用符を開始します。<br> JDK MessageFormat では、アポストロフィは常に引用符で囲み始めます。この場合、"don't" や "aujourd'hui" などの一般的なテキストを "don't" や "aujourd'hui" などの二重アポストロフィで記述する必要があります。 詳細については、 MessagePattern.ApostropheMode を参照してください。
ICU は choiceArg、pluralArg、または selectArg の ChoiceFormat オブジェクトを作成せず、このような引数自体を処理します。 JDK MessageFormat は ChoiceFormat オブジェクト (new ChoiceFormat(argStyleText)) を作成して使用します。 JDK では、複数形の引数と select 引数はサポートされていません。
<h4>Usage Information</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>
複数形を含むメッセージの場合は、複数形の引数を使用できます。
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>"synchronization">Synchronization</h4>
MessageFormats は同期されません。 スレッドごとに個別のフォーマット インスタンスを作成することをお勧めします。 複数のスレッドが同時に形式にアクセスする場合は、外部で同期する必要があります。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
| 名前 | 説明 |
|---|---|
| MessageFormat(IntPtr, JniHandleOwnership) |
<strong>[icu enhancement]</strong> ICU の |
| MessageFormat(String, Locale) |
指定したロケールとパターンの MessageFormat を構築します。 |
| MessageFormat(String, ULocale) |
指定したロケールとパターンの MessageFormat を構築します。 |
| MessageFormat(String) |
既定の |
プロパティ
| 名前 | 説明 |
|---|---|
| ApostropheMode |
<strong>[icu enhancement]</strong> ICU の |
| ArgumentNames |
<strong>[icu]</strong> 最上位の引数名を返します。 |
| Class |
この |
| Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
| JniIdentityHashCode |
相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。 (継承元 Object) |
| JniManagedPeerState |
<strong>[icu enhancement]</strong> ICU の |
| JniPeerMembers |
<strong>[icu enhancement]</strong> ICU の |
| Locale |
サブフォーマットを作成または比較するときに使用されるロケールを返します。 または、引数 Format オブジェクトの作成に使用するロケールを設定します。 |
| PeerReference |
このJava ピアの JNI オブジェクト参照を取得します。 (継承元 Object) |
| ThresholdClass |
<strong>[icu enhancement]</strong> ICU の |
| ThresholdType |
<strong>[icu enhancement]</strong> ICU の |
| ULocale |
<strong>[icu]</strong> 引数 Format オブジェクトの作成時に使用されるロケールを返します。 |
メソッド
| 名前 | 説明 |
|---|---|
| ApplyPattern(String, MessagePattern+ApostropheMode) |
[icu]ApostropheMode と、このメッセージ形式で使用されるパターンを設定します。 |
| ApplyPattern(String) |
このメッセージ形式で使用されるパターンを設定します。 |
| AutoQuoteApostrophe(String) |
<strong>[icu]</strong> 'アポストロフィに優しい' パターンを標準パターンに変換します。 |
| Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 _Format) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
<strong>[icu enhancement]</strong> ICU の |
| Dispose() |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| Dispose(Boolean) |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| DisposeUnlessReferenced() |
<strong>[icu enhancement]</strong> ICU の |
| Equals(Object) |
<strong>[icu enhancement]</strong> 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() |
|
| GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
| JavaFinalize() |
古い.
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
| Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
| NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
| Parse(String, ParsePosition) |
文字列を解析します。 |
| Parse(String) |
指定された文字列の先頭からテキストを解析して、オブジェクト配列を生成します。 |
| ParseObject(String, ParsePosition) |
文字列からテキストを解析して、オブジェクト配列または Map を生成します。 |
| ParseObject(String) |
指定された文字列の先頭からテキストを解析して、オブジェクトを生成します。 (継承元 _Format) |
| ParseToMap(String, ParsePosition) |
<strong>[icu]</strong> 文字列を解析し、結果を Map で返します。 |
| ParseToMap(String) |
<strong>[icu]</strong> 指定された文字列の先頭からテキストを解析して、引数から値へのマップを生成します。 |
| SetFormat(Int32, _Format) |
前に設定したパターン文字列内の指定された書式要素インデックスを持つ format 要素に使用する Format オブジェクトを設定します。 |
| SetFormatByArgumentIndex(Int32, _Format) |
指定された引数インデックスを使用する、以前に設定されたパターン文字列内の書式要素に使用する Format オブジェクトを設定します。 |
| SetFormatByArgumentName(String, _Format) |
<strong>[icu]</strong> 指定された引数名を使用する以前に設定されたパターン文字列内の書式要素に使用する Format オブジェクトを設定します。 |
| SetFormats(_Format[]) |
前に設定したパターン文字列の書式要素に使用する Format オブジェクトを設定します。 |
| SetFormatsByArgumentIndex(_Format[]) |
|
| SetFormatsByArgumentName(IDictionary<String,_Format>) |
<strong>[icu]</strong> |
| SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
| SetLocale(ULocale) |
引数 Format オブジェクトの作成に使用するロケールを設定します。 |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
<strong>[icu enhancement]</strong> ICU の |
| ToArray<T>() |
このJava配列ラッパーからマネージド配列を作成します。 (継承元 Object) |
| ToPattern() |
適用されたパターン文字列を返します。 |
| ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
| UnregisterFromRuntime() |
相互運用ランタイムからこのJava ピアの登録を解除します。 (継承元 Object) |
| UsesNamedArguments() |
<strong>[icu]</strong> この MessageFormat が名前付き引数を使用する場合は true、それ以外の場合は false を返します。 |
| Wait() |
現在のスレッドが起動するまで待機します。通常は、 <em>notified</em> または <em>interrupted</em>。 (継承元 Object) |
| Wait(Int64, Int32) |
現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。 (継承元 Object) |
| Wait(Int64) |
現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。 (継承元 Object) |
明示的なインターフェイスの実装
| 名前 | 説明 |
|---|---|
| IJavaPeerable.Disposed() |
<strong>[icu enhancement]</strong> ICU の |
| IJavaPeerable.Finalized() |
<strong>[icu enhancement]</strong> ICU の |
| IJavaPeerable.JniObjectReferenceControlBlock |
<strong>[icu enhancement]</strong> ICU の |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
<strong>[icu enhancement]</strong> ICU の |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
<strong>[icu enhancement]</strong> ICU の |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
<strong>[icu enhancement]</strong> ICU の |
| IJavaPeerable.UnregisterFromRuntime() |
<strong>[icu enhancement]</strong> ICU の |
拡張メソッド
| 名前 | 説明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
インスタンス |
| JavaAs<TResult>(IJavaPeerable) |
|
| JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
| JavaCast<TResult>(IJavaObject) |
<strong>[icu enhancement]</strong> ICU の |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
|