2012-06-11 16 views
6

私は比較的単純なAndroidアプリを開発中です。私は英語版とヘブライ語版が必要です。 (RTL右から左への整列)Androidのヘブライ語(RTL)の統合

レイアウトXMLファイル内のアライメントを手動で変更しました。文は(それの真ん中で)数字が含まれている場合、数字はミラービューに表示されます: 29が表示されます000,2として54:12と2,000表示される92午前21時45分のように表示されます。

また、文章が英数字または数字で始まる場合、文の終わりにスローされて、すべての文章が乱されます。

アンドロイド版4.0.3ではヘブライ語をサポートしていると思います。エミュレータで確認しています。

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

答えて

20

Androidの双方向解析アルゴリズムにはいくつかの欠陥があると思います。 - 左から右マーク

  • U + 200F - 右から左マーク
    • U + 200E:Unicodeはこれらの問題に役立つかもしれない2目に見えない、強く指向の文字を持っています数字の順序問題の場合は、数字列の両側に左から右の記号(U + 200E)を入れてみてください。

      Unicodeは、以下の双方向フォーマットコードを有する:

      • U + 202A - ポップ -
      • U + 202C埋め込み右から左 - 左から右へ
      • U + 202Bを埋め込みます指向フォーマット(以前の埋め込みをキャンセルまたは上書き)
      • U + 202D - 左から右へのオーバーライド
      • U + 202E - 右から左へのオーバーライド

      ヘブライ語のテキストの英語の断片の問題については、英語の前に右から左のマークを付けるのと同じくらい簡単かもしれません。 (Androidのアルゴリズムは、最初の文字が英語であるため、パラグラフが左から右の印象を受けている可能性があります)。それでも機能しない場合は、選択したテキストを書式設定コードの組み合わせで囲んでみてください。 (私は左から右への埋め込みに続いてポップ方向の書式設定を試みます。右から左に埋め込むこともできます。テキストレイアウトに影響を及ぼすと思われる文字列は、Unicode双方向アルゴリズムUnicode Standard Annex #9によって定義されます。しかし、Androidの実装が壊れている(と私はそれが疑わしい)場合、あなたが正しいことを得るまで、試行錯誤ができます。がんばろう。

      EDIT

      限りコードに関しては、ここではそれはJavaで行われるかもしれない方法の例です:XMLで

      String text = "גרסה \u200e2.100\u200e זמינה"; 
      

      、それは次のようになります。

      ここ
      <string name="update_available">גרסה &#x200e;2.100&#x200e; זמינה</string> 
      
    +0

    は、あなたがこの – Nirali

    +0

    @Niraliを適用するためのいくつかのコードのフォーマットを与えることができ、私はあなたが文法間違いを持っ​​て –

    +0

    いくつかのコードを追加しましたヘブライ語 - あなたはזמיןをזמינהに変更する必要があります – auval

    2

    私のヘブライ文字列xmlの例です.Ted Hoppのおかげで答え:

    あなたはtの前に '\ u200e'を追加する必要があります彼、あなたに問題が発生するのchar:

    <string name="basic_text1">המר על תוצאת המשחק\u200e:</string> 
    

    をし、結果は次のようになります。

    :המר על תוצאת המשחק 
    
    +0

    ヘブライ語のテキストを含むすべての行でこれを行う必要がありますか? –

    +1

    私ができる限りランタイムでこれをする必要はありませんが、グラフィカルなレイアウトで正しく表示するために追加する必要があります。 –

    +0

    カスタムフォントをインストールする必要がありましたか? –