First of all, you notion apparatus is probably broken, or perhaps your terminology is too much off. However, I can see many signs that the real problem is worse than just terminology. First, let's dismiss "phonetics". Entering texts has nothing to do with phonetics, it's text. Perhaps you have read a bit to understand what is phonetics, it's about sounds of speech, not characters you enter; there is a big distance between these aspects of human speech:
Phonetics - Wikipedia, the free encyclopedia[
^].
Now, about cultures and languages.
This is not the business of text boxes or any other controls. This is the responsibility of the whole application, formally, of some or all of the application threads. (Please see the documentation on
System.Threading.Thread
,
https://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture(v=vs.110).aspx[
^],
https://msdn.microsoft.com/en-us/library/system.threading.thread.currentuiculture(v=vs.110).aspx[
^].) I don't want to further discuss cultures here, please see Solution 1; the problem is even deeper.
When it comes to "start writing in Urdu… English", and so on, the problem is the general understanding of computing culture, in this case, relationships between the user, OS and an application. When it comes to a text box, nothing "starts writing in Urdu" (or any other language) but
the user. This is the use who has enter some characters. Nothing should be automatically switched. The user should be able to enter characters of any language at any given moment of time. If the status of application cannot except some characters, it could be a matter of validation, in worst case — filtering. If you want to learn how to filter out some characters, I can help you (or you can figure out how to do it all by yourself), but this is not your real problem. Your problem is understanding. What is the current input language should not be decided by the application. It should be decided by the user and only by the user. This is done via choosing one or another input method and input language, which is done via the OS tool, such as the language control element on the Windows taskbar. You can contribute, in particular, to available layouts, by developing and installing your own. How to do that? I explained it in my past answer:
Problem in typing in Hindi and english[
^].
Important note: it allows the user to enter fragments in different languages in a single string. But this how modern computing culture works. In nearly all modern OS, all texts are based on Unicode. Rare applications not based on Unicode are either obsolete or solve application problems where the languages are majorly irrelevant (and are still obsolete). .NET strings are Unicode strings and nothing else. Non-Unicode encodings are still marginally supported, for some objects which are not strings, such as streams.
Important point here is: the input method/language choice should be separated from the application.
—SA