WPF で「Language」プロパティを設定すると、奇妙なことが発生します。
- ウィンドウまたはテキストボックス/テキストブロックでFlowDirectionを「RightToLeft」に設定します
- 言語プロパティを「fa-IR」に設定します
- テキストを以下のサンプル テキストのいずれかに設定します (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 の基本的な理解があります。