MessageFormat クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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 とその解釈</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}" ではなく文字列を表します。 単一引用符自体は、''全体で二重引用符で表す必要があります。 たとえば、パターン文字列"'{''}'"は、文字列'{を表す'' (引用符の開始と左中かっこ)、}' (単一引用符)、< (右中かっこと引用符の終わり)、>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>Warning:</b><dd>残念ながらメッセージ形式パターン内で引用符を使用するための規則は、やや混乱していることが示されています。 特に、単一引用符を 2 倍にする必要があるかどうかは、ローカライザーには必ずしも明白ではありません。 ルールについてローカライザーに通知し、 MessageFormatによって処理される文字列を (たとえば、リソース バンドル ソース ファイルのコメントを使用して) 伝えてください。 ローカライザーは、元のバージョンに含まれていない翻訳された文字列で単一引用符を使用する必要がある場合があることに注意してください。
</dl>
ArgumentIndex 値は、'0'を介して'9'桁を使用して書き込まれた負でない整数であり、arguments メソッドに渡されるformat配列またはparse メソッドによって返される結果配列へのインデックスを表します。
FormatType 値と FormatStyle 値は、format 要素のFormat インスタンスを作成するために使用されます。 次の表は、値が Format インスタンスにどのようにマップされるかを示しています。 表に示されていない組み合わせは無効です。
SubformatPattern は、使用するFormat サブクラスの有効なパターン文字列である必要があります。
<table class="plain"><caption style="display:none"> FormatType 値と FormatStyle 値が Format インスタンスにどのようにマップされるかを示します</caption><thead><tr><th scope="col" class="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">(none)<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())<tr><th scope="row" style="text-weight: normal">integer<td>NumberFormat#getIntegerInstance(Locale) NumberFormat.getIntegerInstance(getLocale())<tr><th scope="row" style="text-weight: normal">currency<td>NumberFormat#getCurrencyInstance(Locale) NumberFormat.getCurrencyInstance(getLocale())<tr><th scope="row" style="text-weight: normal">percent<td>NumberFormat#getPercentInstance(Locale) NumberFormat.getPercentInstance(getLocale())<tr><th scope="row" style="text-weight: normal">SubformatPattern<td>newDecimalFormat#DecimalFormat(String,DecimalFormatSymbols) DecimalFormat(subformatPattern,DecimalFormatSymbols#getInstance(Locale) DecimalFormatSymbols.getInstance(getLocale()))<tr><th scope="row " style="text-weight: normal" rowspan=6>date<th scope="row" style="text-weight: normal">(none)<td>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#DEFAULT, getLocale())<tr><th scope="row" style="text-weight: normal">short<td>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#SHORT, getLocale())<tr><th scope="row" style="text-weight: normal">medium<td>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#DEFAULT, getLocale())<tr><th scope="row" style="text-weight: normal">long<td>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#LONG, getLocale())<tr><th scope="row" style="text-weight: normal">full<td>DateFormat#getDateInstance(int,Locale) DateFormat.getDateInstance(DateFormat#FULL, getLocale())<tr><ththscope="row" style="text-weight: normal">SubformatPattern<td>newSimpleDateFormat#SimpleDateFormat(String,Locale) SimpleDateFormat(subformatPattern, getLocale())<tr><th scope="row" style="text-weight: normal" rowspan=6>time<th scope="row" style="text-weight: normal">(none)<td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#DEFAULT, getLocale())<tr><th scope="row" style="text-weight: normal">short<td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#SHORT, getLocale())<tr><th scope="row" style="text-weight: normal">medium<td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#DEFAULT, getLocale())<tr><th scope="row" style="text-weight: normal">long<td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#LONG, getLocale())<tr><th scope="row" style="text-weight: normal">full<td>DateFormat#getTimeInstance(int,Locale) DateFormat.getTimeInstance(DateFormat#FULL, getLocale())<tr><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を使用します。これは内部的に 1 回限りの使用のための 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>fileCountの値が異なる出力: <blockquote>
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>fileCountの値が異なる出力: <blockquote>
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> 前述のように、ChoiceFormatのMessageFormatによって生成される文字列は特殊として扱われます。'{' の出現はサブフォーマットを示し、再帰を引き起こすために使用されます。 (文字列パターンを使用する代わりに) MessageFormat と ChoiceFormat の両方をプログラムで作成する場合は、それ自体が再帰する形式を生成しないように注意してください。これにより、無限ループが発生します。
文字列内で 1 つの引数が複数回解析された場合、最後の一致は解析の最終結果になります。 たとえば、 <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>"synchronization">Synchronization</h3>
メッセージ形式は同期されません。 スレッドごとに個別のフォーマット インスタンスを作成することをお勧めします。 複数のスレッドが同時に形式にアクセスする場合は、外部で同期する必要があります。
1.1 で追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
| 名前 | 説明 |
|---|---|
| MessageFormat(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
| MessageFormat(String, Locale) |
指定したロケールとパターンの MessageFormat を構築します。 |
| MessageFormat(String) |
既定の |
プロパティ
| 名前 | 説明 |
|---|---|
| Class |
この |
| Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
| JniIdentityHashCode |
相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。 (継承元 Object) |
| JniManagedPeerState |
|
| JniPeerMembers |
|
| Locale |
サブフォーマットを作成または比較するときに使用されるロケールを取得します。 または、サブフォーマットの作成時または比較時に使用するロケールを設定します。 |
| PeerReference |
このJava ピアの JNI オブジェクト参照を取得します。 (継承元 Object) |
| ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
| ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
メソッド
| 名前 | 説明 |
|---|---|
| ApplyPattern(String) |
このメッセージ形式で使用されるパターンを設定します。 |
| Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 _Format) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
|
| Dispose() |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| Dispose(Boolean) |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| DisposeUnlessReferenced() |
|
| Equals(Object) |
|
| Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
| Format(Object, StringBuffer, FieldPosition) |
オブジェクトの配列を書式設定し、 |
| Format(Object) |
文字列を生成するオブジェクトを書式設定します。 (継承元 _Format) |
| Format(Object[], StringBuffer, FieldPosition) |
オブジェクトの配列を書式設定し、 |
| Format(String, Object[]) |
オブジェクトの配列を書式設定し、 <code>MessageFormat</code> のパターンを書式設定されたオブジェクトに置き換えた書式要素を指定された <code>StringBuffer</code>に追加します。 |
| FormatToCharacterIterator(Object) |
|
| GetFormats() |
前に設定したパターン文字列の書式要素に使用される書式を取得します。 |
| GetFormatsByArgumentIndex() |
|
| GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
| JavaFinalize() |
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
| Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
| NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
| Parse(String, ParsePosition) |
文字列を解析します。 |
| Parse(String) |
指定された文字列の先頭からテキストを解析して、オブジェクト配列を生成します。 |
| ParseObject(String, ParsePosition) |
文字列からテキストを解析して、オブジェクト配列を生成します。 |
| ParseObject(String) |
指定された文字列の先頭からテキストを解析して、オブジェクトを生成します。 (継承元 _Format) |
| SetFormat(Int32, _Format) |
前に設定したパターン文字列内の指定された書式要素インデックスを持つ書式要素に使用する書式を設定します。 |
| SetFormatByArgumentIndex(Int32, _Format) |
指定された引数インデックスを使用する、以前に設定されたパターン文字列内の書式要素に使用する書式を設定します。 |
| SetFormats(_Format[]) |
前に設定したパターン文字列の書式要素に使用する書式を設定します。 |
| SetFormatsByArgumentIndex(_Format[]) |
|
| SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
|
| ToArray<T>() |
このJava配列ラッパーからマネージド配列を作成します。 (継承元 Object) |
| ToPattern() |
メッセージ形式の現在の状態を表すパターンを返します。 |
| ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
| UnregisterFromRuntime() |
相互運用ランタイムからこのJava ピアの登録を解除します。 (継承元 Object) |
| 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() |
|
| IJavaPeerable.Finalized() |
|
| IJavaPeerable.JniObjectReferenceControlBlock |
|
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
|
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
|
| IJavaPeerable.SetPeerReference(JniObjectReference) |
|
| IJavaPeerable.UnregisterFromRuntime() |
|
拡張メソッド
| 名前 | 説明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
インスタンス |
| JavaAs<TResult>(IJavaPeerable) |
|
| JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
| JavaCast<TResult>(IJavaObject) |
|
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
|