Why conversion of characters is not working with Cyrilic letters?

If we try to use ToLowerCase or ToUpperCase with Cyrillic characters, like:

In[22]:= ToLowerCase["???? ABCD"]
Out[22]= "???? abcd"

The result is not the expected. Also for some reson :

In[23]:= UpperCaseQ["?"]
Out[23]= False

I used to overcome that with a new function:

bgAlphabetLower = Delete[CharacterRange["?", "?"], {{-3}, {-5}}];
bgAlphabetUpper = Delete[CharacterRange["?", "?"], {{-3}, {-5}}];
ruleSetBGUpperToLower = Table[bgAlphabetUpper[[i]] -> bgAlphabetLower[[i]], {i, 30}];
bgUpperToLower[s_String] := StringReplace[s, ruleSetBGUpperToLower];

But i guess it could be some core functionality that could be used as well.
Any suggestions / comments?

This should indeed be implemented as you said above, it DOES work for the ‘normal’ latin alphabet and for the greek alphabet, i see no reason why it shouldn’t work for the cyrillic. Korean, Hebrew, and Arabic don’t have capitals, so there is should `work’ already :slight_smile:

I understand these two letters were excluded for not being part of the Bulgarian alphabet, but I’d still keep {“?” → “?”, “?” → “?”} and add at least “?” → “?” (i with grave, or “? ? ???”).

Vladimir, thank you for bringing this to our attention! We will take your suggestion into consideration.