1) Keyboard mapping. Imho, that is a task, that must, be left to the OS.
I do not know, how you have done your proof of concept?
But just translating something like "a" becomes "whatever" will not work.
People may have different keyboards connected, which can have totally different layouts, and even make your mappings differ. And then there are dead keys, that will do nothing, unless combined with the next stroke. e.g one key says "accent" and the next "a", which results in an accented "a". OR try the IME for Japanese and Chinese
And you can't even be sure about one single language. I use a uk keymap. But dvorak. So even it produces the keystrokes for uk English, it has a different layout.
There are also special input methods for disabled people, which may again be different...
If you need to change the input for a specific TEdit, then you need to tell the OS, and let the OS handle that.
Afaik the way to do this, is to communicate with the IME (Input method manager). That exists on most OS.
On windows the user can set global hotkeys (outside the app), to change the layout. But afaik, the app can change certain IME settings too.
------------
2) Sorting:
Yes it would be good to have a global hook, for all string comparisation. Not sure, maybe it exist....
As for the rest, I think implementing custom sort orders, should be left to the user.
In any way it is not done by language, but by "collation". Alone the German lang, has several sort orders...
And knowing that, within one application, different places could use different collations of the same language.