我在CLDR-25数据中观察到阿拉伯语区域中列表模式格式的以下条目(希伯来语中也类似):
<listPatterns>
<listPattern>
<listPatternPart type="start" draft="contributed">{0}، {1}</listPatternPart>
<listPatternPart type="middle" draft="contributed">{0}، {1}</listPatternPart>
<listPatternPart type="end" draft="contributed">{0}، و {1}</listPatternPart>
<listPatternPart type="2" draft="contributed">{0} و {1}</listPatternPart>
</listPattern>
</listPatterns>
请注意,LDML规范仅涉及形式为“ {0}”或“ {1}”的占位符(与类型“ end”和“ 2”的列表模式部分不同)。也可以看看:
http://cldr.unicode.org/development/development-process/design-proposals/list-formatting
或者
http://cldr.unicode.org/translation/lists
我怀疑这与从右到左样式有关,但是如何详细说明呢?
更新:
现在,我编写了一个小的Java程序来查看char的真实序列。
String s = "{0} و {1}"; // as displayed in browser or IDE-window
for (char c : s.toCharArray()) {
System.out.println(c);
}
输出为:
{
0
}
و
{
1
}
所以这似乎是一个显示问题,而不是字符序列本身的问题?我使用Internet Explorer 9和Eclipse 4.3。
字符序列在这里(以代码点为单位):
123=>{
48=>0
125=>}
32=>
1608=>و // DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC=true
32=>
123=>{
49=>1
125=>}
Unicode还通过评估双向上下文来推断显示样式。因此,此处的unicode算法似乎首先将标准LTR上下文应用于找到的第一个字符-因此保留了字符序列“ {0}”。
当算法输入阿拉伯字符时,表示其双向状态,并将其应用于接下来的下一个字符。根据W3C的官方文件,这意味着:
在RTL上下文中(从右到左),左方括号标志符号“ {”的形状更改为“}”。因此,从阿拉伯字符的角度来看,留给阿拉伯字符的序列为“ 1}”,这等效于通常的LTR形式“ {1”。读取ASCII字符“ 1”后,unicode算法评估为现在上下文再次为LTR,因此以常规形式“}”显示右括号。最终的视觉结果(但是不是以代码点的形式)是好像有一个额外的关闭括号和一个更少的打开括号。
我希望SO读者在双向上下文中遇到类似的奇怪视觉效果时,可以从中获得有用的解释。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句