Freemarker如果土耳其语的条件失败并带有特定关键字

时间:2017-10-06 06:45:23

标签: freemarker turkish

我将变量与值进行比较。结果似乎与我尝试瑞典语/英语/荷兰语/葡萄牙语和土耳其语等语言不同。

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

我无法追踪问题,为什么我只能使用土耳其语语言环境并使用文本&#34;安装&#34;来获得不同的输出。

另外,想知道在这样的任何其他语言环境中是否还有其他字符。

我已尝试在http://try.freemarker.org/上运行此代码并得到类似的回复。

1 个答案:

答案 0 :(得分:2)

您刚刚遇到了着名的土耳其语区域错误。

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

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

String.toLowerCaseString.toUpperCase的javadoc中记录了它。

还有一个bug report表示问题也可能发生在阿塞拜疆语区域(az_AZ)。我知道唯一可能导致问题的另一个角色是德语ß