7

私は比較的単純な Android アプリに取り組んでいます。ヘブライ語版だけでなく、英語版も出してほしいです。(RTL 右から左への配置)

レイアウト xml ファイルで配置を右に手動で変更しました。文に数字が含まれている場合 (文の中央に)、数字はミラービューで表示されます: 29 は 92 として表示され、 21: 45 は 54:12 として表示され2,000 は 000,2 として表示されます

また、文が数字や英字で始まると、文末に放り込まれてめちゃくちゃになってしまいます。

Android バージョン 4.0.3 ではヘブライ語をサポートしていると思います。エミュレーターで確認しました。

古いバージョンの場合、ヘブライ語を実装する正しい方法はありますか? 助けてください。

4

2 に答える 2

23

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">גרסה &#x200e;2.100&#x200e; זמינה</string>
于 2012-06-12T01:25:35.043 に答える