在WPF中设置“语言”属性时遇到奇怪的事情:
:一种。此文本在WPF 3.5中不正确呈现:
فاکس:+44 1908 215040
它适用于WinForms和Silverlight。请注意,它包含“左至右标记”(U + 200E)
这是上面的HTML版本,带有LRM的数字字符引用,可视化LRM的插入位置:
فاکس: ‎+44 1908 215040
B中。此文本在WPF中正确呈现:
فاکس:+ 44 1908 210210
但它包含(我相信)不必要的LRM角色。我以反复试验的方式整理了文本。
以下是带有额外LRM字符的HTML版本
فاکس: ‎+‎44‎ ‎1908‎ ‎215040‎
为什么需要额外的字符/我在原文中做错了什么?
注意:IFF设置语言属性时出现问题,无论是在XAML中显式还是在代码中(如Language =“fa-IR”),或者通过覆盖代码中语言属性的默认值(假设当前文化为“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))被忽略。
我真的需要帮助了解正在发生的事情,因为这可能会成为将我的应用程序本地化为波斯语和阿拉伯语的显示器。
我怀疑我是那个做错事的人,因为我没有谷歌解决这个问题。 这是一篇关于MS Connect的相关文章,但到目前为止还没有人确认这种行为是一个错误:
http://connect.microsoft.com/WPF/feedback/details/682784/incorrect-unicode-bidi-behaviour#
注意:我对BiDi算法一般不熟悉,并且对WPF中的实际实现知之甚少。我对Unicode有基本的了解。