2014-09-02 2 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 :

지금은 문자의 실제 순서를 볼 수있는 작은 자바 프로그램을 작성했습니다.

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=>} 

유니 코드 양방향 컨텍스트 평가에서도 표시 스타일을 추론한다. 그래서 유니 코드 알고리즘은 처음 발견 된 첫 번째 문자에 표준 LTR 문맥을 먼저 적용하여 문자 시퀀스 "{0}"을 유지하는 것처럼 보입니다.

알고리즘이 아랍어 문자를 입력하면이 문자는 양방향 상태를 나타내며 다음의 다음 문자에 적용됩니다. official paper of W3C에 따르면 다음과 같습니다.

RTL- 컨텍스트 (오른쪽에서 왼쪽)에서 여는 괄호 모양 "{"이 "}"로 변경됩니다. 따라서 아라비아 문자의 관점에서 볼 때 아라비아 문자로 남은 순서는 "1"이며 이는 일반적인 LTR 양식 "{1"과 동일합니다. ASCII- 문자 "1"을 읽은 후 유니 코드 알고리즘은 컨텍스트가 LTR이므로 다시 닫음을 표시하므로 닫는 대괄호를 일반 형식 "}"으로 표시합니다. 코드 포인트의 관점이 아닌 최종 시각적 결과는 마치 하나의 추가 닫기 대괄호와 하나의 적은 대괄호가있는 것처럼 보입니다.

양방향 컨텍스트에서 비슷한 이상한 시각 효과가 발생하는 경우 SO 독자가 유용 할 수 있기를 바랍니다.