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/ и получил аналогичный ответ.
1 ответ
Вы только что столкнулись с известной турецкой ошибкой локали.
Турецкий язык содержит оба i
(Юникод LATIN МАЛЕНЬКОЕ ПИСЬМО I) и ı
(Unicode LATIN МАЛЕНЬКОЕ ПИСЬМО БЕЗ ЗАПИСИ I) ı
это строчная буква для I
,
Например "INSTALL".toLowerCase()
равно "ınstall"
, который отличается от "install"
,
Это задокументировано в Javadoc String.toLowerCase
а также String.toUpperCase
,
Существует также сообщение об ошибке, в котором говорится, что проблема может возникнуть и в азербайджанской локали (az_AZ). Единственный другой персонаж, которого я знаю, который может вызвать проблемы, это немец ß
,