4

WPF で「Language」プロパティを設定すると、奇妙なことが発生します。

  1. ウィンドウまたはテキストボックス/テキストブロックでFlowDirectionを「RightToLeft」に設定します
  2. 言語プロパティを「fa-IR」に設定します
  3. テキストを以下のサンプル テキストのいずれかに設定します (A、B)

A. このテキストは、WPF 3.5 では正しくレンダリングされません。

電話番号: +44 1908 215040

WinForms と Silverlight で動作します。「LEFT-TO-RIGHT MARK」 (U+200E) が含まれていることに注意してください。

以下は、LRM が挿入されている場所を視覚化するために、LRM への数字参照を含む上記の HTML バージョンです。

فاکس: ‎+44 1908 215040

B. このテキストは WPF で正しくレンダリングされます。

日付: + 44 1908 210210

しかし、不必要な LRM 文字が含まれている (と私は信じています)。試行錯誤しながら文章をまとめました。

これは、追加の LRM 文字を含む HTML バージョンです。

فاکس: ‎+‎44‎ ‎1908‎ ‎215040‎

なぜ余分な文字が必要なのですか / 元のテキストのどこが間違っているのですか?

注: この問題は、XAML またはコード (Language="fa-IR" など) で明示的に Language プロパティを設定する IFF か、コードで Language プロパティの既定値をオーバーライドすることによって発生します (現在のカルチャが "fa-IR" であると仮定)。そのとおり:

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
        new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

language プロパティを en-US のままにしておくと、テキストは WPF で正しくレンダリングされますが、値の変換が機能するように Language を設定する必要があります。文化に依存するデータ。

LRO ('LEFT-TO-RIGHT OVERRIDE' (U+202D)) が無視されるなど、他の問題もあります。

これは、アプリケーションをペルシャ語とアラビア語にローカライズする際の障害になる可能性があるため、何が起こっているのかを理解する助けが本当に必要です。

問題をグーグルで検索できなかったので、私は何か間違ったことをしていると思います。これは、MS Connect に関する関連記事ですが、これまでのところ、動作がバグであると確認された人はいません。

http://connect.microsoft.com/WPF/feedback/details/682784/incorrect-unicode-bidi-behaviour#

注: 私は一般的に BiDi アルゴリズムに精通しておらず、WPF での実際の実装についてはさらに詳しく知りません。Unicode の基本的な理解があります。

4

0 に答える 0