2014-09-02 69 views
1

我在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

我懷疑這事做從右到左的風格,但如何在細節?


UPDATE:

現在我已經寫了一個小型的Java程序,看看字符的實際序列。

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。

回答

0

的炭序列是這裏(碼點):

123=>{ 
48=>0 
125=>} 
32=> 
1608=>و // DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC=true 
32=> 
123=>{ 
49=>1 
125=>} 

的Unicode推斷的顯示樣式也從評估雙向上下文。所以在這裏,unicode算法似乎首先將標準LTR上下文應用於發現的第一個字符,因此保留了字符序列「{0}」。

當算法輸入阿拉伯字符時,它表示它的雙向狀態並將其應用於下一個字符。根據official paper of W3C這意味着:

RTL上下文(從右到左)中的開括號字形「{」更改爲「}」的形狀。所以從阿拉伯字符的角度來看,留給阿拉伯字符的序列是「1}」,這相當於通常的LTR形式「{1」。在讀取了ASCII字符「1」後,unicode算法評估現在上下文再次是​​LTR,因此以正常形式「}」顯示右括號。然而,最終的視覺效果(不是以碼點的形式表示)就好像有一個額外的右括號和一個較少的左括號。

我希望如果在雙向上下文中遇到類似的奇怪視覺效果,SO讀者可能會發現這個解釋很有用。