Freemarker 如果使用特定关键字的土耳其语条件失败

Freemarker if condition fail on Turkish language with specific keyword

我正在比较变量和值。结果似乎与我尝试过的语言不同 Swedish/English/Dutch/Portugese 和土耳其语。

<#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-

我无法追踪为什么我在土耳其语言环境和文本 "install" 的情况下得到不同输出的问题 "install"。

另外,想知道在任何其他语言环境中是否有任何其他角色像这样工作。

我也在 http://try.freemarker.org/ 上试过 运行 这段代码,得到了类似的回应。

您刚刚遇到了著名的土耳其语言环境错误。

土耳其语包含 i(Unicode LATIN SMALL LETTER I)和 ı(Unicode LATIN SMALL LETTER DOTLESS I),ı 是 [= 的小写字母13=]。

例如"INSTALL".toLowerCase()等于"ınstall",不同于"install"

String.toLowerCase and String.toUpperCase.

的 javadoc 中有记载

还有一个 bug report 说这个问题也可能发生在阿塞拜疆语言环境 (az_AZ) 上。我知道的唯一可能导致问题的其他字符是德语 ß.