How should I serve different content based on user location?

Showing content based on the IP address is dangerous. Since most (or all) Google IP addresses are US located, you will hide your non us-english content.

As Matt says it doesn't have to be cloaking, in fact it is.
It's much better to create all the different language pages and redirect the visitor to the right language based on the IP address he is using.