Неправильное поведение биди в WPF? - PullRequest
4 голосов
/ 01 сентября 2011

При установке свойства «Язык» в WPF я испытываю странные вещи:

  1. Установите для FlowDirection значение "RightToLeft" в окне или текстовом поле / текстовом блоке
  2. Установите для свойства Language значение "fa-IR"
  3. Установите текст для одного из примеров текстов ниже (A, B)

A. Этот текст не отображается правильно в WPF 3.5:

فاکس: +44 1908 215040

Работает с WinForms и Silverlight. Обратите внимание, что он содержит «СЛЕДУЮЩУЮ ПРАВУ» (U + 200E)

Вот HTML-версия вышеупомянутого с числовыми символьными ссылками на LRM, чтобы визуализировать, где вставлен LRM:

فاکس: ‎+44 1908 215040

B. Этот текст отображается правильно в WPF:

فاکس: + 44 1908 210210

Но он содержит (я считаю) ненужные символы LRM. Я собрал текст методом проб и ошибок.

Вот HTML-версия с дополнительными символами LRM

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

Зачем нужны дополнительные символы / что я делаю не так с исходным текстом?

Примечание. Проблема возникает из-за того, что IFF устанавливает свойство Language явно, в XAML или коде (например, Language = "fa-IR"), или переопределяет значение по умолчанию свойства Language в коде (при условии, что текущая культура является "fa-IR") так:

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

Если я оставлю свойство языка как en-US, текст будет корректно отображаться в WPF, но мне действительно нужно настроить язык так, чтобы преобразование значений работало без необходимости явно устанавливать ConverterCulture для каждой привязки данных, которая может быть привязка к некоторым зависимым от культуры данным.

Существуют и другие проблемы, такие как игнорирование LRO ('LEFT-TO-RIGHT OVERRIDE' (U + 202D)).

Мне действительно нужна помощь, чтобы понять, что происходит, так как это может оказаться препятствием для локализации моего приложения на персидский и арабский языки.

Я подозреваю, что я что-то делаю не так, потому что я не могу найти эту проблему в Google. Вот похожий пост на MS Connect, но пока никто не подтвердил поведение как ошибку:

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

Примечание: я не настолько знаком с алгоритмом BiDi в целом и даже меньше знаю о фактической реализации в WPF. У меня есть базовое понимание Unicode.

...