I think it should be dealt with like this:
- If there is setting in user account, select this language, else:
- If there is cookie stored, select this language, else:
- If it is possible to determine system/browser language, select it, else:
- If it is possible to assign IP ot an area, select this language, but ask for user confirmation and store the cookie.
Plus: Always allow user to select another language, with some languages displayed on top.
First of all, language preference is something that is strictly related to the user. It is the user, who does or does not speak the particular language.
Having this in mind, multilingual systems should determine the language based on the settings stored in user account in the first place.
Secondly, user should stay with the same language he used the site previously, so that it does not change all the time when travelling abroad. Thus, a cookie should be the second level of language selection.
Should it be not possible to use the above (no user accounts, no previously stored cookies etc.), language still needs to be automatically determined somehow. Most probably, the language of the system/browser of the user is the one he/she understands. Hence, this should be the third one.
And finally, if there is no possibility to check the language of the system, IP can be used. Most users, who access a site from an area speak th language commonly used in this area.
But there should still be access to select other languages, and I think that some should be preferred, and thus displayed at the top of the list - especially: English, Spanish, Chinese & Japanese + the one determined by system and IP.
Regarding language selector, well... there is a nice redesigned version of country selector, descrebed here: http://uxdesign.smashingmagazine.com/2011/11/10/redesigning-the-country-selector/ - quite old now, but I like it as it allows to save space. However, it is harder to manifest it is a language selector, as users got used to lists, methinks. In the same time, maybe there should be just a list of some most common languages, and then this little treasure.
Here is a nice article about selecting language with some alternatives to the list: http://searchenginewatch.com/article/2105398/5-Options-for-Choosing-a-Country-Region-or-Language-Selector I think the map is a nice option as well, although there are countries with more than one language, aren't there. In these cases I think user should choose it from a shortlist for these countries.