Android の双方向解析アルゴリズムにはいくつかの欠陥があると思います。Unicode には、これらの問題に役立つ可能性のある、目に見えない強力な方向性を持つ 2 つの文字があります。
- U+200E - 左から右へのマーク
- U+200F - 右から左へのマーク
数字の順序の問題については、数字列の両側に左から右へのマーク (U+200E) を付けてみてください。
Unicode には、次の双方向フォーマット コードもあります。
- U+202A - 左から右への埋め込み
- U+202B - 右から左への埋め込み
- U+202C - 方向フォーマットのポップ (以前の埋め込みまたはオーバーライドをキャンセルします)
- U+202D - 左から右へのオーバーライド
- U+202E - 右から左へのオーバーライド
ヘブライ語テキストの英語の断片の問題については、英語の前に右から左へのマークを付けるのと同じくらい簡単かもしれません。(Android のアルゴリズムは、最初の文字が英語であるため、段落が左から右であると認識している可能性があります。) それがうまくいかない場合は、選択したテキストを書式設定コードの組み合わせで囲んでみてください。(左から右への埋め込みに続いて、pop 方向の書式設定を試みます。また、選択的な明示的な右から左への埋め込みと組み合わせて、すべての周りに右から左への埋め込みを試みます。)
これらがテキスト レイアウトに影響を与えると想定される方法は、Unicode Bidirectional Algorithm Unicode Standard Annex #9で定義されています。ただし、Android の実装が壊れている場合 (私は壊れているのではないかと思います)、問題が解決するまで試行錯誤するのが最善の方法です。幸運を。
編集
コードに関する限り、Java での実行方法の例を次に示します。
String text = "גרסה \u200e2.100\u200e זמינה";
XML では、次のようになります。
<string name="update_available">גרסה ‎2.100‎ זמינה</string>