You will probably hear a lot of suggestions, but they will eventually lead to the client itself. They are either willing to learn new things or not. And there is nothing you can do about it.
Now, what you can do it make an initial conversation with them asking them about their technical knowledge of the area in question. I personally do not do that as I simply forget to ask them these things. Later in the process I may discover that they do not understand some terms and then I explain it additionally.
I also have a habit of explaining specific terms in the brackets, a few first times I talk to the client. The second thing is that I tell them on the beginning to stop me any time I start sounding too technical. For example, last night I had to explain the client why I will be late 2 days on a certain task by introducing him to a term which made me work slower. Then I used good 5 sentences explaining to him what this term means, how is it used in the UI environment and why it's harder to detect bugs. Next time I mention this term, I do not have to make an essay.
So far this either works with me or clients are too embarrassed to ask for clarification :). No one likes to sound stupid, although we'd never call them that way.
This covers points 1 and 2.
I never tried point 3. Just learned from my experience.
The bottom likeline is your behaviour as well. Never try to boast in front of the client by trying to look like a guru or something. We are all gurus to them just by the fact thatbecause we are "programmers". So he already sees a guru in you and if you talk simple with him, he will sooner interpret it as yourself stoppingstooping to his level, then yourself being ignorant or a bad programmer. So maybe you can have an introductory talk with the client to discover his technical background (again, I do not do that, but it does not mean I am right to do so).