The browser header just tells you what language the user wants to see. A Spanish-speaking person on a business trip to Japan probably wants to see websites in Spanish.
I think you can use reverse-IP services to make a guess, but if it's for commerce purposes I think you have to ask the user to tell you.
Similarly with geo-location: the physical position of the computer may or may not be relevant to the needs of the user browsing the site.