Transliterator クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Transliterator は、ある形式から別の形式にテキストを表記変換する抽象クラスです。
[Android.Runtime.Register("android/icu/text/Transliterator", ApiSince=29, DoNotGenerateAcw=true)]
public abstract class Transliterator : Java.Lang.Object
[<Android.Runtime.Register("android/icu/text/Transliterator", ApiSince=29, DoNotGenerateAcw=true)>]
type Transliterator = class
inherit Object
- 継承
- 属性
注釈
Transliterator は、ある形式から別の形式にテキストを表記変換する抽象クラスです。 最も一般的な種類の音訳器は、スクリプト、またはアルファベットの表記変換です。 たとえば、ロシア語からラテン語への音訳では、キリル文字で書かれたロシア語のテキストが、音素に同等のラテン文字に変更されます。 ロシア語から英語<>/em<>しません。 音訳は、翻訳とは異なり、単語や文の意味を参照せずに文字に対して動作します。
スクリプト変換は最も一般的な用途ですが、表記変換では実際には、より一般的なタスク クラスを実行できます。 実際、 Transliterator では、入力テキストのセグメントを新しいテキストに置き換えることを指定する非常に一般的な API を定義します。 この変換の詳細は、 Transliteratorのサブクラスによって完全に決定されます。
<b>Transliterator はステートレスです</b>
Transliterator オブジェクトは <em>stateless</em>; であり、 transliterate()の呼び出し間に情報は保持されません。 その結果、スレッドは同期せずに表記変換子を共有する可能性があります。 これにより、表記変換操作の複雑さが制限されているように見える場合があります。 実際には、サブクラスは、他の置換が不可能であることが判明するまでテキストの置換を遅らせ、複雑な音訳を実行します。 つまり、 Transliterator オブジェクトはステートレスですが、ソース テキスト自体は必要なすべての情報を具体化し、遅延操作によって任意の複雑さが可能になります。
<b>バッチ変換</b>
表記変換を実行する最も簡単な方法は、既存のテキストの文字列に対してすべて一度に実行することです。 これは、 <em>batch</em> 音訳と呼ばれます。 たとえば、文字列 input と音訳 tを指定すると、呼び出し
<blockquote>String result = t.transliterate(input); </blockquote>
は、それを表記変換し、結果を返します。 その他のメソッドを使用すると、クライアントは、帯域外情報 (テキスト スタイルなど) を保持するために、文字列の代わりに部分文字列を表記変換したり、 Replaceable オブジェクトを使用したりできます。
<b>Keyboard 表記変換</b>
<em>keyboard</em>、または増分表記変換が多少関係しています。 これは、ソース (通常はユーザーのキーボード) から一度に 1 文字ずつ、または他の断片的な方法で到着するテキストの音訳です。
キーボード表記変換では、 Replaceable バッファーにテキストが格納されます。 テキストが挿入されると、可能な限りその場で音訳されます。 つまり、バッファーの内容を表示する GUI では、新しい文字が到着するたびに変更されるテキストが表示される可能性があります。
単純なルールベースの表記変換を考えてみましょう。
<blockquote> th>{theta}<br> t>{tau} </blockquote>
ユーザーが "t" を入力した場合、次の文字が 'h' かどうかを確認するために表記変換子が待機しているため、何も起こりません。 これを解決するために、出力文字列に '|' でマークされたカーソルの概念が導入されています。
<blockquote> t>|{tau}<br> {tau}h>{theta} </blockquote>
ユーザーが 「t」と入力すると tau が表示され、次の文字が 'h' の場合、tau は θ に変わります。 これは、 transliterate()の呼び出し間でカーソル位置 (カーソル位置とは関係なく、GUI では非表示) を維持することによって実現されます。 通常、カーソルは挿入ポイントと一致しますが、上記のような場合は、カーソルがカーソルの前に置きます。
キーボード表記変換メソッドは、カーソル、開始、制限など、 transliterate()の呼び出しごとに更新される 3 つのインデックスのセットを保持します。 これらのインデックスはメソッドによって変更され、Position オブジェクトを介して渡され、渡されます。
startインデックスは、表記変換で見る部分文字列の先頭を示します。 テキストがコミットされると進みます (ただし、コミットされたインデックスではありません。 cursor)。 前述の cursor インデックスは、表記変換が最後に停止した時点をマークします。最後に達したため、または可能な入力の間であいまいさを解消するためにより多くの文字が必要だったためです。
cursorは、規則によって明示的に設定することもできます。
cursorインデックスの前の文字は固定されます。この入力シーケンス内の今後のキーボード表記変換呼び出しでは変更されません。
limit インデックスに新しいテキストが挿入されます。このインデックスは、表記変換によって検索される部分文字列の末尾を示します。
キーボード表記変換は、より多くの文字が到着することを前提としているため、操作は保守的です。 明確に変換できる場合にのみ表記変換されます。 それ以外の場合は、より多くの文字が到着するまで待機します。 ユーザーが何らかの入力終了操作を実行したために、今後予定されている文字がなくなったことをクライアント コードが認識した場合は、保留中の音訳を完了するために finishTransliteration() を呼び出す必要があります。
<b>Inverses</b>
表記変換子のペアは、相互に逆になる場合があります。 たとえば、表記変換 <b>A</b> が Unicode 値をインクリメントして文字を表記変換する場合 (つまり、"abc" ->"def")、および音訳 <b>B</b> は文字値をデクリメントし、 <b>A</b> は <b>B</b> の逆になります。 複合表記変換で <>b<AA>/b< を b>B</b> で構成した場合、結果は ID 表記変換子、つまり入力テキストを変更しない表記変換子になります。
TransliteratorメソッドgetInverse()、存在する場合は表記変換子の逆関数を返し、それ以外の場合はnull返します。 ただし、getInverse()の結果は、通常、真の数学的逆<></em>になります。 これは、真の逆表記変換器の作成が困難であるためです。 たとえば、文字 'A' を 'B' に変換する <b>AB</b> と、'B' を 'A' に表記変換する <b>BA</b> という 2 つの表記変換を考えてみましょう。 これらは正確な逆であると思われるかもしれません。
<blockquote>"A" x <b>AB</b> ->"B"<br> "B" x <b>BA</b> ->"A"</blockquote>
ここで、'x' は音訳を表します。 ただし、
<blockquote>"ABCD" x <b>AB</b> ->"BBCD"<br> "BBCD" x <b>BA</b> ->"AACD"</blockquote>
したがって、<b>AB</b><b>BA</b> は ID ではありません。 ただし、 <b>BA</b> は、 <b>AB</b> 逆であると考えられる場合があり、 <b>AB</b>.getInverse() が正当に <b>BA</b>を返す可能性があります。
<b>Filtering</b>
各表記変換にはフィルターがあり、フィルターによって選択された文字に対する変更が制限されます。 フィルターは、変更された文字のみに影響します。フィルター外の文字は、フィルターのコンテキストの一部のままです。 たとえば、次の例では、'x' がフィルターで除外され、y に変換されない場合でも、'a' の変換に影響します。
String rules = "x > y; x{a} > b; ";
Transliterator tempTrans = Transliterator.createFromRules("temp", rules, Transliterator.FORWARD);
tempTrans.setFilter(new UnicodeSet("[a]"));
String tempResult = tempTrans.transform("xa");
// results in "xb"
<b> ID と表示名</b>
表記変換子は、短い識別子文字列または <em>ID</em> によって指定されます。 ID は <em>source-destination</em> の形式に従います。ここで、 <em>source</em> は置き換えられるエンティティを表し、 <em>destination</em> はエンティティの置換 <em>source</em>を記述します。 エンティティは、スクリプトの名前、特定の文字シーケンス、または表記変換の変換に使用されるその他の何かである場合があります。 たとえば、ロシア語からラテン語への音訳は、"Russian-Latin" という名前になります。 キーボード エスケープ シーケンスから Latin-1 文字への表記変換には、"KeyboardEscape-Latin1" という名前を付ける場合があります。 慣例により、システム エンティティ名は英語で、単語の最初の文字は大文字になります。ユーザー エンティティ名は、ダッシュが含まれていない限り、任意の形式に従うことができます。
プログラム ID に加えて、表記変換オブジェクトには、ユーザー インターフェイスでのプレゼンテーションの表示名があり、 #getDisplayNameによって返されます。
<b>Composed 表記変換子</b>
「ラテンギリシャ語」のような組み込みのシステム表記変換に加えて、組み込みの <em>composed</em> 音訳器もあります。 これらは、2 つ以上のコンポーネント表記変換子を作成することによって実装されます。 たとえば、スクリプト "A"、"B"、"C"、および "D" があり、それらのすべてのペア間で音訳する場合は、"A-B"、"A-C"、"A-D"、"B-A",...,、"B-A"、"D-B"、"D-C" の 12 個の表記変換を記述する必要があります。 すべてのスクリプトを中間スクリプト "M" に変換できる場合は、12 個のルール セットを書き込む代わりに、"A~M"、"B~M"、"C~M"、"D~M"、"M~A"、"M~B"、"M~C"、"M~D" の 8 つを記述するだけで済みます。 (これは大きな勝利のようには思えないかもしれませんが、本当に2<em>n</em> 対です。 <em>n</em><sup>2</sup> - <em>n</em>,そのため <em>n</em> が大きくなると、ゲインが大きくなります。9 つのスクリプトでは、18 と 72 のルール セットが異なっています。大きな違いがあります)。ここでは、スクリプト区切り記号に "-" ではなく "~" を使用します。これは、指定された表記変換子が、そのまま使用されるのではなく、他のユーザーと構成されることを示します。
構成済みの表記変換子は、通常どおりにインスタンス化できます。 例えば、システム音訳器"Devanagari-Gujarati"は、"Devanagari~InterIndic" として内部的に構築された音訳器です。InterIndic~Gujarati". この音訳器がインスタンス化されると、外部には標準の音訳器のように見えます (例: getID() は "Devanagari-Gujarati" を返します)。
<b>Rule 構文</b>
一連のルールによって、翻訳の実行方法が決まります。 ルール セット内のルールはセミコロンで区切られます(';')。 リテラル セミコロンを含めるには、先頭に円記号 ('\') を付けます。 Unicode Pattern_White_Spaceは無視されます。 行の最初の空白以外の文字が '#' の場合、行全体はコメントとして無視されます。
ルールの各セットは、2 つのグループで構成されます。1 つは前方、1 つは逆になります。 これは、適用されない規則です。1 方向のルールを省略すると、その方向の翻訳によってソース テキストが変更されないという結果になります。 また、対称変換には双方向の順逆ルールを指定できます。
注: 表記変換規則の構文のもう 1 つの説明は 、「UTS #35 の変換ルール構文: Unicode LDML」セクションで入手できます。 ルールは、←と→と↔矢印記号を使用してそこに表示されます。 ICU では、これらと同等の ASCII シンボル < の両方がサポートされます。と >および <>。
Rule ステートメントは、次のいずれかの形式になります。
<dl><dt>$alefmadda=\\u0622;</dt><dd><strong>Variable definition.</strong> 左側の名前には、右側のテキストが割り当てられます。 この例では、このステートメントの後に、左側の名前のインスタンス 、>$alefmaddaは Unicode 文字 U+0622 に置き換えられます。 変数名は文字で始まる必要があり、文字、数字、およびアンダースコアのみで構成されます。 大文字と小文字が区別されます。 名前が重複すると例外がスローされます。つまり、変数を再定義することはできません。 右側には、任意の長さの整形式のテキストを含め、テキストがまったく含まれていない場合があります (>$empty=;>)。 右側には、埋め込まれた UnicodeSet パターン (例: >$softvowel=[eiyEIY]>.</dd><dt>ai>$alefmadda;</dt><dd><strong>Forward translation rule.</strong> このルールは、前方表記変換を実行するときに、左側の文字列が右側の文字列に変更されることを示します</dd><dt>ai<$alefmadda;</dt><dd><strong>Reverse translation rule.</strong> この規則では、逆音訳を実行するときに、右側の文字列が左側の文字列に変更されることを示します。</dd></dl>
<dl><dt>ai<>$alefmadda;</dt><dd><strong>双方向翻訳ルール.</strong> この規則では、前方表記変換を実行するときに右側の文字列が左の文字列に変更され、逆音訳を実行する場合はその逆が示されます。</dd></dl>
変換ルールは、 <em>match パターン</em> と <em>出力文字列</em>で構成されます。 一致パターンはリテラル文字で構成され、必要に応じてコンテキストの前に、必要に応じてコンテキストが続きます。 リテラル パターン文字などのコンテキスト文字は、表記変換されるテキスト内で一致する必要があります。 ただし、リテラル パターン文字とは異なり、出力テキストに置き換えられるわけではありません。 たとえば、パターン >abc{def}>は文字 >def>前に >abc>一致が成功した場合は 〗。 一致が成功した場合は、>def>は置き換えられますが、>abc>。 最後の '}' は省略可能であるため、>abc{def>は >abc{def}>。 もう 1 つの例として、>{123}456>(または >123}456>)リテラル パターン >123>の後に >456>。
正逆ルールの出力文字列は、リテラル パターン文字を置き換える文字で構成されます。 出力文字列に文字 '|' が含まれている場合は、置換後の <em>cursor</em> の場所を示します。 カーソルは、次の置換 (ある場合) が適用されるテキスト内のポイントです。 通常、カーソルは置換テキスト内に配置されます。ただし、実際には特殊文字 ' を使用して、前置コンテキストまたは次のコンテキストに配置できます。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
| Name | 説明 |
|---|---|
| Transliterator(IntPtr, JniHandleOwnership) |
既存のJava オブジェクトを表すマネージド インスタンスを作成します。 |
フィールド
| Name | 説明 |
|---|---|
| Forward |
古い.
表記変換器における順方向を示す方向定数、e. |
| Reverse |
古い.
表記変換器における逆方向を示す方向定数、e. |
プロパティ
| Name | 説明 |
|---|---|
| AvailableIDs |
登録済みの |
| AvailableSources |
登録済みの表記変換子のソース名に対する列挙を返します。 |
| Class |
この |
| Filter |
この表記変換で使用されるフィルターを返します。または、この表記変換でフィルターが使用されていない場合は |
| Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
| ID |
この表記変換のプログラム識別子を返します。 |
| Inverse |
この表記変換の逆関数を返します。 |
| JniIdentityHashCode |
相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。 (継承元 Object) |
| JniManagedPeerState |
|
| JniPeerMembers |
このJava バインドのメンバーにアクセスするために使用される JNI メタデータを取得します。 |
| MaximumContextLength |
この表記変換で必要な最も長いコンテキストの長さを返します。 |
| PeerReference |
このJava ピアの JNI オブジェクト参照を取得します。 (継承元 Object) |
| SourceSet |
この表記変換によって入力テキストで変更できるすべての文字のセットを返します。 |
| TargetSet |
この表記変換によって置換テキストとして生成される可能性があるすべての文字のセットを返します。 |
| ThresholdClass |
仮想メソッドディスパッチに使用されるJava クラスを取得します。 |
| ThresholdType |
このJava バインドを宣言するマネージド型を取得します。 |
メソッド
| Name | 説明 |
|---|---|
| Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
|
| CreateFromRules(String, String, DirectionOptions) |
指定したルール文字列から構築された |
| Dispose() |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| Dispose(Boolean) |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| DisposeUnlessReferenced() |
|
| Equals(Object) |
|
| Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
| FilteredTransliterate(IReplaceable, Transliterator+Position, Boolean) |
フィルターを考慮して、インデックスで指定されたテキストの部分文字列を表記変換します。 |
| FinishTransliteration(IReplaceable, Transliterator+Position) |
さらに多くの文字を待機していた保留中の表記変換を完了します。 |
| GetAvailableTargets(String) |
指定したソース名を持つ登録済みの表記変換子のターゲット名に対する列挙体を返します。 |
| GetAvailableVariants(String, String) |
指定したソース名とターゲット名を持つ登録済みの表記変換子のバリアント名に対する列挙体を返します。 |
| GetDisplayName(String, Locale) |
指定されたロケールのユーザーに表示するのに適した、この表記変換子の名前を返します。 |
| GetDisplayName(String, ULocale) |
指定されたロケールのユーザーに表示するのに適した、この表記変換子の名前を返します。 |
| GetDisplayName(String) |
既定の |
| GetElements() |
この表記変換を構成する要素を返します。 |
| GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
| GetInstance(String, Int32) |
ID を指定して |
| GetInstance(String) |
ID を指定して |
| JavaFinalize() |
古い.
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
| Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
| NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
|
| ToArray<T>() |
このJava配列ラッパーからマネージド配列を作成します。 (継承元 Object) |
| ToRules(Boolean) |
この表記変換の規則文字列を返します。 |
| ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
| Transliterate(IReplaceable, Int32, Int32) |
省略可能なフィルター処理を使用して、文字列のセグメントを表記変換します。 |
| Transliterate(IReplaceable, Transliterator+Position, Int32) |
通常はキーボード イベントの結果として、新しい文字が挿入された後に明確に表記変換できるテキスト バッファーの部分を表記変換します。 |
| Transliterate(IReplaceable, Transliterator+Position, String) |
新しいテキストが挿入された後、通常はキーボード イベントの結果として、文字変換できるテキスト バッファーの部分を明確に表記変換します。 |
| Transliterate(IReplaceable, Transliterator+Position) |
明確に表記変換できるテキスト バッファーの部分を表記変換します。 |
| Transliterate(IReplaceable) |
文字列全体を所定の位置に表記変換します。 |
| Transliterate(String) |
文字列全体を表記変換し、結果を返します。 |
| 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) |
明示的なインターフェイスの実装
| Name | 説明 |
|---|---|
| IJavaPeerable.Disposed() |
|
| IJavaPeerable.Finalized() |
|
| IJavaPeerable.JniObjectReferenceControlBlock |
|
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
|
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
|
| IJavaPeerable.SetPeerReference(JniObjectReference) |
|
拡張メソッド
| Name | 説明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
インスタンス |
| JavaAs<TResult>(IJavaPeerable) |
|
| JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
| JavaCast<TResult>(IJavaObject) |
|
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
|