2017-10-06 17 views
1

변수와 값을 비교합니다. 결과는 스웨덴어/영어/네덜란드어/포르투갈어와 터키어를 사용해 보았을 때와 다른 언어로 보입니다.조건이 특정 키워드로 터키어로 실행되지 않는 경우 Freemarker

<#assign fm_bidBucket>Install</#assign> 
<#assign _text><#if fm_bidBucket?trim?lower_case == "both">both-<#elseif fm_bidBucket?trim?lower_case == "install">install-<#else>else-</#if></#assign> 
${_text} 

Output: 
In case of any language: install- 
In case of Turkish language: else- 

그러나 조건을 소문자 대신 upper_case로 변경하면 예상대로 작동합니다.

<#assign fm_bidBucket>Install</#assign> 
<#assign _text><#if fm_bidBucket?trim?upper_case == "both">both-<#elseif fm_bidBucket?trim?upper_case == "install">install-<#else>else-</#if></#assign> 
${_text} 

Output: 
In case of any language: install- 
In case of Turkish language: install- 

또는 조건의 내용을 변경하면 정상적으로 작동합니다.

<#assign fm_bidBucket>Siddharth</#assign> 
<#assign _text><#if fm_bidBucket?trim?lower_case == "both">both-<#elseif fm_bidBucket?trim?lower_case == "siddharth">install-<#else>else-</#if></#assign> 
${_text} 

Output: 
In case of any language: install- 
In case of Turkish language: install- 

터키어 로켈의 경우에만 "설치"라는 텍스트와 다른 출력이 표시되는 이유를 추적 할 수 없습니다.

또한 이처럼 다른 로케일에 다른 문자가 있는지 알고 싶습니다.

나는이 코드를 http://try.freemarker.org/에서 실행하려고 시도했지만 비슷한 응답을 얻었습니다.

답변

2

방금 ​​터키의 유명한 로케일 버그가 발생했습니다.

터키 언어는 포함 모두 i (유니 코드 LATIN SMALL LETTER I)과 ı (유니 코드 LATIN SMALL LETTER 점이없는 I) 및 ıI의 소문자입니다.

예를 들어 "INSTALL".toLowerCase()"ınstall"과 같으며 "install"과 다릅니다.

String.toLowerCaseString.toUpperCase의 javadoc에 설명되어 있습니다.

이 문제는 Azeri 로켈 (az_AZ)에서도 발생할 수 있다고 말하는 bug report도 있습니다. 문제를 일으킬 수있는 유일한 다른 문자는 독일 ß입니다.

+0

답장을 보내 주셔서 감사합니다.하지만 단어의 시작 부분에 "i"가 있고 그 중간에 있지 않을 때 왜 일어나는지입니다. 위의 사례를 확인하면 Siddharth 또는 Title을 텍스트로 사용하면 정상적으로 작동합니다. –

+0

귀하의 경우 첫 글자 만 대문자로되어 있기 때문입니다. .toLowerCase() = "ınstall"및 "Siddharth".toLowerCase() = "shiddharth"'를 설치하십시오. 두 번째 경우에는 터키어가 영어와 똑같이 작동합니다. – obourgain

+0

toLowerCase()를 사용하여 문자의 변환이 발생하면 정확한 텍스트와 만 일치합니다. –