При установке свойства «Язык» в WPF я испытываю странные вещи:
- Установите для FlowDirection значение "RightToLeft" в окне или текстовом поле / текстовом блоке
- Установите для свойства Language значение "fa-IR"
- Установите текст для одного из примеров текстов ниже (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.